Material101-Lec13-18 Rian Shader
文章目录
Wet Function
思路
- 一般下完雨后,物体表面颜色的纯度会饱和一点,所以用Desaturation乘以一个负数来让饱和度上升,
- 但是如果物体比较吸水,那他就会变暗,所以再将颜色范围限制为[0-1]后,再乘以0.5让颜色变暗
- 所以就用Lerp混合原本的颜色、粗糙度、反射,变纯后的颜色、粗糙度、反射
- 用wet控制Mask,再加上一个Porousness,控制物体表面是否是吸水的,吸水的会变暗
节点
补充
Desaturation
- 去色,会生成一个单调柔和的灰度图
- 当乘以负数时,就会让颜色变饱和
Saturation
- 将值限定在0与1之间。小于0的值被提升到0;大于1的值降低为1;0到1之间(包括0和1在内)的值保持不变。在大多数现代图形硬件上,Saturate的指令成本几乎是免费的,所以您可以在任何时候使用该节点来将输入或输出值限制在0到1之间,而不影响您的材质的性能。
RainDrop
思路
- 雨滴贴图里面R和G通道存的是法线贴图的x,y坐标。B和A通道存的是雨滴的蒙版
-
用b通道存的mask贴图减去时间,再Frac,可以出现雨滴慢慢消失的效果,同时B通道存的贴图的灰度值不同,就可以出现雨滴出现的先后顺序不同
-
因为存的mask比较粗糙,所以还需要再进行一次去边缘,在A通道乘2减1后,贴图刚好就是大的雨滴比较清晰的mask,所以将上一步运算的结果乘以这个mask就可以将边缘去除
-
A通道存的是小雨滴贴图的mask,和比较清晰的大雨滴的mask,因为贴图存的数据都是
[0~1]
,如果直接反转小雨滴的mask是不会变白的,所以乘2减1将mask的范围变为[-1~1]
,再反转。因为有灰度值,所以再power,1还是1,0还是0,小数会无限接近0
- 将第二步和第三步相加,就可以得到大的雨滴在慢慢消失又突然出现,小的雨滴一直存在的mask
- 因为雨滴是不会落到物体背面的,所以就需要用物体的法线的B通道来进行控制,贴图存的是切线空间的贴图,需要用Transform节点转换空间,变为世界空间,再用saturate节点将小于0的变为0,就可以得到一个物体背面是黑的mask,再乘以第四步,得到物体向上的面不断生成雨滴的效果
- 将贴图的R和G通道用append组成法线贴图的x和y坐标的贴图,乘以第五步得到的mask,再append一个常量1,组成法线贴图
- 将第5步用power开根号0.1次方,让物体原本是接近0的变大,再1-x进行反转,让有雨滴的地方变暗,粗糙度就会降低
节点
RainDrip
思路
流淌的雨滴只能是竖直流淌下来,所以不论物体怎么变化,贴图永远应该是从x方向或者y方向投射到物体上的 ,所以就需要绝对世界位置来控制投射的方向。乘以一个Vector3 缩小向量来控制Tiling,
节点
Ripple Function
节点
思路
- 利用时间的增长,时间添加了Frac,然后再-1,加上Mask就可以让Mask产生生长动画,然后用clamp控制范围,再用sin函数产生三条涟漪
- 雨不可能是同时落下的,所以就将时间加了alpha通道,让涟漪开始的先后顺序不同,越白,越先开始
- 涟漪应该慢慢的消失,所以就