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

news/2024/10/16 20:30:00 标签: ue4, 材质, 学习

一.雨水水坑着色器

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

现在水坑将从上到下投射到世界空间中,所以我需要引入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.niftyadmin.cn/n/5708492.html

相关文章

怎样用python获取浏览器背景颜色参数?

要获取Edge浏览器(或任何其他浏览器)的背景颜色参数,你需要理解这通常不是一个直接由Python标准库支持的功能,因为浏览器的界面和内容是由浏览器自身控制的,而Python通常运行在服务器端或作为脚本语言来执行任务&#…

STM32 从0开始系统学习 1

笔者最近打算使用STM32系统的做一点东西。大二的时候就开始慢慢接触了STM32,拿他来做过一些事情,但是始终是葫芦吞枣,有点不扎实。笔者这里打算重新开始好好整理一下STM32的内容。 在这一笔记中很简单,就是解答一下啥是STM32&…

2023年五一杯数学建模C题双碳目标下低碳建筑研究求解全过程论文及程序

2023年五一杯数学建模 C题 双碳目标下低碳建筑研究 原题再现: “双碳”即碳达峰与碳中和的简称,我国力争2030年前实现碳达峰,2060年前实现碳中和。“双碳”战略倡导绿色、环保、低碳的生活方式。我国加快降低碳排放步伐,大力推进…

关于通信协议中PDCP的相关知识

PDCP (Packet Data Convergence Protocol) 概述 PDCP(Packet Data Convergence Protocol,分组数据汇聚协议)是LTE(Long Term Evolution,长期演进)和5G NR(New Radio,新空口&#xf…

MongoDB中排序、索引和聚合的详细说明

以下是关于MongoDB中排序、索引和聚合的详细说明: 排序(Sort) 基本语法 使用db.collection.find().sort({field: direction})方法对查询结果进行排序。其中field是要排序的字段,direction可以是1(表示升序&#xff0…

LabVIEW提高开发效率技巧----事件触发模式

事件触发模式在LabVIEW开发中是一种常见且有效的编程方法,适用于需要动态响应外部或内部信号的场景。通过事件结构(Event Structure)和用户自定义事件(User Events),开发者可以设计出高效的事件驱动程序&am…

怎么测试租用的美国服务器是不是超负荷?

美国服务器负荷是指主机在单位时间内处理的请求数量或任务量,当负荷超过其承受能力时,就可能会导致系统响应变慢、性能下降甚至崩溃,因此对美国服务器进行负荷测试是确保其稳定性和性能的重要手段。 一、常见的服务器负荷指标 1、CPU使用率&a…

数据源对接,这个工具能满足你

在数字化时代,数据已成为企业决策和业务优化的关键。而数据源对接则是获取高质量、全面数据的重要途径。数据源对接能够将各种来源的数据进行标准化处理,统一接入并进行整合分析,为企业提供更加准确、可靠的数据支持。其重要性不言而喻。 一…