![Unreal Engine 4 特效设计必修课](https://wfqqreader-1252317822.image.myqcloud.com/cover/283/27563283/b_27563283.jpg)
2.5 变色材质制作
本案例中发光小球是同一个球体在不同时段的截图,如图2-86所示,它的颜色会随着时间推移而进行变化,类似呼吸灯一样进行指定颜色的交替变化。
![](https://epubservercos.yuewen.com/923280/15825991804142306/epubprivate/OEBPS/Images/Figure-P35.jpg?sign=1739512861-bm0PWfYCApXE82TW1S0fkWi3qK5kZMgp-0-8b200b28cce302cd356380d8906bdfd1)
图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(正弦波长度)数值进行调整,数值越大,转换一次的时间就越长。
![](https://epubservercos.yuewen.com/923280/15825991804142306/epubprivate/OEBPS/Images/Figure-P49_3187.jpg?sign=1739512861-CthX5iO590q8ErwtToXy6rr7L7xZTAdh-0-f2c7a6aa15d094eff8d4a4d111ae4b0d)
图2-87
![](https://epubservercos.yuewen.com/923280/15825991804142306/epubprivate/OEBPS/Images/Figure-P49_3188.jpg?sign=1739512861-6KKcBrzC8RLtXYS2zQ7RrB0EQtT7fetv-0-1f31d15f9a3efe3a177ff68c39ca4ade)
图2-88
接下来制作一个进阶案例,要使用三种颜色进行融合,使材质在三种颜色中转换。
以上一个示例为基础,如图2-89所示,在材质编辑窗口中再次添加一个Lerp表达式,给它的B节点连接一个数值为5、0.1、1的三维矢量,A节点连接第一个Lerp表达式输出的结果。靠左的Lerp表达式Alpha节点接收来自Time和Sine的输出数据,靠右的Lerp表达式Alpha节点连接Abs表达式的输出数据。最后把融合了三种颜色的Lerp表达式连接到材质的Emissive Color自发光节点。预览窗口中可以看到材质融合三种颜色开始变换了。
![](https://epubservercos.yuewen.com/923280/15825991804142306/epubprivate/OEBPS/Images/Figure-P50_3202.jpg?sign=1739512861-vrvp11cKEoOlvElXSduLRmjkrmW0GMTy-0-7c5d06767dab17329c344ed2ff3b9ec2)
图2-89
再来解析如图2-90所示的这个效果。示例中应用了本节前面的案例以及制作高亮材质的原理,表现一个循环变色而且内部透明,边缘有动态纹理变化的球体。
![](https://epubservercos.yuewen.com/923280/15825991804142306/epubprivate/OEBPS/Images/Figure-P50_3206.jpg?sign=1739512861-nU6z7dl923fV68jsf0E8bIiD3Ai3C3Lh-0-b423feccacb75b6bdad83ea93239110e)
图2-90
这里将前面制作三个颜色融合变化的部分,完整地保留在了这个案例中,如图2-91所示。
![](https://epubservercos.yuewen.com/923280/15825991804142306/epubprivate/OEBPS/Images/Figure-P50_3211.jpg?sign=1739512861-BUvrsOBaQ9cz1YX7YYD51NjJiWM22yFs-0-6ae3a6afe2582163a8bc29a98f5cb855)
图2-91
如图2-92所示,这部分的表达式和变色材质案例一样,不过连接两个Lerp表达式Alpha节点的是Abs函数表达式输出的结果。
![](https://epubservercos.yuewen.com/923280/15825991804142306/epubprivate/OEBPS/Images/Figure-P50_3215.jpg?sign=1739512861-C3BYfbCSDClVZjC445yvE9ib69AaHsBK-0-55f44f05e669e7d92aff0fbf265c143c)
图2-92
如图2-93所示,在纹理部分,沿用了高亮材质小节的部分纹理控制表达式节点,使用TexCoord与Panner表达式对Texture Sample纹理表达式进行纹理位移。如图2-94所示,TexCoord属性面板里将UTiling与VTiling的数值设置为3,把Texture Sample的纹理分成横向与竖向各3组。如图2-95所示,Panner表达式属性中将Y轴数值设置为0.5,经过去色(Desaturation)处理使纹理图案能被重新赋予颜色而不出现偏色。
![](https://epubservercos.yuewen.com/923280/15825991804142306/epubprivate/OEBPS/Images/Figure-P50_3219.jpg?sign=1739512861-fQluxl5MWnTHhTcZPNrrV3pv4PqKLNsN-0-901c5e1153918fe884bd1f8649d7e526)
图2-93
![](https://epubservercos.yuewen.com/923280/15825991804142306/epubprivate/OEBPS/Images/Figure-P50_3222.jpg?sign=1739512861-mcSykGrEkBszCyH73f5H4oWQqrzP9qMc-0-8bf70b5c0f814d41064d9e73cce1773f)
图2-94
![](https://epubservercos.yuewen.com/923280/15825991804142306/epubprivate/OEBPS/Images/Figure-P50_3225.jpg?sign=1739512861-7qOZuxj7uHyTevB4mazQAjwsFfaWBvR9-0-fa1297fb6fd27e7552b080b5bba16ae1)
图2-95
处理完颜色与纹理部分,如图2-96所示,创建Fresnel(菲涅耳)表达式与两个乘法表达式,一个乘法表达式连接Fresnel与Lerp表达式,另一个乘法表达式连接Fresnel与Desaturation表达式。将两个乘法表达式输出的结果分别连接两个Power表达式,在Power表达式的Exp节点连接属性数值为5的一维常量。这里使用两个Power表达式是为了使颜色与纹理的表现更为清晰,剔除颜色过于暗淡的纹理。最后将处理颜色变化部分的Power表达式连接到材质自发光(Emissive Color)节点,处理纹理部分的Power表达式连接到材质透明度(Opacity)节点。
![](https://epubservercos.yuewen.com/923280/15825991804142306/epubprivate/OEBPS/Images/Figure-P51_3235.jpg?sign=1739512861-DF8HvIwIuecHLCRN0GEjyJ3qB4TDcBQX-0-ab5618163d3c7d0b6d1506609a5354a5)
图2-96
读者们可能会说,为什么我的材质节点接口处的Opacity是灰色不能连接的?原因是材质的基础属性设置不对。我们选择材质,或者什么都不选中,属性窗口显示的就是这个材质的基础属性了,把材质的混合方式改为Translucent透明类型,这个模式支持材质的透明通道,此时材质的Opacity节点就启用了。勾上Two Sided(双面显示)复选框,如图2-97所示。
![](https://epubservercos.yuewen.com/923280/15825991804142306/epubprivate/OEBPS/Images/Figure-P51_3239.jpg?sign=1739512861-vz0boavZQ6ZnYuzcC5k1qNNjtgBY2aDv-0-b10946eb63138c39b3217381974880be)
图2-97