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

news2024/11/24 2:42:12

一.雨滴流淌着色器

法线贴图在红色通道和绿色通道上,那是法线的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.coloradmin.cn/o/2205744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ModelMapper的常见用法 ,号称是beanUtils.copyProp....的升级版??,代码复制粘贴即可复现效果,so convenient

官网案例 以下将官网案例做一个解释 1)快速入门 递归遍历源对象的属性拷贝给目标对象 拷贝对象下对象的属性值 Data class Order {private Customer customer;private Address billingAddress; }Data class Customer {private Name name; }Data class Name {pr…

ubuntu24 finalshell 无法连接ubuntu服务器, 客户端无法连接ubuntu, 无法远程连接ubuntu。

场景: 虚拟机新创建一个最小化的ubuntu服务器,使用finalshell连接服务,发现连接不上。 1. 查看防火墙ufw 是否开启,22端口是否放行 2. 查看是否安装openssh server, 并配置 我的问题是安装了openssh server 但是没有配置root可…

计算湘军,征程无限!麒麟信安受邀出席2024世界计算大会

2024世界计算大会 9月24日上午,以“智算万物 湘约未来——算出新质生产力”为主题的2024世界计算大会在长沙开幕。中共湖南省委书记沈晓明出席,中共湖南省委副书记、省人民政府省长毛伟明致欢迎辞,工业和信息化部党组成员谢远生出席并致辞&am…

fastdfs下的doc文件可以访问,但是图片无法访问报错404,解决记录

fastdfs下的doc文件可以访问,但是图片无法访问报错404 以下内容主要讲linux的问题 以下内容主要讲linux的问题 以下内容主要讲linux的问题 以下内容主要讲linux的问题 以下内容主要讲linux的问题 第1项:查看Nginx的日志 可以先去查看Nginx的日志,在你Nginx的安装目录下的lo…

一分钟带你了解巧手打字通在线学习平台

巧手打字通平台简介 巧手打字通是一个专为打字初学者,特别是中小学生量身设计的在线打字练习平台。该平台通过科学、有趣且高效的教学方式,帮助用户快速掌握打字技巧,提升打字速度和准确率。 打字学习路径 平台提供了整套的从入门到精通的…

BTB结构分析

I-BTB 每个entry对应一条指令;IBTB相较于其他的结构,有最大的tag开销,因为每个entry都有tag域段;entry内部没有冗余信息,每个信息都是必须的,同时每个entry的内容都不会有重复;每分配一个新的br…

过拟合 overfitting

from [Approaching Any Machine Learning Problem] 人话理解 过拟合的重点在于在训练集上的表现上升,而测试集的表现没有像在训练集上表现的这么好,就算过拟合。分的细的话可以分为测试集表现下降和保持稳定,或者小幅度上升。 详细上下文 …

PAT甲级-1013 Battle Over Cities

题目 题目大意 给定一个城市图,如果攻陷一个城市,该城市连接的所有路都要被销毁。要求计算出连通剩余的城市最少需要修建几条路。该图有n个顶点,m条边,k个重点城市。分别求出每个重点城市被攻陷,连通剩余城市需要修建…

ALV 和 导出 Excel 导出负号前置

CONVERSION_EXIT_Z0001_OUTPUT FUNCTION conversion_exit_z0001_output. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(INPUT) *" EXPORTING *"…

javafx中root的invoke方法报错Method too large问题记录

问题描述   在使用javafx绘制PC桌面程序页面时&#xff0c;使用到了tableview&#xff0c;tableview可以很方便的维护一个可编辑的表&#xff0c;简易代码如下。 var bomList observableListOf<BomContent.BomsInfo>()tableview(bomList) {column("客户名称"…

虚拟内存及内存管理机制

图源自 小林coding 虚拟内存是什么&#xff1f; 虚拟内存是一种计算机系统管理内存的技术&#xff0c;它使操作系统能够将物理内存&#xff08;RAM&#xff09;和硬盘存储结合使用。虚拟内存的主要作用包括以下几点&#xff1a; 扩展物理内存的使用&#xff1a; 虚拟内存允许…

一种用于超稳激光的数字控制锁频电路

摘要 超稳激光具有超高的频率稳定度和极窄线宽等优点&#xff0c;广泛应用于各种精密测量物理实验。为了确保不引入额外开关噪声&#xff0c;其频率锁定电路通常采用模拟电路实现&#xff0c;但是模拟控制电路存在锁定参数调节不方便、难以实现自动锁定和远程控制等方面的不足。…

【技术】Jaskson的序列化与反序列化

文章目录 概念解释1.Jasksona.JSONJSON 的基本特点JSON 的基本结构JSON 示例 b.ObjectMapper类 2.序列化与反序列化a.序列化对象序列化集合序列化ListSetMap b.反序列化反序列化单个对象反序列化集合对象 概念解释 1.Jaskson Jackson 是一个用于处理 JSON 数据的 Java 库,所以…

大模型烧钱战,百度云亟需突围之路

百度云在人工智能大模型领域投入了大量资源&#xff0c;但高昂的研发、运营成本与压力使其在盈利方面遭遇了重大挑战&#xff0c;这成了百度集团必须正视的问题。 转载&#xff1a;科技新知 原创 作者丨萧维 编辑丨蕨影 上个月末&#xff0c;以“智能跃迁”为主题的百度云智大…

stm32 g0 使用内部flash读写

个别芯片存储空间为32k&#xff0c;注意使用范围&#xff0c;并且利用debug或者.map文件&#xff0c;避开程序占用的页。 g0hal库和其他系列有些不同&#xff0c;根据官方例程修改。 GO30F6P6是 32k FLASH.基地址0x8000000&#xff0c;长度0x8000。即0x8000000-0x8008000。在…

访问公司gitlab出现 502 Bad Gateway 错误,已经解决

文章目录 1、通过 WindTerm 连接 Ubuntu2、检查 GitLab 服务状态3、查看 Unicorn 日志4、检查 Unicorn 的 stderr 日志5、检查 PID6、停止当前运行的 Unicorn 服务7、确认 Unicorn 已停止8、删除陈旧的 .pid 文件9、重新启动 GitLab 服务10、检查状态11、查看 Unicorn 日志 我公…

会话好友区设计与开发(五)

会话好友区设计与开发&#xff08;五&#xff09; 前言 在上一集&#xff0c;我们完成了选中和切换item的颜色变化的功能&#xff0c;那么这一集&#xff0c;我们将开始封装一些必要的函数。 需求 我们需要封装一些逻辑&#xff0c;那么我们也要进行分析。 在上一集我们虽…

LeetCode:1518.换水问题(模拟 JAVA)

目录 1518.换水问题 题目描述&#xff1a; 实现代码与解析&#xff1a; 模拟 1518.换水问题 题目描述&#xff1a; 超市正在促销&#xff0c;你可以用 numExchange 个空水瓶从超市兑换一瓶水。最开始&#xff0c;你一共购入了 numBottles 瓶水。 如果喝掉了水瓶中的水&am…

coredump设置

coredump路径查看及设置 coredump路径查看 命令1&#xff1a; cat /proc/sys/kernel/core_pattern 命令2&#xff1a; /sbin/sysctl kernel.core_pattern coredump路径修改 临时修改&#xff1a;echo ‘/var/log/%e.core.%p’ > /proc/sys/kernel/core_pattern 永久修改…

基于Java的企业仓库管理系统的设计与实现(论文+源码)_kaic

摘 要 随着信息技术的不断发展&#xff0c;以及网络技术的广泛用&#xff0c;企业企业仓库存储的信息量也越来越大&#xff0c;信息变得复杂。基于人工的数据收集方式&#xff0c;在耗费大量人力的同时也降低了信息采集的效率&#xff0c;例如影响了信息正确率和信息的录入速度…