前言
该篇分析第五个案例,HighlightAnimated。
正文
按照Comment的顺序分析,首先观察效果,为方便对比,关闭了中间球的效果:
发现有以下效果:
1.对象表面有高亮,即外发光,但是同一个表面上,高亮程度不同
2.对象表面的高亮,有闪烁效果,该效果需要材质参数,默认参数效果不明显
分析Comment:
1.Textures Comment
注册各个贴图,以及贴图与颜色的混合,不做赘述
2.Highlight Level (Ping pong animation) Comment
案例4中使用到了Time Parameters节点,这里Time节点的意思是输出Time Parameters的Y通道值,即当前时间,Time节点也可以通过修改Scale对值进行缩放,这里Scale值为0.05,且Time 的输出又与属性Highlight Speed进行Multiply操作,结合上面说的,此过程我们也可以修改,如下图,左右两个组合的输出意义是一样的(当然不考虑数值):
对Multiply进行Sin操作,Sin节点意义为取输入值的正弦结果,即Sin(In),对时间的Sin操作,由于时间是递增的,所以可以实现正弦波效果,且值限制在[-1,1]中,会经常用到,接着Remap(参数依次为-1,1)到区间[MinHighLightLevel,MaxHighLightLevel],这两个值的意义为高亮强度的最小值与最大值,根据Remap公式推出(前面两个分别缩写为Min,Max):,关于In的线性方程,即Remap的结果,还是随Time变化的正弦波,结果注册为变量Highlight_Level。
记录该Comment输出的变量:
a. Highlight_Level:意义为随时间变化的正弦波,且由属性MinHighLightLevel,MaxHighLightLevel分别控制该波的上限与下限值,两个值差越大,那么该波越陡峭,反之越平坦,修改这两个值,使差值变大,则可使效果2中的闪烁效果,方便观察
3.Highlight (Rim) Comment
将切线空间下的视角方向View Dir归一化之后与法线贴图Normal进行Dot操作求点积,夹角越小,值越大,这里与法线贴图Normal求点积,而不是World Normal,是因为物体表面是平滑,凸凹效果是使用发现贴图实现的,从而实现表面高亮的与法线凸凹效果匹配。世界空间,法线空间,是两个不同的坐标系,而关于两种空间的意义,使用场景,空间转换这些等等知识,比较复杂,这里不再讲解(实际上是怕误人子弟),感兴趣的可以去参考shader入门精要或者其他书籍理解。
继续分析Dot后的操作,saturate,相当于Clamp(0,1),然后One Minus,到此为止,夹角越小,输出值越小,接着Power节点,意义为求幂,输出为Base 的Exp次幂,Exp输入为变量Highlight_Level进行Remap(参数依次为0,1,10,0)的结果,Out = -10 * In + 10 = 10 *( 1 -In)。我们知道Highlight_Level为随时间变化的正弦波,Remap操作即对正弦波先取反,再放大10倍(其实只是对波形进行变换,其他变换方式也可以,不是固定的),结果与变量Highlight_Color 相乘,混合高亮颜色,注册到变量Highlight_Rim。
记录该Comment输出的变量:
a. Highlight_Rim,意义为,对象表面法线与视角夹角不同处,输出不同的值,且该值随时间进行正弦波形状的变化,值对变量Highlight_Color缩放输出
4.Highlight Color Comment
注册属性 Highlight Color到变量Highlight_Color。
5.Emission Mix & Highlight Switching Comment
变量Emission(一张贴图)与变量Highlight_Rim混合后输出到Highlighted 的In 1,变量Emision输出到Highlighted 的In 0。节点Highlighted初始名称叫作Toggle Switch,意义为,当该节点值为0时,将节点的In 0 输出,当节点值为1时,将节点的In 1 输出,没有第三种情况,节点的值可以通过节点上的下拉框(In 0, In1)修改,在inspector视图中,该节点显示为单选框,选中时,值为1,反之为0,代码修改节点值时,修改值类型为float,而不是bool,即SetFloat(name, 0.0f 或 1.0f),这里意义是,当节点Highlighted 值为0时,输出贴图Emission,反之输出贴图Emission与高亮混合结果,结果注册为变量Final_Emision。(外发光Emission ,不是Emision,这里官方拼错了)
记录该Comment输出的变量:
a. Final_Emision,意义为根据开关选择不同的外发光效果
6.最终结果输入
略...其中Ambient Occlusion是与光照效果有关的,这一块没有了解,就不讲了,对实际效果影响不大。