2.5 变色材质制作 |
|
本案例中发光小球是同一个球体在不同时段的截图,如图2-86所示,它的颜色会随着时间推移而进行变化,类似呼吸灯一样进行指定颜色的交替变化。
图2-86
如图2-87所示,使用了三维矢量Constant 3Vector(快捷键3)表达式指定颜色,使用了线性插值Lerp(快捷键L)来融合颜色,Time、Sine和Abs这三个表达式中,Time时间一直向前推进,Sine以时间推进为前提,在1、0、-1、0、1这五个数值中进行曲线变化,最后使用Abs表达式提取参数的绝对值,把Sine生成的数值曲线全部转换为正数,输入数值被转换为1、0、1、0、1。线性插值Lerp的Alpha节点只接收0~1之间的数值,小于0或大于1的数值无效。案例中由于Alpha节点接收的数值是不断变化的,因此Lerp表达式会不断地在两个三维矢量(黄色与青色)表达式间进行颜色融合变化,结果会呈呼吸灯的样式表现出来。如图2-88所示,颜色转换速度可以找到Sine表达式属性窗口中的Period(正弦波长度)数值进行调整,数值越大,转换一次的时间就越长。
图2-87
图2-88
接下来制作一个进阶案例,要使用三种颜色进行融合,使材质在三种颜色中转换。
以上一个示例为基础,如图2-89所示,在材质编辑窗口中再次添加一个Lerp表达式,给它的B节点连接一个数值为5、0.1、1的三维矢量,A节点连接第一个Lerp表达式输出的结果。靠左的Lerp表达式Alpha节点接收来自Time和Sine的输出数据,靠右的Lerp表达式Alpha节点连接Abs表达式的输出数据。最后把融合了三种颜色的Lerp表达式连接到材质的Emissive Color自发光节点。预览窗口中可以看到材质融合三种颜色开始变换了。
图2-89
再来解析如图2-90所示的这个效果。示例中应用了本节前面的案例以及制作高亮材质的原理,表现一个循环变色而且内部透明,边缘有动态纹理变化的球体。
图2-90
这里将前面制作三个颜色融合变化的部分,完整地保留在了这个案例中,如图2-91所示。
图2-91
如图2-92所示,这部分的表达式和变色材质案例一样,不过连接两个Lerp表达式Alpha节点的是Abs函数表达式输出的结果。
图2-92
如图2-93所示,在纹理部分,沿用了高亮材质小节的部分纹理控制表达式节点,使用TexCoord与Panner表达式对Texture Sample纹理表达式进行纹理位移。如图2-94所示,TexCoord属性面板里将UTiling与VTiling的数值设置为3,把Texture Sample的纹理分成横向与竖向各3组。如图2-95所示,Panner表达式属性中将Y轴数值设置为0.5,经过去色(Desaturation)处理使纹理图案能被重新赋予颜色而不出现偏色。
图2-93
图2-94
图2-95
处理完颜色与纹理部分,如图2-96所示,创建Fresnel(菲涅耳)表达式与两个乘法表达式,一个乘法表达式连接Fresnel与Lerp表达式,另一个乘法表达式连接Fresnel与Desaturation表达式。将两个乘法表达式输出的结果分别连接两个Power表达式,在Power表达式的Exp节点连接属性数值为5的一维常量。这里使用两个Power表达式是为了使颜色与纹理的表现更为清晰,剔除颜色过于暗淡的纹理。最后将处理颜色变化部分的Power表达式连接到材质自发光(Emissive Color)节点,处理纹理部分的Power表达式连接到材质透明度(Opacity)节点。
图2-96
读者们可能会说,为什么我的材质节点接口处的Opacity是灰色不能连接的?原因是材质的基础属性设置不对。我们选择材质,或者什么都不选中,属性窗口显示的就是这个材质的基础属性了,把材质的混合方式改为Translucent透明类型,这个模式支持材质的透明通道,此时材质的Opacity节点就启用了。勾上Two Sided(双面显示)复选框,如图2-97所示。
图2-97