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

news2024/10/24 4:33:48

一.雨水水坑着色器

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

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

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

相关文章

C++:模拟priority_queue

目录 priority_queue的介绍 概念 特点 priority_queue的使用 基本操作 演示代码 ​编辑 priority_queue的模拟实现 仿函数 向上调整和向下调整 模拟实现的代码 priority_queue的介绍 概念 在C标准库中,priority_queue是一个基于优先级堆的容器适配器。…

设计感十足的喇叭裤来咯,亲子款get~

微喇叭的设计,时尚感爆棚,瞬间让宝贝成为冬日里的小潮人。而且这种设计非常显瘦,能够很好地修饰宝贝的腿型,穿上秒变大长腿。表面磨毛质感,摸起来舒软绒顺,温柔气质,下脚隐形拉链,拉…

如何通过 Nginx 只允许 www 域名访问并禁止裸域名访问

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

learn C++ NO.23——map、set的模拟实现

STL库的实现方式 map和set的底层用的红黑树是一样的吗?从容器特点的角度出发,这里个容器的底层应该分别用key搜索模型的红黑树和key value 搜索模型的红黑树。但是,从库的设计角度出发,这两者用同一份红黑树代码更好。而STL就是用…

第十五章 RabbitMQ延迟消息之延迟插件

目录 一、引言 二、延迟插件安装 2.1. 下载插件 2.2. 安装插件 2.3. 确认插件是否生效 三、核心代码 四、运行效果 五、总结 一、引言 上一章我们讲到通过死信队列组合消息过期时间来实现延迟消息,但相对而言这并不是比较好的方式。它的代码实现相对来说比…

Java->排序

目录 一、排序 1.概念 2.常见的排序算法 二、常见排序算法的实现 1.插入排序 1.1直接插入排序 1.2希尔排序(缩小增量法) 1.3直接插入排序和希尔排序的耗时比较 2.选择排序 2.1直接选择排序 2.2堆排序 2.3直接选择排序与堆排序的耗时比较 3.交换排序 3.1冒泡排序…

你知道C++多少——继承

🌈个人主页:小新_- 🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 🏆所属专栏&#xff1…

蓝桥杯模块三:蜂鸣器和继电器的基本控制

模块训练题目: 一、蜂鸣器电路图 1.电路图 2.电路分析 138译码器控制Y5,Y5控制Y5C,Y5C低电平控制芯片开启P0口控制ULN2003继而控制蜂鸣器端口和继电器端口 二、程序代码 1.138译码器控制端口函数 建立初始化函数选择锁存器 2.实现题目功能 在LED代…

24-10-13-读书笔记(二十五)-《一只特立独行的猪》([中] 王小波)用一生来学习艺术

文章目录 《一只特立独行的猪》([中] 王小波)目录阅读笔记记录总结 《一只特立独行的猪》([中] 王小波) 十月第五篇,放慢脚步,秋季快要过去了,要步入冬季了,心中也是有些跌宕起伏&am…

Guitar Pro怎么制作伴奏谱,吉他谱制作软件guitar pro教程

在诸多教学吉他谱制作软件中Guitar Pro是一款非常优秀的软件,它是专为吉他和其他弦乐器设计,且能提供乐谱编辑、音轨录制和播放、和弦与音阶库等功能的强大软件。Guitar Pro不仅具有强大的乐谱编辑功能,其用户界面也易于上手,更支…

ThingsBoard规则链节点:Script节点详解

引言 脚本节点简介 用法 含义 应用场景 实际项目运用示例 智能楼宇管理系统 工业自动化生产线 结论 引言 ThingsBoard是一个功能强大的物联网平台,它支持设备管理、数据收集与处理以及实时监控。其核心组件之一是规则引擎,允许用户定义复杂的业务…

vue特效,一片动态星空

vue实现漂亮星空&#xff0c;超级简单 1.创建vue项目&#xff1a; vue create demo 2.注册vuecli : npm i element-ui -S 3.加载依赖 &#xff1a;npm i 4.运行项目 :npm run serve <!DOCTYPE html> <html lang"en"> <head><…

JavaWeb 19 AJAX

"我就是希望你好&#xff0c;就像很多人希望我好一样&#xff0c;特别简单&#xff0c;特别真挚。也不为了什么&#xff0c;就是希望你好" —— 24.10.13 一、什么是AJAX AJAX Asynchronous JavaScript and XML(异步的JavaScript和XML) AJAX不是新的编程语言&…

仿新版QQ的聊天小软件

仿新版QQ的聊天小软件 文章说明核心源码效果展示源码下载 文章说明 新开一个聊天组件的项目的想法主要来源于想学习一下消息队列的使用&#xff0c;后来在书写界面和一些功能模块时&#xff0c;又想到可以抽离出来&#xff0c;分别写几篇文章&#xff0c;主要介绍扫码登陆、消息…

MQ快速入门【详细】个人笔记 讲解通俗易懂

1.同步通讯和异步通讯 同步通讯&#xff1a;如果举个例子来说&#xff0c;同步通讯就像是两个人在打电话&#xff0c;一方说的话&#xff0c;能够立马传给另一方&#xff0c;消息的时效性非常高&#xff0c;但是相对的&#xff0c;只能是给一个人通讯&#xff0c;如果这个时候&…

React (三) 创建安装脚手架,类组件与函数式组件;生命周期;父子通信props;插槽;非父子通信Context

文章目录 一、脚手架的创建与安装1. 认识脚手架2. 安装脚手架3. 创建react项目4. 项目结构 二、从0编写三、组件化开发1. 什么是组件化开发2. 类组件3. render函数4. 函数式组件 四、生命周期1. 挂载Mount2. 更新Update3. 卸载Unmount4. 不常用的生命周期 五、父子组件通信1. 父…

数据结构之队列(python)

华子目录 1.队列存储结构1.1队列基本介绍1.2队列的实现方式 2.顺序队列2.1顺序队列的介绍2.2顺序队列的简单实现2.3代码实现 3.链式队列和基本操作3.1链式队列数据入队3.2链式队列数据出队3.3队列的链式表示和实现 1.队列存储结构 1.1队列基本介绍 队列的两端都"开口&qu…

springcloud之服务集群注册与发现 Eureka

前言 1&#xff1a;对于能提供完整领域服务接口功能的RPC而言&#xff0c;例如&#xff1b;gRPC、Thrift、Dubbo等&#xff0c;服务的注册与发现都是核心功能中非常重要的一环&#xff0c;使得微服务得到统一管理。 2&#xff1a;在分布式领域中有个著名的CAP理论&#xff1b;…

Vue3 + Element plus 实现切换el-radio前二次确认

Vue3 Element plus 实现切换el-radio前二次确认 场景&#xff1a;点击切换el-radio之前判断当前内容是否有改变&#xff0c;如有改变弹窗提示切换el-radio将销毁操作&#xff0c;弹窗二次确认是否切换 问题&#xff1a; el-radio 没有提供类似于beforeUpdate这样的钩子去处理这…

探索极简计算的新边界:从Uxn虚拟机看未来编程生态

越来越多的开发者追求复杂度和功能性的极致,然而,有一个小众的编程社区选择了截然不同的道路——极简主义。Uxn虚拟机便是这一思潮的代表之一。它通过简洁的指令集和有限的硬件资源模拟,试图打造一种可以在多种设备上运行的便携性编程环境。 与主流的重型操作系统和复杂…