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

embedded/2024/10/21 13:35:15/

一.程序化噪波

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

将它缩放并进行多次组合,就可以创建一个分形图案。这些组合的缩放等级称为一个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,现在可以把这个纹理与采样的岩石纹理进行混合,无论怎么旋转,都会有一种统一感。并且可以无限叠加创造不同的岩石资产


http://www.ppmy.cn/embedded/127471.html

相关文章

做一只由 OpenCV 控制的仿生手

这个项目介绍了如何制作和控制一只仿生手。作者最初受到Instagram上一个视频的启发,该视频展示了使用MPU6050传感器追踪手部动作并在屏幕上显示3D模型。作者决定将这个想法进一步发展,使用OpenCV来控制一只真实的仿生手。 大家好,在这篇教程中…

关于查找轮廓cv2.findContours()函数运行过程中的问题之cv2.polylines()参数问题

# 查找轮廓 import cv2 import numpy as np img cv2.imread(5.png) cv2.imshow(1, img) gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow(2, gray) ret, img1 cv2.threshold(gray, 125,255, cv2.THRESH_BINARY) # 查找轮廓 c, hierarchy, _ cv2.findContours(img1, …

Docker容器化部署MySQL主从集群(CentOS9+MySQL9)

准备 CentOS安装 可以虚拟机安装,目前最新版本CentOS9docker安装 yum install docker-ce (或者 dnf install docker-ce CentOS9以后包管理工具使用dnf)MySQL镜像拉取 docker pull mysql 1、 MySQL主从复制集群部署 1.1 主节点:…

「自动化测试」Selenium 的使用

使用 Selenium 需要先导入相关依赖 <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.0.0</version> </dependency><dependency><groupId>io.gith…

今日最佳WAF雷池社区版,tengine问题解决办法

很多第一次使用雷池社区版的朋友会碰到tengine相关的问题 其实官方文档都有记录怎么排除&#xff0c;这里都单独把tengine的排查方法再说一下 请检查防火墙规则&#xff0c; tengine 容器状态和日志 如果站点报错如上&#xff0c;说明tengine容器可能出现问题&#xff0c;需…

完整发布/上传uniapp Ios应用到App Store流程

使用uniapp打包&#xff0c;假如使用app store证书打包出来的ipa文件&#xff0c;需要上传到app store上才能上架。假如你还没有app store证书&#xff0c;还没有打包&#xff0c;你可以参考下面这篇文章&#xff0c;先创建打包证书再继续看这篇上架的教程&#xff1a;https://…

PyTorch 深度学习虚拟环境安装与配置 GPU 版

什么是虚拟环境? 在 Anaconda 中&#xff0c;虚拟环境允许你为不同的项目创建隔离的 Python 环境&#xff0c;这样可以避免不同项目之间的依赖冲突。 使用虚拟环境是一个很好的实践&#xff0c;特别是当你在开发多个项目&#xff0c;或者需要不同版本的库时。这样可以确保项目…

3.Linux中安装redis及环境搭建

文章目录 1.在Ubuntu中安装redis2.在Centos中安装Redis 5(不建议&#xff0c;现在yum仓库已经停止维护)3.Ubuntu中安装mysql4.Ubuntu中安装java85.Ubuntu中启动Java程序6.环境搭建及介绍 大家好&#xff0c;我是晓星航。今天为大家带来的是 Linux中安装redis 相关的讲解&#x…