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

server/2024/10/20 13:44:52/

一.雨水水坑着色器

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

现在水坑将从上到下投射到世界空间中,所以我需要引入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 ...  icon-default.png?t=O83Ahttps://www.youtube.com/watch?v=I8s-Bt-YOUg&t=0s  UE4 Tutorial: Changing Material Color...  icon-default.png?t=O83Ahttps://www.youtube.com/watch?v=PipNG7P7jYc&t=0s  UE4 - Tutorial - Dynamic Materials in...  icon-default.png?t=O83Ahttps://www.youtube.com/watch?v=6OTaEHfRyH8&t=0s


http://www.ppmy.cn/server/133352.html

相关文章

macOS下的文件系统权限问题:从“Read-only”错误到解决实践20241019

macOS下的文件系统权限问题:从“Read-only”错误到解决实践 在 macOS 系统开发和运维的过程中,文件系统的权限问题是程序员常遇到的棘手问题之一。尤其是当你尝试在命令行中克隆 Git 仓库时,突然冒出的“Read-only file system”错误往往让人…

【OpenCV】(七)—— 滤波

OpenCV 中的滤波操作用于去除图像噪声,实现图像的平滑处理,改善图像质量或提取有用的信息。使用一张有噪声的图像作为示例 均值滤波 均值滤波是一种简单的线性滤波技术,通过将像素点周围邻域内的所有像素值取平均来达到平滑图像的效果&#…

golang一个轻量级基于内存的kv存储或缓存

golang一个轻量级基于内存的kv存储或缓存 go-cache是一个轻量级的基于内存的key:value 储存组件,类似于memcached,适用于在单机上运行的应用程序。 它的主要优点是,本质上是一个具有过期时间的线程安全map[string]interface{}。interface的结…

分布式搜索引擎03

0.学习目标 1.数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快…

【PyTorch 】【CUDA】深入了解 PyTorch 中的 CUDA 和 cuDNN 版本及 GPU 信息

目录 引言一、环境准备1.1 重要的环境依赖1.2 安装 CUDA 和 cuDNN1.3 示例安装步骤1.4 PyTorch、CUDA 和 cuDNN 版本兼容性表 二、检查 CUDA 和 cuDNN 版本三、检查 GPU 可用性四、测试 PyTorch 是否正常工作五、PyTorch 中的 GPU 工作流程五、常见问题解答5.1 如何更新 CUDA 和…

阿里云linux系统扩容分区

系统扩容需要进行三步操作:①服务器扩容云盘 ② 扩容分区 ③ 扩容文件系统 参考:https://help.aliyun.com/zh/ecs/user-guide/extend-the-partitions-and-file-systems-of-disks-on-a-linux-instance?spma2c4g.11186623.0.0.6a094862DCMnnM#de3365e1d4l…

Chrome谷歌浏览器加载ActiveX控件之JT2Go控件

背景 JT2Go是一款西门子公司出品的三维图形轻量化预览解决工具,包含精确3D测量、基本3D剖面、PMI显示和改进的选项过滤器等强大的功能。JT2Go控件是一个标准的ActiveX控件,曾经主要在IE浏览器使用,由于微软禁用IE浏览器,导致JT2Go…

C++学习笔记----9、发现继承的技巧(三)---- 尊重父类(2)

4、指向父类名字 当在继承类中重载一个成员函数时,只要与其它代码相关就要有效替换掉原有的代码。然而,成员函数的父版本仍然存在,你可能会想使用它。例如,一个重载的成员函数会保持基类实现的行为,加上其它的一些。看…