UE4 材质学习笔记07(叶子摇晃着色器/雨水潮湿着色器/材质函数/雨滴着色器)

一.叶子摇晃着色器

现实世界中叶子的晃动十分复杂,这次我们将实现每个叶子都动起来,来接近现实世界的效果

先让它整体动起来,可以用time节点,然后用sin节点限制移动的范围

接下来就是找到一个方法,把这条树枝上的单个叶子分离开来,这样我就可以让单个叶子以不同的幅度摆动 ,我要做的是画一个看起来像这样的蒙版遮罩,你不需要为这个蒙版准备一个高分辨率的纹理,只要你能把单个叶子指定为属于红色组、绿色组或蓝色组就行

然后将三个时间值乘以我们的蒙版,根据我们对叶子的分组,会得到三个不同的值,然后加到UV上,每个叶子会根据所属的组来摆动。

最后要做的时用动画控制叶子的法线 ,这样看起来就不只是来回移动了,它们实际上是在轻微摇摆了,它让叶子感觉像是三维的

事实上,着色器应用到树木上以后效果还不错

二.雨水潮湿着色器/材质函数

怎么让表面看起来是潮湿的呢,吸收水分的多孔表面 颜色会变深。表面的基础颜色越深 饱和度越高,所以首先Desaturation增加饱和度。然后再将颜色变暗,所以我们得到一个比开始时颜色更暗、更饱和的表面。

 

当水在材质表面汇聚时,实际上会更平滑,镜面反射更少,接下来模拟这个效果

首先放入一个const2节点,表示潮湿墙面的粗糙度和高光度,水是非常光滑的,粗糙度设置为0.07,大多数表面的高光度为0.5,但是水的反射率比大多数表面要低一些,设置为0.3.然后可以根据潮湿度来进行插值。

现在的效果看起来已经很不错了

现在 创建了一个有湿度控制的材质,假设我要把所有这些节点都添加到每一个材质上,将是个巨大的工作量,所以就要用到材质函,把所有这些节点放进一个单独的函数里。

输入和输出在材质中的显示顺序可以在细节面板的Sort Priority修改

然后只要把材质函数拖拽到材质中就可以使用了,Porousness是用于定义多孔渗水,0代表表面完全不透水,1代表完全透水,表面更暗,更饱和

三.雨滴着色器

首先是雨滴纹理,RG通道将用作法线,B通道是时间偏移,这个遮罩蒙版会让每一滴水滴在稍不同的时间出现,Alpha通道也是蒙版,小黑点代表我想要的静态水滴,白色代表动态水滴

那么首先获取到法线。

接下来我要做的就是提取蒙版,首先从蒙版中获取动态和静态水滴,然后将它们相加并且与法线相乘。

现在这个材质上面都是雨滴,事实上雨滴只会出现在顶部。只需要获取顶点法线的z值,另外可以增加一个常量控制是否下雨。如果想增强水滴的大小,可以将获取法线的*2-1换成*4-2。最后可以修改一下粗糙度,让这些看起来更像水滴。可以在最后的蒙版的结果加上一个power,然后设置成0.1次幂,最后加上OneMinus节点。

最终效果:

上一篇:Kafka SASL/PLAIN认证模式


下一篇:three.js 实现一个心形的着色器