UE4 材质学习笔记08(雨滴流淌着色器/雨水涟漪着色器)

一.雨滴流淌着色器

法线贴图在红色通道和绿色通道上,那是法线的X轴和Y轴,在蓝色通道中 我有个用于雨滴流淌的蒙版,在Alpha通道中,有个时间偏移蒙版。这些贴图都是可以在PS上制作做来的,雨滴流淌图可以直接用笔刷画出来然后模糊下线,然后可以将这个图作为高度图并使用NVIDIA Photoshop插件将其转换为法线贴图

直接输出以后是这样的效果,但是我不想用UV坐标把它投射到立方体上,实际上我想把它们投射到世界空间中,这样不管物体有多大,也不管物体去哪里或者如何旋转,这些小水流将始终保持向上和向下的方向

所以我们使用绝对世界位置来采样,要把世界位置乘上一个稍小的数字得到正确的比例 ,但是在另一边出现了非常奇怪的拉伸,所以现在只是侧面和上面的效果是正确的,但是前面和后面是不对的,通常这种情况可能会采样两种不同的纹理并将它们混合一起,但是我们可以采用更高效的方式,我们可以分别为正面和侧面生成纹理坐标,然后将它们混合在一起

然后根据顶点法线判断面的朝向,获取顶点法线的R通道,你可以看到它只在X方向上是白色的,G通道只在Y方向是白色的,所以可以用这两个mask当作lerp的参数就可以获得两组UV坐标

然后根据法线的R通道判断当前位置是否是正面,然后根据这个决定使用哪个UV坐标

接下俩需要的是,一个随着时间流逝而流下雨水的动态蒙版,这是一个4x512像素的纹理,这个纹理上面部分是黑色然后有一块白色,然后变成灰色然后渐变成黑色,所以这就是水滴蒙版

我们仍然使用绝对世界位置采样,乘上一个值来进行缩放。

然后根据Alpha通道的时间偏移蒙版来让它动起来,

接着我们想要创造一种差异,比如水在不同的表面的流动速度是不一样的 。所以分别设置两个表面的流动速度,然后根据透水度进行插值,最后乘上B通道雨滴流淌的Mask

但是我们真正想做的是创建法线,只要将法线贴图采样后与之前计算的蒙版相乘即可,但是如果切换成球体就可以发现顶部的水滴看起来很奇怪,所以需要再做一个mask来消除着这种效果,

我们希望效果只出现在水滴会流下的那些侧面,所以增加了一个中间层的mask乘上之前的蒙版

最后我们还可以根据流淌的水滴更改一下粗糙度。

二.雨水涟漪着色器

首先需要一个简单的径向渐变纹理

首先我们要制作一个涟漪效果,可以取时间节点的小数部分然后减一可以得到一个-1到0之间不断循环的数,这样就可以得到一个循环变大的图案,接着乘上一个值提高对比度,然后限制到一个范围内,需要使用sin节点得到正弦波的效果。因为默认周期是1,所以最好更改周期为2PI,,然后还要制作一个逐渐消失的效果,因为时间节点的小数部分不断变大,用1-x就可以得到一个逐渐变小至0的数,最后乘上之前的正弦波

接下来就是将这个mask转换成法线,要改变一下现在的纹理。

这是新贴图的GB通道,是一个锥体的法线,R通道是之前的径向渐变纹理

然后就是获取法线,事实上如果追求精确的话法线的z值是可以推导出来的,这里使用1作为z值只是一个性能优化,但是这在数学上是不正确的,但会让程序运行的更快一些,现在已经出现了一个锥形的法线,接下来在蒙版的基础上制作动态的法线

效果很不错,接下来就是要创建一大堆涟漪

只要创建一个纹理,上面有很多个之前那样的贴图,并且在alpha通道设置了一个时间偏移贴图用来控制涟漪在不同的时间产生

然后只需要用时间节点加上贴图的Alpha通道,这里将粗糙度设置成0方便观看

其实还可以加上一个参数控制涟漪的强度,但是现实中很多涟漪是相互重叠的,所以接下来要完成重叠的部分。我们需要用这个着色器中的所有这些节点,进行多次操作然后相加,所以有必要把所有这些节点全部变成一个函数节点。这里淡化节点的方法修改了一下,增加了一个权重控制。

然后新创建一个材质函数多次调用这个材质函数,使用不同的时间值:不同的UV值和不同的权重值,让每个副本都有不同的尺寸,以不同的速度循环,并放置在空间里的不同位置。

先是设置不同的时间,乘1.6是总速度

接着设置不同的UV坐标,分别加和乘不同的值,这样我就能得到不同大小和尺寸的涟漪

最后是设置权重,我把权重减去0.25,0.5,0.75,然后乘上4,这样我就有了四组不同的涟漪,根据雨的强度而调节,如果强度值为1,就可以得到全部涟漪

最后把这些值传递给我的4个涟漪函数,然后混合这四个法线,这里还需要创建一个材质函数,先把四个法线的xy分量乘上四个权重分量,然后相加,四个法线的z分量合并成一个向量,基于权重值将1和法线合并向量插值,然后将四个分量相乘,最后与xy合并并且归一化。

好,合并法线以后连接到输出节点

最后创建一个新的材质测试一下这个材质函数,效果非常棒

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/447417.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何下载3GPP协议?

一、进入3GPP网页 https://www.3gpp.org/ 二、点击“Specifications &Technologies” 三、点击“FTP Server” 网址: https://www.3gpp.org/specifications-technologies 四、找到“latest”,查看最新版 网址: https://www.3gpp.org/ftp…

DeepFM模型预测高潜购买用户

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝,拥有2篇国家级人工智能发明专利。 社区特色&…

十一、Linux 之Linux 磁盘分区、挂载

1、linux分区 1.1 原理介 Linux 来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux中每个分区都是用来组成整个文件系统的一部分。Linux 采用了一种叫“载入”的处理方法,它的整…

Ubuntu22.04环境下源码安装OpenCV 4.8.1

因为项目需要用OpenCV对yolov8模型进行推理,通过DNN模块,之前本地的OpenCV版本是4.5.4(好像安装完ROS2 humble之后系统就自带了opencv),加载onnx模型一直报错,网上查询到需要4.7以上,干脆直接升…

sql 语句相关的函数

1. 聚合函数 这些函数用于对一组值进行计算,并返回单个值。 1.COUNT(): 计算行数。count SELECT COUNT(*) FROM students;2.SUM(): 求和。sum SELECT SUM(salary) FROM employees;3.AVG(): 计算平均值。avg SELECT AVG(score) FROM test_scores;4.MAX(): 找到最…

思维,CF 1980E - Permutation of Rows and Columns

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1980E - Permutation of Rows and Columns 二、解题报告 1、思路分析 我…

Golang | Leetcode Golang题解之第476题数字的补数

题目&#xff1a; 题解&#xff1a; func findComplement(num int) int {highBit : 0for i : 1; i < 30; i {if num < 1<<i {break}highBit i}mask : 1<<(highBit1) - 1return num ^ mask }

邻接矩阵的无向图(C语言代码)

无向图是对称的 所以 &#xff1a; G->matrix[i][j] 1; G->matrix[j][i] 1; AB线段为1的同时 BA的线段也为1 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #define MAXVEX 100//最大顶点数 typedef struc…

一键解锁新技能!2024年电脑录屏神器推荐

咱们现在这个时代&#xff0c;电脑录屏软件就跟手机一样&#xff0c;几乎人人都有。不管是教别人怎么做事&#xff0c;记录开会内容&#xff0c;还是把玩游戏时候的高光时刻分享给朋友&#xff0c;有个好用的录屏软件真的能让事情变得简单很多。今天我就来给你介绍四款2024年超…

解决低版本pytorch和onnx组合时torch.atan2()不被onnx支持的问题

解决这个问题&#xff0c;最简单的当然是升级pytorch和onnx到比较高的版本&#xff0c;例如有人验证过的组合: pytorch2.1.1cu118, onnxruntime1.16.3 但是因为你的模型或cuda环境等约束&#xff0c;不能安装这么高的版本的pytorch和onnx组合时(例如我的环境是pytorch1.12&…

数据结构5——队列

1. 队列的概念及结构 队列的概念&#xff1a; 与栈相比&#xff0c;队列也是一种特殊的线性表&#xff0c;不同的是&#xff0c;队列只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作。队列遵守先进先出 FIFO(First In First Out)的原则。 入队列&#xff1…

Qualitor checkAcesso.php 任意文件上传漏洞复现(CVE-2024-44849)

0x01 漏洞概述 Qualitor 8.24及之前版本存在任意文件上传漏洞,未经身份验证远程攻击者可利用该漏洞代码执行,写入WebShell,进一步控制服务器权限。 0x02 复现环境 FOFA:app="Qualitor-Web" 0x03 漏洞复现 PoC POST /html/ad/adfilestorage/request/checkAcess…

暖水毯/取暖毯语音识别控制芯片IC方案

暖水毯、取暖毯作为现代家居生活的温暖伴侣&#xff0c;其智能化升级已是大势所趋。在暖水毯与取暖毯中融入语音识别控制芯片IC方案&#xff0c;为用户的冬日取暖体验带来了革命性的变革。 一、暖水毯/取暖毯增加语音识别控制芯片方案&#xff0c;让产品能通过对话来调节&…

RSA简单实例

RSA简单实例 RSA是一种非对称加密算法&#xff0c;其安全性基于质因数分解的困难性。下面以p3和q5为例&#xff0c;详细解释RSA算法的产生过程以及加密解密过程&#xff1a; 一、RSA算法的产生过程 选择质数&#xff1a; 随机选择两个不相等的质数p和q。在这个例子中&#…

分享5款堪称神器的软件

​ 今天再来推荐5个超级好用的效率软件&#xff0c;每个都堪称神器中的神器&#xff0c;用完后觉得不好用你找我。 1. 启动器——Launchy ​ Launchy是一款开源的启动器软件&#xff0c;帮助用户快速启动应用程序、文件夹和文件。用户只需通过快捷键调出Launchy界面&#xff…

基于WEB的《数据结构》课程学习平台设计与实现---附源码54433

摘 要 本文介绍了一种基于Web的《数据结构》课程学习平台的设计与实现&#xff0c;该平台采用Node.js作为主要后端技术。该平台旨在为学习数据结构的学生提供一个互动性强、功能全面的在线学习环境&#xff0c;同时帮助教师更有效地进行课程管理和学生评估。 本文阐述了平台的…

VUE项目基于源码实现可视化编程技术的探索

背景 在面对大型且高度组件化的项目时&#xff0c;传统的开发模式——即边预览边手动修改代码&#xff0c;往往会因项目结构的复杂性而显得效率低下&#xff0c;尤其是对于新加入项目或对项目结构不够熟悉的开发者而言&#xff0c;从UI界面逆向定位到具体代码实现并作出修改的过…

服务端技术架构演进之路

服务端技术架构演进之路 目录 服务端技术架构演进之路 0.架构中常见概念及理解 1.单机架构 2.应用数据分离架构 3.应用服务器集群架构 4.读写分离/主从分离架构 5.冷热分离架构 6.垂直分库架构 7.微服务架构 8.容器编排架构 本文以一个 " 电子商务 " 应…

Linux_进程控制

一&#xff1a;进程创建 fork()函数创建新进程 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1 进程调用fork&#xff0c;当控制转移到内核中的fork代码后&#xff0c;内核做&#xff1a;…

Qt - 地图相关 —— 1、加载百度在线地图(附源码)

效果图 开始加载地图 1、百度地图开发者网站中注册,获取密钥 2、进入开发文档中 将下图内容保存到本地文件中,文件名为"index.html"文件即可。接着将内容中的“您的密钥”改为刚刚创建应用出来的AK密钥即可。 然后双击打开若在浏览器中正常看到下图右侧地图则说明没…