Amplify Shader Editor(ASE)效果实现笔记(三)——覆雪shader(不带厚度)

覆雪shader效果展示;

(1)覆雪效果永远朝上;
(2)自定义雪颜色(红色演示显眼一点);
(3)同时可以控制雪的覆盖范围和有无雪时分界线是否清楚;
(4)受 “Ambient” & “LinghtColor0” 影响。
在这里插入图片描述
清楚的边界

实现原理:

(1)方向朝上,则使用 “Normal Dot Y” ,求出(-1,1)的范围,利用 Normal 和 Y轴 夹角大小判断是否积雪。
(2)“Smoothstep” 函数的使用:小于 0 的输出 0;大于 1 的输出 1;分别对应 “Min” & “Max” 参数;第三个参数确定平滑曲率。
(3)“Lerp” 函数的使用:在(0-1)范围内输出 A or B;

实际操作:第一张为本次重点介绍的,第二张图是官方的做法。

在这里插入图片描述
在这里插入图片描述
这里采用的和官方给的效果有点差别,主要区别在于本次介绍的可以很方便的控制落雪范围和边界线模糊程度。比较自由,同时也是比较费资源的一种做法,慎重选择。

后续节点图:

在这里插入图片描述

做法说明:

(1)“WorldNormal” 主要是调用世界空间的法线方向,从代码角度讲,直接是已经使用了矩阵(Object2World)转换过的顶点法线;
(2)“但是”!再自定义转换一下之后从三维向量转化成了四维向量,后续做雪的覆盖效果的时候,需要考虑第四个参数 “W”;
(3)自定义个四维数组(0,1,0,0),使其指向 “Y” 轴的方向,同理类推可以指向 X、Z轴作效果。
(4)世界法线归一化处理后点乘得到(-1,1)的值。
(5)(-1,1)作为 “Smoothstep” 的输入,这里不需要转成(0-1)的原因是这个函数本身就是输出(0-1)的值,所以点乘之后可以省一步转化(0,1)的操作。
(6)“Min” & “Max” 的值区域极其效果需要试验确认最好的范围,需要注意的是 Min<Max。Min&Max 值越接近,边界越清楚。
(7)最后给到 “Lerp” 即可,在(0,1)范围内输出本身的贴图颜色还是输出雪的贴图颜色。

注意要点:

(1)与代码的简洁不同,这里很多操作本人也不是很清楚:(有知道的大佬指点一二,感激不尽)
类似于已经是世界空间的法线了,为什么还要继续转一下?
为什么三维向量的点乘结果没有四维向量的点乘结果准确?
反而在代码编写时就比较简单。
(2)ASE的向量表示方式都是竖版,也就是四行一列,但是在需要的叉乘的时候,会很据矩阵的叉乘顺序自行调整成一行四列矩阵或者四行一列矩阵,提一嘴,以后遇见不需过多纠结。除去一种情况就是需要做转置矩阵或者逆矩阵的时候就不会自动转了(吧)。(至少我是手动转的)
(3)光照效果看自己选择的什么Shader类型,PBR是自带光照效果的,只需要在雪的效果上 “Add” 一个自定义光照即可。
在这里插入图片描述
这里光照做法不一,仅供参考。

最后,有不详实和任何的意见,欢迎留言批评指正。

猜你喜欢

转载自blog.csdn.net/m0_54122551/article/details/122042371