2.6 折射纹理制作
在一些大型3D游戏中经常会看到场景中漂亮的水面,水面材质有比较高端的表现,可以对周围环境进行光影折射,透过这种折射材质能看到背面物体形状发生扭曲。如图2-98所示,现在有越来越多的技能特效也利用这种扭曲可视环境的特性,表现技能巨大威力使周围空间发生扭曲。
图2-98
在这一节,将接触并解析折射材质,将它应用到案例制作中。如图2-99所示是一个最基础的折射连接方式,它可以应用在所有的实体模型中。
图2-99
这种形态是最为常用的一种表达式连接方式,利用这种最简单的连接方式可以轻松制作出示例中的效果。如图2-100所示,我们发现材质面板上很多输入节点都变成了灰色,这些输入节点被停用了,只启用了几个输入节点,原因是在材质的属性中,把混合模式(Blend Mode)修改成了Translucent(透明)类型,光影模式(Shading Model)修改为Unlit(无光)类型,最后勾选Two Sided(材质双面显示)。
图2-100
如图2-101所示是基础折射材质的制作,使用了一张带有红黄二色纹理的Texture Sample表达式,将表达式的Alpha节点连接到Lerp表达式的Alpha节点。
图2-101
为什么在这个案例中要将Texture Sample贴图纹理的Alpha通道提出来连接,而不像之前案例中使用RGB混合通道呢?制作用于折射效果的纹理,只需要黑白二色与单通道就可以了。
案例中使用的贴图纹理是带有Alpha通道的TGA贴图,所以可以将Alpha通道提取出来进行连接,如果是一张不带Alpha通道的JPG或者BMP纹理,应该如何去处理它呢?
如图2-102所示,如果纹理贴图没有Alpha通道,可以使用纹理表达式的任意通道连接一个去色(Desaturation)表达式把纹理变成黑白,再连接到Lerp表达式。
图2-102
案例中的Lerp表达式属性如图2-103所示,Const Alpha属性有连接其他表达式,所以已经变为灰色不可编辑状态,Const A与Const B数值分别修改为1和1.5,A与B两个数值之间的间隔越大,折射率就越高。读者可以自己试试数值设置为1和3,1和5,1和10等,观察数值间隔大小不同会出现什么样的效果。
图2-103
如图2-104所示,在材质Opacity输入处添加了一个一维常量(Constant,快捷键1),材质自发光(Emissive Color)节点放空缺省。在折射材质中,可以不对材质的基础颜色进行定义,但是不能不给材质的透明通道连接输入数据,即使只是图例中0.01的输入参数,也可以让材质正常显示。毕竟折射扭曲后是要看到物体背后的效果,物体不透明是看不到背后扭曲效果的。如果材质的Opacity节点不连接输入数据,材质就会变得漆黑一片什么都看不到了。
图2-104
再来做一个进阶示例,了解了折射效果基础的表达式应用,在上一节的基础之上做一些细节完善。
如图2-105所示,这个示例中给球体添加了一个蓝色高亮边缘发光,球体内部空间有变化的扭曲纹理。我们来解析这个新示例中的材质结构,如图2-106所示。
图2-105
图2-106
首先来解析材质的自发光(Emissive Color)部分,如图2-107所示,用到的表达式有四个:三维矢量、菲涅耳、线性插值与幂。这里的三维矢量是用来调整颜色与亮度,R、G、B通道分别赋值1、5、30,意义是1倍的红色,5倍的绿色与30倍的蓝色。三维矢量连接到Lerp表达式B输入节点,使Lerp的A输入节点数值默认为0,Fresnel表达式连接Lerp的Alpha节点。把Lerp表达式的结果连接到Power表达式,提升边缘蓝色的亮度。最后连接Power表达式到材质自发光通道。
图2-107
接下来处理透明通道(Opacity)。如图2-108所示,新建一个Lerp表达式,B节点连接一个数值为0.1的一维常量,A节点保持数值0,使Lerp的输出数值在0~0.1融合,把Fresnel连接到新Lerp表达式的Alpha节点,把Lerp表达式的结果连接到材质Opacity透明通道。
最后在材质编辑窗口加入折射效果。上个示例中解析了简单的纹理折射材质制作,这里需要让这部分纹理动起来。如图2-109所示,给Texture Sample纹理表达式连接TexCoord与Panner两个表达式,TexCoord属性中将纹理划分为3×3的图案,也就是U坐标系和V坐标系参数中数值分别设置为3,在Panner坐标平移表达式的属性中,仍然是将Y轴以0.5的速度进行滚动,把Panner连接到Texture Sample表达式UVs节点。纹理表达式的Alpha通道连接到Lerp表达式Alpha节点,最后连接Lerp到材质Refraction折射通道。
图2-108
图2-109
思考题:综合运用前几章节所学知识点来解释图2-109各材质表达式之间的联系、功能与最后的输出效果。