Amplify Shader Editor 案例解析系列——(3)EnvironmentGradient

前言

该篇分析第三个案例,EnvironmentGradient。

正文

首先观察效果

发现效果有以下几点(不考虑法线贴图,无影响) :

1.相同的海拔,地面平缓度不同,颜色不同,越陡峭的地方,颜色越冷;

2.不同的海拔,地面平缓度相同,颜色不同,海拔越高,颜色越冷;

3.修改shader后可预览,无法言传...只是一个纹理合并的效果,使效果更加真实;

然后对效果进行一一解析:

 1.区分平缓度,使用的是世界空间下的物体的法线,然后对其进行处理,输入到lerp 的alpha,对颜色进行差值输出,首先看一下对法线的处理逻辑:

看节点预览的话,会感觉很懵,这些到底表达了什么意思。这些节点,涉及到法线,位置的,建议不要过渡依赖于节点预览结果,而是结合实际模型去分析要表达的意义,这里我们看流程,首先是对对象法线取绝对值,Abs节点对一维向量的操作是取绝对值,对多维向量的操作是分别对各个分量取绝对值,组合成新的向量,而不是求模,即Abs\left ( \left ( a,b,c \right ) \right ) = \left ( \left | a \right | ,\left | b \right |\right ,\left | c \right |)。然后进行Multiply操作,Multipfy节点对一维向量操作是相乘,对多维向量结果是,各个分量相乘,而不是求向量间的外积(向量间的运算,内积,外积都有单独的节点),即Multipfy((a,b,c),(x,y,z)) = (a*x,b*y,c*z),然后进行Component Mask操作,意义为,对多维向量,只输出指定的分量,这里只勾选了Y分量,即只输出输入的多维向量的Y值。各个操作的逻辑已经明白了,然后结合结果我们可以对其的意义进行解析,首先是Abs操作,我们假设这里的对象是一个球体,那么它的的法线就是成放射状的,在以某一直径所在的平面两边对称的地方,法线关于该平面是对称的,但是这里没有阳光,所以不考虑法线的正反方向,而只是考虑值,所以进行了Abs操作,其实这里对于Abs的分析是多余的,因为后面的Multipfy实际上是对值求了平方,正负关系无关紧要。Multiply操作过后,值大的越大,小的越小,相当与放大了值间的差距(我称该节点为调优节点,因为该节点并不影响我们实际输出的效果方向,只是对效果进行了优化),然后Compoment Mask输出Y值,总得流程可以总结为,对法线的Y方向分量进行放大操作,然后输出,那么法线的Y方向又是什么呢?觉个例子,一个地面,那么所有位置的法线方向均为(0,1,0),如果平面上有了凸起,那么该位置的法线方向Y分量就要向地面(即xz平面)进行偏移,导致值减小,如果凸起越高,偏移越严重,值越小,极限情况下,凸起的面与地面垂直,那么此时,法线Y分量,直接变成了0,即可得越平缓的位置,Y值越大,输出值越大,趋近于1;越陡峭的位置,Y值越小,输出值越小,趋近于0。然后看输出值的去向,这里我们只看底部的颜色输出,顶部是一样的道理:

 可以看到输出的结果作为了lerp的alpha输入,对两个颜色进行平滑,根据上面分析,越平缓的地方,值越大,趋近于1,lerp之后,即为绿色,反之,越陡峭的地方,趋近于红色,即实现了效果1,平缓度不同,效果不同。

2.区分海拔高度,使用的是对象的位置信息,然后对山顶和山底的颜色进行lerp操作:

首先取了Y坐标,因为高度关联的只有Y坐标,然后Divide除以一个常量GradientHeight,再clamp到0~1,处理很少,意义简单明了,即对Y小于等于0的地方输出0,对Y大于等于GradientHeight的地方输出1,中间的地方输出0~1,可以看出,GradientHeight值越大,那么输出1的区域就越少,同时Y值越大(即越高)越趋近于输出1。然后将结果作为lerp的alpha输入,对山顶与山底颜色进行平滑:

这里A输入的是山底的颜色,B输入的是山顶的颜色,结合上面的输出,我们可得:Y值越大,即越高,取色越越趋近于B,即山顶的颜色,反之取色趋近于山底的颜色。以此实现不同海拔高度,取色不同的效果。

3.当我们将上面coment的输出直接连接到最终的Albedo入口时,我们可以看到已经实现了高处冷,陡峭处冷,低处暖,平缓处暖的效果,但是会发现整个山像是一个个方块组成,所以这里又给输出的颜色实现了一个山脉纹路类型的贴图混合,实现了最终效果,混合过程不做赘述了,都是些调优节点,没有什么知识。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值