UE4 材质学习笔记10(程序化噪波/覆雪树干着色器/岩层着色器)

一.程序化噪波

柏林噪波是一种能生成很好的随机图案的算法,它是一个无限的、不重复的图案,可以采用这种基础图案并以多种方式对其进行修改,

将它缩放并进行多次组合,就可以创建一个分形图案。这些组合的缩放等级称为一个Octave

这是产生柏林噪波基础图案的核心公式(优化版本)

当这段代码被编译时,会产生下面的消耗,并且这只是核心图案,你通常把这个东西循环三到四次 甚至多达八次,所以你可以使用多达488个指令和64个纹理采样,所以这是非常耗能的

有一个解决办法是在3D空间中渲染一系列的噪波切片,并创建一个体积纹理,这将61个指令和8个纹理采样分解为1个纹理采样

这种技术耗能很低,但也有一些缺点,我们必须让它在三个维度都进行平铺,所以它也不再是一个无限不重复的图案了

在虚幻引擎的噪波节点里面附带有函数“快速渐变-3D纹理,选择这个就是在采样柏林噪波体积纹理

这个节点需要绝对世界位置作为 生成噪波的种子,图案非常小可以乘上一个小数值放大图案

接着我们设置Function为3D纹理,它们在3D空间中对噪波切片进行采样,并将这些切片组合成一个体积纹理,并不是做大量的计算,下面的等级越大,就越消耗性能,默认六级,所以它仍然在做6个纹理采样和96个指令,每个等级1个纹理采样和16个指令,然后还可以设置最小和最大的输出值

function的Voronoi(沃罗诺伊)创造了这种类似细胞的结构,某些情况很有用

程序化噪波可以是体积的(或者说可以是三维的),当球体在场景中移动时,它就是在噪波的体积当中移动,因此噪波是存在于世界空间中的,当我的模型表面与它相交时,在世界空间中特定位置的噪波图案是什么样子的,就会跟着应用到模型的表面上,所以移动模型时就得到了不同的图案

二.覆雪树干着色器

我们的目标是创造一个白雪皑皑的森林,如果你想让森林中的每一棵树都不一样,需要单独打开每棵树并设置独特的纹理,这显然不太现实,但是程序化噪波可以为每一棵树生成不同的外观。

首先将绝对世界位置连接噪波节点,图案并没有发生变化,因为这是默认使用的内容,所以要乘上一个值得到合适的大小。然后将噪声的level设置为3,并且不需要湍流,并且设置乘3D纹理,然后限制到0-1之间,用power提高对比度。

然后就可以根据噪波纹理进行插值,设置一个雪的颜色,比白色深一点,因为PBR的颜色值不会一直上升到白色,然后在这再加一点淡淡的蓝色,这只是因为雪会反射天空

然后修改一下世界位置的缩放和树皮的平铺

但是我想确保树干的底部总是有雪,我可以乘以世界空间位置的Z分量,如果我想让融化的雪在树干的某一面出现,我可以用雪的蒙版乘以法线的Y分量。

如果放置一棵树在场景中,雪的位置就会根据世界位置改变,所以每一棵树都会有不同的雪的图案。

三.岩层着色器

需要用这个纹理来模拟岩层。

我想让这些岩石在任意方向旋转的同时,仍然能投射出地质岩层并且保持它的一致性。所以我需要使用绝对世界坐标来采样纹理。

接下来加入噪波,将噪波乘上一个常量以后与z值相加。现在就好像不同岩层的岩石互相混合了

但我认为混合的比例仍然是不合适的,还要修改一下噪波的大小,所以将绝对世界位置乘上一个常量以后连接到噪波

ok,现在可以把这个纹理与采样的岩石纹理进行混合,无论怎么旋转,都会有一种统一感。并且可以无限叠加创造不同的岩石资产

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker数据管理和网络通信+docker实例+dockerfile镜像实战

一、Docker 的数据管理 管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。 1.数据卷(主机和容器间的挂载) 数据卷是一个供容器…

Python爬虫教程:Selenium可视化爬虫的快速入门

网络爬虫作为获取数据的一种手段,其重要性日益凸显。Python语言以其简洁明了的语法和强大的库支持,成为编写爬虫的首选语言之一。Selenium是一个用于Web应用程序测试的工具,它能够模拟用户在浏览器中的操作,非常适合用来开发可视化…

忘记密码?一招教你轻松重设欧拉系统密码!

在日常使用操作系统时,偶尔忘记密码确实会让人感到有些烦恼。无论是因为忙碌的生活节奏,还是不经意间的疏忽,这种情况都有可能暂时阻碍我们访问系统,进而影响到工作或学习的顺利进行。为了帮助大家更轻松地解决这个问题&#xff0…

【升华】人工智能10大常用算法与及代码实现(汇总)

人工智能10大常用算法与及代码实现,研究这10个例子作为人工智能入门例子,使用的语言为python语言。 这10大算法包括:线性回归、逻辑回归、决策树、朴素贝叶斯、支持向量机(SVM)、集成学习、K近邻算法、K-means算法、神…

Qt 实现动态时钟

1.实现效果 2.widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace

嵌入式-交叉编译链

一、Buildroot Official website&#xff1a; https://buildroot.org/downloads/manual/manual.html Buildroot是Linux平台上一个用于构建嵌入式Linux系统的框架&#xff0c;它简化了系统构建过程并实现了工作的自动化。以下是对Buildroot的详细介绍&#xff1a; 一、概述 …

excel如何把年龄转换为日期

总体的思路 我们从一个核心的日期函数出发 我们首先需要年月日 我的数据大概是这样的。 获取年份 第一步&#xff1a;提取岁前面的数字 left(目标单元格&#xff0c;“从左到右获取第几个字符”)第二步:替换掉数字后面的岁 第三步:新增一个单元格 在里面填入年 第四步:用…

pyaudio出现Invalid number of channels的解决方法

最近准备做个录制电脑本身的音频&#xff0c;于是用到了pyaudio。代码如下。 import pyaudiodef get_audio_devices():p pyaudio.PyAudio()device_info p.get_host_api_info_by_index(0)device_count device_info.get(deviceCount)devices []for i in range(device_count)…

【前端】制作一个简单的网页(2)

单标签组成的元素 这类标签不需要内容产生效果&#xff0c;通常表示对网页的某种行为&#xff0c;它们不用标记任何内容&#xff0c;开始即是结束。 比如&#xff0c;<hr>标签的作用是在网页中添加一条分割线&#xff0c;它仅包含开始标签&#xff0c;是一个单标签元素。…

公链技术开发之路:从概念到实现的公链开发全攻略

随着区块链技术的日益成熟&#xff0c;公链&#xff08;Public Chain&#xff09;作为区块链生态的基础设施之一&#xff0c;成为了众多企业和项目方争相探索和开发的重要领域。公链是去中心化的区块链网络&#xff0c;任何人都可以自由加入&#xff0c;进行交易、开发和使用去…

Node.js 中的 WebSocket 底层实现

WebSockets 是一种网络通信协议&#xff0c;可实现双向客户端-服务器通信。 WebSockets 通常用于需要即时更新的应用程序&#xff0c;使用 HTTP 之上的持久双工通道来支持实时交互&#xff0c;而无需持续进行连接协商。服务器推送是 WebSockets 的众多常见用例之一。 本文首先…

pytorch与卷积神经网络实战笔记

课程视频链接 CNN卷积神经网络算法原理 全神经网络的整体结构 输入层&#xff08;x1, x2, x3…&#xff09;->隐藏层&#xff08;全连接&#xff09;->输出层&#xff0c;整体就类似于一个函数&#xff0c;输入x&#xff0c;经过函数module(x)得到输出y的过程&#xf…

QtModel

QModelIndex index1 model->index(row,column,QModelIndex());QModelIndex index2 model->index(row.column,index2); QSqlQuery::size() 仅在使用了 QSqlQuery::exec() 后并且查询结果集的所有行都被读取时才有效。如果结果集很大或在使用游标的情况下&#xff0c;返回…

AVL树的实现

AVL树 1. AVL的概念2. AVL树的实现2.1 AVL树的结构2.2 AVL树的插⼊2.2.1 AVL树插⼊⼀个值的⼤概过程2.2.2 平衡因⼦更新2.2.3 插⼊结点及更新平衡因⼦的代码实现 2.3 旋转2.3.1 旋转的原则2.3.2 右单旋2.3.3 右单旋代码实现2.3.4 左单旋2.3.5 左单旋代码实现2.3.6 左右双旋2.3.…

【排序】——2.快速排序法(含优化)

快速排序法 递归法 霍尔版本(左右指针法) 1.思路 1、选出一个key&#xff0c;一般是最左边或是最右边的。 2、定义一个begin和一个end&#xff0c;begin从左向右走&#xff0c;end从右向左走。&#xff08;需要注意的是&#xff1a;若选择最左边的数据作为key&#xff0c;则…

Arduino配置ESP32环境

Arduino配置ESP32环境 引言一、IDE下载教程操作取巧方法 二、社区安装包三、官方手动安装 引言 最近入手了一款ESP32-C3的开发板&#xff0c;想继续沿用现有Arduino IDE&#xff0c;网上看了很多方法&#xff0c;大致分了三类&#xff1a;IDE下载、社区安装包、github手动配置…

基于SpringBoot+Vue+uniapp的诗词学习系统的详细设计和实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

ROS理论与实践学习笔记——5 ROS机器人系统仿真之URDF(Unified Robot Description Format)语法详解

URDF 文件是一个标准的 XML 文件格式&#xff0c;用于在 ROS 中描述机器人模型的结构。URDF 通过预定义的一系列标签&#xff0c;简洁地表达机器人的组成和运动关系。虽然机器人模型可能非常复杂&#xff0c;但在 URDF 中可以主要简化为两个核心部分&#xff1a; 连杆&#xff…

6.2 遍历重定位表

本节我们将编写一个遍历重定位表的示例程序&#xff0c;打印重定位表。 本节必须掌握的知识点&#xff1a; 遍历重定位表 6.2.1 遍历重定位表 实验四十三&#xff1a;遍历重定位表 以下代码实现打印"c:\\notepad64.exe"进程重定位表的所有信息。 /*--------------…

【详尽-实战篇】使用Springboot生成自带logo或者图片的二维码-扫描二维码可以跳转到指定的页面-Zing-core

先上效果图 项目源码&#xff1a;https://download.csdn.net/download/qq_43055855/89891285 源码地址 手机扫描二维码跳转到指定网页 概述 这个项目是一个基于 Java 的二维码生成与解析工具&#xff0c;主要由 QRCodeUtil 和 QRCodeController 两个类组成。它利用了 Google…