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.mzph.cn/web/55525.shtml

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

相关文章

永恒之蓝漏洞

MS17-010是微软于2017年3月发布的一个安全补丁,旨在修复Windows操作系统中的一个严重漏洞,该漏洞被称为“永恒之蓝”(EternalBlue)。这个漏洞影响了Windows的Server Message Block(SMB)协议,允许…

Java集合剖析3】ArrayList

目录 拓展 1. 在面试时如何讲解一个集合的底层? 2. IDEA如何查看底层源码? 一、ArrayList底层数据结构 二、插入方法的具体实现 三、ArrayList底层原理总结 拓展 1. 在面试时如何讲解一个集合的底层? 底层的数据结构。插入方法的具体实现。…

vue综合指南(六)

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vuet篇专栏内容:vue综合指南 目录 101、Vue 框架怎么实现对象和数组的监听? 102、Proxy 与 Object.d…

10 分钟使用豆包 MarsCode 帮我搭建一套后台管理系统

以下是「 豆包MarsCode 体验官」优秀文章,作者把梦想揉碎。 十分钟使用豆包 MarsCode 搭建后台管理项目 在这个快节奏的时代,开发者们总是希望能够快速、高效地完成项目的搭建与开发工作。无论是初创企业还是大型公司,后台管理系统都是必不可…

SpringBoot1~~~

目录 快速入门 依赖管理和自动配置 修改自动仲裁/默认版本号 starter场景启动器 自动配置 修改默认扫描包结构 修改默认配置 读取application.properties文件 按需加载原则 容器功能 Configuration Import ​编辑 Conditional ImportResource 配置绑定Configur…

要在 Git Bash 中使用 `tree` 命令,下载并手动安装 `tree`。

0、git bash 安装 git(安装,常用命令,分支操作,gitee,IDEA集成git,IDEA集成gitee,IDEA集成github,远程仓库操作) 1、下载并手动安装 tree 下载 tree.exe 从 tree for Windows 官方站点 下载 tree 的 Windows 可执行文件。tree for Window:https://gnuwin32.source…

鸿蒙应用开发:全面认识鸿蒙系统

前言 随着智能设备的普及和物联网的发展,对操作系统的需求也越来越多样化。鸿蒙操作系统作为一款面向全场景的分布式操作系统,其适用范围非常广泛,从智能手机到家用电器,再到工业设备,都能找到应用场景。特别是在智能…

Nginx如何配置Gzip

Nginx 配置 Gzip 压缩可以显著减小传输的文件大小,提高网页加载速度。以下是在 Nginx 中配置 Gzip 的详细步骤: 一、找到 Nginx 配置文件 Nginx 的配置文件通常位于 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf(取决于 Ngin…

鸿蒙网络编程系列22-Web组件文件上传示例

1. web组件文件上传功能简介 鸿蒙的web组件可以加载网页,如果网页本身具备文件上传功能的话就比较尴尬了,因为html上传文件时,允许用户选择本地文件,但是鸿蒙因为安全性的考虑,只允许操作沙箱中的文件,所以…

android——Groovy gralde 脚本迁移到DSL

1、implementation的转换 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:*** 转换为 implementation ("com.github.CymChad:BaseRecyclerViewAdapterHelper:***") 2、plugin的转换 apply plugin: kotlin-android-extensions 转换为&#x…

物联网的应用以及优势

物联网智能项目涵盖了多个行业领域,随着技术的不断进步和普及,越来越多的应用案例成为主流趋势。此篇文章将概述一些主要的物联网智能项目类别及其优势和日常使用场景: 主流物联网智能项目 1. 智能家居: •优势: 提升居住体验,…

双十一母婴有什么好物推荐?双十一这五款母婴好物不容错过!

随着双十一购物狂欢节的来临,母婴用品市场再次迎来了消费者的热切关注。作为家长们为孩子和自身挑选必需品的重要时刻,母婴用品的质量和安全性无疑成为了关注的焦点。在众多品牌和商品中,我们精心筛选了本年度最受欢迎的母婴用品,…

5 机器学习之发展历程

所谓“知识就是力量”​。 1965年,Feigenbaum主持研制了世界上第一个专家系统DENDRAL。 机器学习是人工智能(artificial intelligence)研究发展到一定阶段的必然产物。二十世纪五十年代到七十年代初,人工智能研究处于“推理期”​,那时人们…

24/10/14 算法笔记 循环神经网络RNN

RNN: 一种专门用于处理序列数据的神经网络,它能够捕捉时间序列中的动态特征。RNN的核心特点是其循环连接,这允许网络在不同时间步之间传递信息,从而实现对序列数据的记忆和处理能力。 应用的场景: 自然语言处理(NLP&…

关于Python AI 编程助手Fitten Code的应用体验以及Python 修改删除 sys.path 路径以实现两个项目代码的合并

一、关于Python AI 编程助手Fitten Code的应用体验 AI现在无孔不入,现在都开始进入到编程中了,有一个能适用多种编译器环境的AI编程插件 Fitten Code。其适配了 Viusal Studio,VS Code(本文使用),JetBrains 系列(本文使用)以及Vim…

Mac通过键盘选取内容

问题: 我们在使用键盘的时候经常懒得动手去拿鼠标了,并且熟练使用键盘可以提高我们的工作效率,比如在我们需要复制内容的时候,可以仅仅通过键盘来选取想要的内容; 解决: 将鼠标光标移动到想要选取的内容…

如何使用C#实现Padim算法的训练和推理

目录 说明 项目背景 算法实现 预处理模块——图像预处理 主要模块——训练:Resnet层信息提取 主要模块——信息处理,计算Anomaly Map 主要模块——评估 主要模块——评估:门限值的确定 主要模块——推理 写在最后 项目下载链接 说…

进入 Searing-66 火焰星球:第一周游戏指南

Alpha 第四季已开启,穿越火焰星球 Searing-66,带你开启火热征程。准备好勇闯炙热的沙漠,那里有无情的高温和无情的挑战在等待着你。从高风险的烹饪对决到炙热的冒险,Searing-66 将把你的耐力推向极限。带上充足的水,天…

Java线程的状态以及转换条件,与操作系统线程状态的区别?

先看图增加点记忆。 Java线程状态: 线程状态转换图: 背景知识 JAVA的线程模型与操作系统线程的对应关系是1:1的,线程的调度权是由操作系统控制的。 为什么java的线程状态与操作系统不一致? JVM线程状态:RUNNAB…

mybatis二级缓存类加载问题

问题 CacheNamespace 修饰的接口,例如MapperA, 要先与CacheNamespaceRef(MapperA.class)修饰的接口加载 你遇到的问题是由于 Spring Boot 启动时,加载顺序导致 B 先加载,而 A 的缓存命名空间还没有被创建。这是 MyBatis 在解析 …