用实际例子似乎更能提高兴趣。
现在来制作一个卡通材质来理解MAYA的材质系统的能力。这个材质是在国外网站上下载的,好象有人写过类似的教程。我理清了一下思路。
首先,建立以下几个节点:
一个Blinn材质(不要带Shading Group);
一个Surface Shader节点(带Shading Group);
一个Ramp节点(不要带Placement);
一个SampleInfo节点;
一个Clamp节点;
一个Condition节点。
我们用Blinn控制场景物体上的高光区域。将Blinn的Color设置为灰度。
场景对象的颜色用Ramp的颜色队列(我是指Ramp上的颜色标签)来实现。Blinn将通过后面要讲到的方法将它的灰度值重新映射到Ramp的Color中,以达到控制Ramp的强度的目的。
SampleInfo是用来实现卡通材质的“勾边儿”效果的。
将Blinn的OutColor连接到Clamp的Input属性中。
Clamp节点的作用是将某个值控制在一定的范围内。
在这里是准备将最后的强度值减到不大于1。在实际渲染结果中,有些高光区域也许会过于“白”了,为了事先准备好,这里设置一个Clamp节点,可以去掉多余的强度。
将Clamp的MAX文字框中的R值设为1,就是最左边的那个。
Clamp节点属性面板中的Min、Max和Input的文字框从左到右分别代表R、G、B。因为单独一个通道就可以表现强度值,所以这里不妨选择R,选择别的也可以。MinR的值为0,
MaxR的值为1。
这样,Blinn Color的颜色强度(注意现在为灰度)被Clamp控制在0——1之间。
连接Clamp的OutputR到Ramp的Vcoord属性中,确认Ramp的模式为VType Ramp。这样,Ramp的颜色强度可以用Blinn Color的灰度控制在0——1之间,前面说的映射就是指这个。
将Ramp OutColor连接到Condition节点的Color1中。
同样,将SampleInfo的Facing Ration连接到Condition的First Term中。
Sampler Info节点也是不容易理解的节点,然而,Sampler Info节点的作用在Maya的材质编辑中极为重要,经常会用到。Sampler Info节点必须与其它节点嵌套才能发挥作用。
Sampler Info节点主要的功用是提供物体表面上任意一点的各种空间信息,如位置、方向和相切特性等等。
需要指出的是,Sampler Info节点返回的信息是针对于“相机空间坐标”进行定位的。在Maya中,存在“相机空间坐标”和“世界空间坐标”两种概念。“世界空间坐标”和“世界空间坐标”的关系可以这样理解:
假设你就是MAYA场景中的物体,有一个操作MAYA的人在显示器外面看着你。“相机空间坐标”的Z轴方向和“世界空间坐标”的Z轴方向相反。
Facing Ratio的值受场景物体朝向相机的表面的法线和相机目光方向之间角度的影响。
值在0——1之间。
如果物体表面上的某个位置的法线同相机的目光方向的角度为90度,刚Facing Ratio=0;
如果角度为0,则Facing Ratio=1。
在Surface Shader中增加以下四个自定义属性。
Thickness:最小值为0,最大值为1,默认值为0.3;
Line R
Line G
Line B
皆为Float 、Scalar属性。
将Thickness属性连接到Conditionr 的Secong Term中;
其余的三个依次连接到Color2的R、G、B通道中。
设置Condition的Operation为Greater Than。
Thickness控制最后渲染效果的“勾边儿”厚度。其余三个属性分别控制“勾边儿”的颜色。
最后连接Condition的OutColor到Surface Shader的OutColor中。
这个Surface Shader材质网络即为我们需要的卡通材质。
讲一下材质的实现原理:
在Condition中,
如果First Term(就是SampleInfo的Facing Ratio)>Second Term(自定义的Thickness);
则输出Color1(就是Ramp的颜色);
否则,输出Color2(由LineR、LineG、LineB实现,这里我们用黑色)
而Thickness的值可以随意更改,这样,就能控制“勾边儿”的厚度。
卡通材质的颜色同Ramp来决定,卡通上色效果中不同颜色区域之间的过渡是“硬边儿”。
所以要把Ramp的Interpolation设置为None。
Blinn也可以给一个Bump Map看看是什么效果,也可以换一个别的材质。
Ramp的设置如图:
图片如下: