UE4 材质学习笔记09(雨水水坑着色器/完整雨水着色器)

一.雨水水坑着色器

要用到这样一个噪声贴图,我们要做的就是,做出水坑并让水坑在这种浑浊的噪点中产生,因此水坑将从最暗的斑点生长,然后随着它继续占据越来越亮的像素而生长

现在水坑将从上到下投射到世界空间中,所以我需要引入WorldPosition(世界位置)节点,使用RG通道,也就是XY分量,因为z分量是向上的,乘上一个较小的数得到一个正确的大小单位。

接着调整UV让我们呢只会在最暗的地方得到水坑,首先创建一个常量表示水坑的大小,接着创建两个二维向量表示水坑最大和最小的时候的大小,黑色的就是水坑

然后用1-x让白色的成为水坑,同时我们不想让侧面和不平坦的地方出现水坑,通过顶点法线的z值与之前的颜色蒙版相乘,现在只有上面有水坑了

然后还要把结果乘1.1,这样做是为了确保水坑自始至终是从黑色变成白色

接下来要做的是加入法线,这里创建了一个新的材质函数

主要思路就是用了两组不同的UV采样同一个法线贴图之后进行混合。

首先获取绝对世界位置的RG通道然后用AppendMany节点附加在一起,这样就可以获取两组UV坐标,然后乘一个值缩放世界位置,这样波纹就会是我想要的大小,然后引入时间变量控制速度和方向

然后将采样两张法线贴图的结果的RG通道相加,B通道相乘,加入一个风的强度的影响用来控制法线的高度。

然后将Ripples和Winds的法线合并一下,将两个法线相加以后取R,G通道,然后Append一个1创建法线,也可以分别取B通道相乘当作z分量,这里只是减少计算量

然后可以根据一开始计算的水坑作为mask进行插值,但是在这之前要修改一下水坑的大小,因为目前水坑太小了。将世界位置再乘个0.3就可以放大水坑。

现在我们成功创建了一个生成水坑的着色器,而且可以通过常量控制水坑的大小,或者通过值控制雨水涟漪和风的强度,现在要做的就是将所有这些整合到一个材质函数中,只需要移植过来即可,并且把水坑的mask也作为一个输出

然后应用这个函数到其它材质上看看效果,效果还不错

二.完整雨水着色器

现在要把之前做的东西都合并起来。

首先是Wetness函数,直接赋予输入参数然后连接到根节点就可以了。,然后是Drops和Drips,需要将它们的法线根据Drips的mask进行插值,然后需要把它和从外面,(即表面)进来的法线结合起来,这将混合外部材质的基础法线和水滴与雨水流淌的法线。然后我们要在组合的法线与外部法线之间混合起来,所以还需要一个插值,不下雨的地方使用表面法线,下雨的地方使用混合法线。

然后将法线赋予puddles函数,并且赋予puddles函数的其它输入。

对于porousness这个输入参数,代表了材质的吸水性,理想的情况下是通过一张纹理表示材质的某个部分是否吸水,在这里我们通过粗糙度和金属度获得吸水性。

然后还要制作一个Wetmask,取puddles和Drops和Drips的mask的最大值,但是此时潮湿度只来自我的Puddles(水坑)、Dropss(雨滴)和Drips(雨水流淌),我门真正想做到的是让物体作为一个可以变潮湿的整体,所以可以根据下雨的时间赋予整个物体一个潮湿度

OK然后我们将这些转换成一个材质函数,但是这是我们创建的最耗能的一个版本,因为有的材质函数在一些材质上完全用不到。比如一个地板材质完全用不到Drips函数。所以我们可以创建这个函数的不同版本,

然后应用到一个其它的材质看看效果

我们还可以通过蓝图控制材质的参数,比如让Rain的值从0到1逐渐变大,随着雨的增加逐渐增大水坑和风的大小等等 ,下面有一些用蓝图控制材质的教程

UE4 Tutorial 101 --- Control Materials ... https://www.youtube.com/watch?v=I8s-Bt-YOUg&t=0s UE4 Tutorial: Changing Material Color... https://www.youtube.com/watch?v=PipNG7P7jYc&t=0s UE4 - Tutorial - Dynamic Materials in... https://www.youtube.com/watch?v=6OTaEHfRyH8&t=0s

相关推荐
不太可爱的叶某人1 小时前
【学习笔记】MySQL技术内幕InnoDB存储引擎——第5章 索引与算法
笔记·学习·mysql
岁岁岁平安1 小时前
Redis基础学习(五大值数据类型的常用操作命令)
数据库·redis·学习·redis list·redis hash·redis set·redis string
知识分享小能手3 小时前
Vue3 学习教程,从入门到精通,使用 VSCode 开发 Vue3 的详细指南(3)
前端·javascript·vue.js·学习·前端框架·vue·vue3
pay4fun3 小时前
2048-控制台版本
c++·学习
知识分享小能手5 小时前
Bootstrap 5学习教程,从入门到精通,Bootstrap 5 表单验证语法知识点及案例代码(34)
前端·javascript·学习·typescript·bootstrap·html·css3
weixin_418813875 小时前
Python-可视化学习笔记
笔记·python·学习
Haoea!5 小时前
Flink-05学习 接上节,将FlinkJedisPoolConfig 从Kafka写入Redis
学习·flink·kafka
二DUAN帝6 小时前
UE实现路径回放、自动驾驶功能简记
人工智能·websocket·机器学习·ue5·自动驾驶·ue4·cesiumforue
丁满与彭彭7 小时前
嵌入式学习笔记-MCU阶段-DAY01
笔记·单片机·学习
呼啦啦--隔壁老王7 小时前
dexopt学习待整理
学习