
2.4 高亮材质制作
从这一节开始,学习制作一些常用的材质。配合前面的常用函数来表现材质上的特殊效果。
何谓高亮材质呢?虚幻引擎中,允许材质自身高亮发光。这种材质自身发光只是单纯的高亮效果,并不能将其作为光源用来照亮其他物体,如图2-70所示。
我们将为两个球体制作两个材质。如图2-71所示,材质是使用数值为1的一维常量连接材质自发光通道;如图2-72所示,材质是使用数值为5的一维常量连接自发光,意思是五倍的自发光效果。分别制作成两个不同的材质球,然后把这两个材质球分别赋予两个不同的球体。每次调整材质参数以后,记得单击工具栏处的来应用设置,否则是无法实时看到材质的改动更新效果的。单击Apply按钮后引擎开始解算材质,窗口右下角会出现Shader进度条窗口,其间不要再次对材质进行改动,进度条数值变为0的时候,材质就应用完成了。

图2-70

图2-71

图2-72
如图2-73所示,是对材质进行调色的方法,用到了一个三维矢量(Constant 3Vector,快捷键3),一个一维常量(Constant,快捷键1),一个乘法表达式(Multiply,快捷键M)。我们把三维矢量属性窗口R、G、B通道数值分别设置为1、0.25、0.1,单击三维矢量表达式右上角的小箭头观察预览图,现在这个表达式的颜色为橙色,这是R、G、B通道三个数值混合的结果。然后把属性值为5的一维常量表达式加入材质编辑窗口,把三维矢量与一维常量连接到乘法表达式的A与B节点,乘法表达式的结果连接到材质自发光节点中。一维常量赋值5,表示5倍的基础亮度,用来控制三维矢量颜色的亮度倍数。如果把常量数值设置为10的话,材质会输出10倍亮度的橙色。常量表达式用来控制亮度,三维矢量用来控制颜色,读者可以尝试自己搭配一下。

图2-73
如图2-74所示,有圆柱体、圆锥体和球体,三个物体形态不一样却有相同的边缘发光属性。在这里会接触到一个新的表达式Fresnel,俗称菲涅耳,它的作用是使物体边缘发光,无论这个物体外观如何,通常使用它来制作半透明的幽灵材质。下面再来看一个案例。
如图2-75所示,观察材质案例,我们来对各个部分的表达式进行解析。

图2-74

图2-75
添加一个Fresnel表达式,与赋值为1的常量进行乘法运算,如图2-76所示。菲涅耳表达式为一倍(自身)发光,此处的常量作用是调整菲涅耳发光的强度倍数。可以尝试自行调整这个常量数值以达到想要的效果。

图2-76
在Lerp(Linear Interpolate)的B节点添加一个三维矢量,如图2-77所示,在三维矢量表达式属性窗口中把R、G、B数值分别设置5、2、1,使表达式为高亮橙色。此时Lerp表达式B节点和Alpha节点有数据输入,所以在Lerp属性窗口中,Const B和Const Alpha栏为不可输入状态,只有Const A栏能够输入数值,如图2-78所示。Const A默认数值为0,说明Const A默认输出颜色是黑色,刚好我们需要黑色来填充Fresnel表达式的内部颜色,所以保留Const A的默认数值不做修改。

图2-77

图2-78
在Lerp表达式的后面,我们加入一个Power表达式用来调节整体对比度。在Power的Exp节点连接一个数值为3的一维常量,意思是使经过Power输出的亮度提升三倍。
鼠标单击材质窗口工具栏Apply(应用)按钮,回到Unreal Engine 4主面板,选择界面左侧Modes窗口中的Basic类型,选择一个物体,选中以后,按住鼠标左键,拖动到编辑窗口中放开鼠标,就能在场景中添加一个模型了,如图2-79所示。
把刚才制作完成的材质球在资源浏览窗口中找到后,鼠标左键按住材质球拖到编辑窗口中创建的物体上放开鼠标,就能看到材质应用的效果了,如图2-80所示。

图2-79

图2-80
以上一个案例的材质节点为基础,制作一个物体边缘带有纹理变化的动态效果。保留之前实例的部分,添加了一些新的表达式:
TexCoord(全称Texture Coordinate,纹理坐标,快捷键U),Panner(坐标平移,快捷键P),Texture Sample(贴图纹理,快捷键T),Desaturation(去色),Constant 3Vector(三维矢量,快捷键3),Multiply(乘法计算,快捷键M)。
如图2-81所示,将TexCoord连入Panner,然后把Panner连接Texture Sample纹理节点。这里要对Texture Sample纹理表达式做Panner坐标平移动画。如图2-82所示,单击鼠标左键选中Panner表达式,左侧属性窗口中调整Speed Y的数值为0.5,使Panner表达式对连接的纹理表达式做Y轴坐标滚动。
TexCoord连接到Panner表达式的Coordinate节点,选中TexCoord表达式,如图2-83所示,左侧属性窗口中把UV坐标切分数量分别设置为3,使纹理横向坐标与竖向坐标重复显示三次。此时的纹理表达式中图案已经变为一个3×3的图案样式。案例中使用的纹理是无缝贴图。这种方式可以很方便地制作流水、熔岩等一系列不间断动画。

图2-81

图2-82

图2-83
接着将调整好的纹理表达式的RGB通道连接Desaturation(去色)表达式,此时的纹理已经变成了黑白二色,如图2-84所示。

图2-84
将贴图做去色处理后,能更方便地在材质中使用三维矢量为纹理重新上色,而且不会出现偏色。Desaturation表达式的结果连接到乘法Multiply表达式A节点,添加一个三维矢量,R、G、B通道数值分别设置为1、1、5,连接到乘法表达式的B节点。纹理部分的预览效果是淡蓝色。因为三维矢量R、G、B通道中B(Blue,蓝色)数值是5,是三个通道数值之中最大的,此时的三维矢量以蓝色为主要颜色,R和G通道数值为1,这两个数值会让整体颜色偏白,所以表现为淡蓝色。与去色处理的纹理表达式进行乘法运算,输出结果既有纹理样式,又保留了颜色。
最后,把添加的纹理部分与边缘发光部分进行关联。因为最终的材质输入点只能有唯一一个连接,所以需要将它们用一个表达式进行关联,输出最后的结果。案例中,如图2-85所示,使用了乘法表达式对它们进行连接。想想乘法表达式的作用是什么呢?输出两个数据的交集。这里既需要保留物体边缘发光,又需要在发光的部分有着纹理滚动,Multiply乘法表达式是最适合的。

图2-85
尝试将连接到材质的最后一个Multiply乘法节点更换为Add加法、Subtract减法以及Divide除法表达式,分别尝试看看最后的输出效果有什么不同。