Amplify Shader Editor 案例解析系列——(5)HighlightAnimated

前言

该篇分析第五个案例,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):Out = \frac{Max - Min}{2}In + \frac{Max + Min}{2},关于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是与光照效果有关的,这一块没有了解,就不讲了,对实际效果影响不大。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值