最新文章
泰课在线 | 微信拼团成功后如何获取课程?
08-09 17:57
Unity教程 | 使用ARKit为iOS开发AR应用
07-31 17:23
Unity Pro专业版7折订阅四选一工具包之VR开发与艺术设计
07-28 11:47
网友使用虚幻UE4实现CAVE 多通道立体渲染的沉浸式环境
07-27 11:57
VR晕动症调查:未来5年内大部分VR晕动症将得到解决
07-27 11:26
AMD CEO:未来3-5年最重要 希望5年达1亿VR用户
07-27 10:44
UE4中噪声的充分使用
UE4 推出基于材质的程序式噪声已有一段时间,但大多数用户因高昂的性能成本而限制其使用。因此,许多用户选择在其他程序中编写平铺噪声纹理,再导入 UE4 使用。很多人希望能在 UE4 中直接实现这一步骤,却找不到便捷的方法。
我们在虚幻引擎 4.13 中满足了这些需求,这些改进可分为以下几类:
- 平铺噪声选项
- 新增的沃罗诺伊噪声
- 性能优化和其他改进
首先,我要感谢渲染工程师兼客座教授 Marc Olano,他与我合作解决了平铺和沃罗诺伊选项的问题。他还完成了所有性能改进和代码整理工作。许多原有的选项得到了优化,现在工具提示会描述成本。需要注意的是,尽管这些优化有很大帮助,但大部分程序式噪声形式的渲染成本仍然较高。因此,我们将介绍可以先烘焙静态纹理的平铺噪声选项。在最后一节,我们会讨论不同噪声功能的相对开销。
平铺噪声
在 4.13 版本中,将一个“噪声(Noise)”节点添加到材质中时,您会注意到节点底部有两个新选项:“平铺(Tiling)”和“重复大小(Repeat Size)”。
如果选中“平铺(Tiling)”,噪声将按指定的“重复大小(Repeat Size)”(即域)重复。若要烘焙平铺噪声,设置过程并不复杂。您需要确保重复大小与将要烘焙的取样大小一致。最简单的方法是对“位置(Position)”输入使用默认的 0 - 1 纹理坐标,然后将“比例(Scale)”和“重复大小(Repeat Size)”设置为与示例图相同的值。
我们使用默认的 0 - 1 UV 作为位置坐标,是因为可以借助渲染工程师 Daniel Wright 提供的“将材质绘制到渲染目标(Draw Material to Render Target)”这一新功能。需要说明的是,本文介绍的内容只是该功能的冰山一角。完成以下步骤后,您可以将其应用于任意数量的相关操作,请耐心阅读。
具体操作步骤如下:
- 创建 Actor 蓝图:在内容浏览器中,单击“新增(Add New)”,然后选择“蓝图类(Blueprint Class)”。当新对话框弹出时,选择 Actor,并为该资产命名。
- 生成渲染目标:在内容浏览器中,再次单击“新增(Add New)”,选择“材质和纹理(Materials and Textures)”,再选择“渲染目标(Render Target)”。双击新生成的渲染目标,将分辨率设置为所需大小。
- 设置蓝图事件:打开新添加的蓝图,导航至“事件图(Event Graph)”,添加一个定制事件,命名为“Bake”,指定要烘焙的材质和创建的渲染目标。
- 调用定制事件:导航至“构造脚本(Construction Script)”,调用定制事件 Bake。
- 生成静态纹理:编译蓝图后,系统会将材质写入渲染目标。此时,右键单击渲染目标,选择“创建静态纹理(Create Static Texture)”并指定要创建的纹理。
沃罗诺伊噪声
沃罗诺伊噪声非常适合用于模拟翻腾的烟云、腐蚀图案以及自然界中的许多其他图案。它也被称作沃利噪声或蜂窝噪声。以下是在虚幻引擎中可以直接实现的一些基本效果:
- 从左到右依次为:
- 一个倍频程,幂 = 2
- 一个倍频程,反转 (1 - x)
- 三个倍频程,反转
下面是在 UE4 中纯粹用沃罗诺伊噪声生成的龟裂沙地示例:
生成步骤详解
从左到右依次为:
- 1 倍频程的原始沃罗诺伊噪声,已反转。
- 通过在输入位置添加少量“梯度”噪声,对沃罗诺伊噪声应用扭曲效果。
- 使用“高通滤波纹理(High Pass Texture)”材质取样沃罗诺伊噪声,使边缘细节均衡化。
- 使用“根据高度贴图建立法线贴图”功能生成法线贴图。
最后的沙地图像是将第 3 步中的纹理作为视差遮蔽贴图材质中的高度贴图生成的。
“高通滤波”通过新的材质功能“高通滤波纹理(High Pass Texture)”实现。边缘变化通过添加另一个梯度噪声来实现,该噪声用于改变偏移宽度。此版本的高通滤波功能需要一个纹理,因此在此时保存该纹理以便后续使用。
此外,还有一种不依赖纹理的“高通滤波功能”版本,适合偏好这种方法的用户。
要烘焙法线,只需将第 3 步的结果烘焙到渲染目标,然后使用“根据高度贴图建立法线贴图”功能,再将此材质渲染到渲染目标。
需要注意的是,只需进行少量更改,如降低高通滤波偏移量和增加高通滤波强度,就可以得到腐蚀图案纹理的变体。
下面是一个样式化的翻腾烟柱效果:该效果通过对两个作为平移纹理的简单沃罗诺伊纹理进行取样得到。系统将两个纹理相乘,然后取平方根,以保持翻腾形状的完整性。最后将其应用到铺嵌的圆柱体网格上。需要注意的是,要先将最终高度乘以全局空间法线,然后才能连接到全局位置偏移。
这里还有一个基于沃罗诺伊的大理石纹理示例:
生成大理石类纹理的方法
从左到右依次为:
- 标准沃罗诺伊噪声,1 倍频程。
- 在输入位置添加了“梯度”噪声(设置为 0.05)的沃罗诺伊噪声。
- 将梯度噪声乘以 0.3 后添加到沃罗诺伊输入位置。
- 使用第三步的结果作为来自引擎/内容的随机纹理(
Texture2D'/Engine/Engine_MI_Shaders/T_Base_Tile_Specular.T_Base_Tile_Specular')的纹理坐标。
这里使用了名为梯度贴图的技术,通过先做加法和乘法,再将结果插入纹理来控制颜色范围。您可以描绘定制纹理以获取所需颜色,也可以尝试使用任何包含您想要提取颜色的图像。
这个示例仅在输入位置添加了标量扭曲,会产生对角线条纹图案。对于大理石纹理来说,这种效果是合适的,但如果想要其他效果,可能需要对 X 和 Y 扭曲使用不同的噪声模式,或者使用法线贴图进行偏移。
关于沃罗诺伊噪声成本的说明
沃罗诺伊噪声成本较高,有四种不同的质量级别可供选择,区别在于搜索的单元数量。一般来说,质量级别数字越小,网格失真越少。需要注意的是,放置噪声节点时,默认设置为 6 倍频程,但您只会看到 1 个倍频程的指令计数:
- 1 级质量搜索 8 个单元,每个倍频程约 160 条指令。
- 2 级质量搜索 16 个单元,每个倍频程约 320 条指令。
- 3 级质量搜索 27 个单元,每个倍频程约 540 条指令。
- 4 级质量搜索 32 个单元,每个倍频程约 640 条指令。
作为对比,一个典型的材质大约有 100 条指令。一个使用 4 级质量沃罗诺伊噪声的 6 个倍频程的材质将有大约 3800 条指令,渲染成本高出约 30 倍。1 级质量沃罗诺伊噪声的 1 个倍频程只需 160 条指令,对于基本材质来说较为合理。
从左到右依次为 1 级质量、2 级质量、3 级质量、4 级质量。需要注意的是,2 级质量比其他几级暗一点,这是因为使用了两个偏移 2x2x2 的网格,点阵较为密集,乘以 2 即可解决该问题。
性能特性
为了展示使用噪声节点的实际成本,我使用全屏幕四边形,测量了每种功能使用 1 - 6 个倍频程的性能成本,并与矩形纹理取样进行了比较。对于矩形纹理取样,倍频程只是相加的附加取样。
不出所料,大部分噪声选项的渲染速度明显慢于简单的纹理查找。“快速梯度 - 3D 纹理”是最快的纹理功能,因为它已烘焙到体积纹理上,而其他“基于纹理”的选项使用 2D 噪声纹理进行随机性运算,需要更多数学运算来进行 3D 取样。因此,如果需要使用程序式噪声并保持场景快速渲染,“快速梯度”是目前的最佳选择。但要注意,如果将其应用于大面积区域或过度增加平铺值,会出现重复图案。
高质量的沃罗诺伊噪声功能成本最高,在性能受限的环境中使用时,务必将其烘焙到纹理中。
希望这些信息对您有所帮助,能让您在项目中有效地利用噪声。了解更多,请关注泰课在线资讯栏目。