MicroSplat
原文档: https://docs.google.com/document/d/1Yrx8-2yE5BUDLlnRKE_4sVCkPV68KJZ-Ez4XLhvef0Y/edit
以下翻译为机器翻译有错误请指正
Texture Cluster Module
"纹理集群"是我 ( 插件作者 Jason Booth ) 在创建MegaSplat时发明的一种技术。其核心思想是使用多种纹理并进行混合,而不是仅仅使用一种纹理。这样做的目的是为了消除在使用单一纹理时可能出现的重复图案(平铺伪像)。在MegaSplat中,由于其内部的技术特性,这种纹理混合的操作已经被自然地实现了,因此,这个"纹理集群"的技术在MegaSplat中几乎不需要额外的操作。
MicroSplat使用的混合技术与MegaSplat的非常不同,它使用的是传统的Unity Terrain工具,这些工具限制在32个纹理。然而,我们开发了一种新的技术来在MicroSplat中进行纹理集群。
一旦安装完毕,“Texture Cluster”(纹理集群)你就可以在"Shader Generator"部分看到"Texture Cluster"模式选项。你可以设置每个纹理使用2或3个变体,或者使用新的"Stochastic"模式。例如,你有一个由32个纹理组成的地形,你可以提供第二套32个纹理进行混合,或者还可以提供第三套。也就是说,虽然你仍然受限于使用32个控制纹理,但每个控制纹理都可以与其他2个纹理进行纹理集群,这样你就可以在单个地形上使用96个纹理。
Stochastic Mode
“Stochastic Mode” 是一种处理纹理的技术,它不需要额外的纹理。
这种模式最初是基于这篇论文。
然而,这种技术需要对纹理进行自定义处理,并为每种压缩格式编写特殊的代码,这使得它变得非常复杂。
为了简化这个过程,开发了一种新的技术。这种技术的基本思想是,它将纹理在各种方向上与自身混合,以创建一个非重复的表面。这样,即使你只有一种纹理,也可以通过这种方法生成多种看起来不同的纹理。
然而,这种方法并不能提供全面的纹理集群解决方案所能提供的多样性,也就是说,它生成的纹理种类可能没有那么多。但是,这种方法的优点是,你只需要打开它,它就能工作,不需要你做任何额外的设置或准备工作。
Traditional (2 or 3 layer) Texture Clustering:
在着色器中,一旦启用了Texture Cluster部分,你就可以为其分配第二组或第三组纹理数组。稍后我们将讨论如何创建这些纹理数组。噪声(Cluster Noise)纹理用于控制纹理的图案,可以在地形上进行缩(Scale)放和偏移(Offset)。
Cluster Contrast可以控制不同纹理集群之间的混合程度。例如,你可以设置在地形类型之间进行柔和的混合,但在内部集群中进行尖锐的混合。
Noise Boost可以增强噪声纹理的效果。如果你提高了Noise Boost,那么纹理的混合会更加明显,或者说,纹理之间的切换会更加频繁。
这两个属性(Cluster Contrast 和 Noise Boost)都可以在每个纹理的基础上进行调整。也就是说,你可以为每个纹理设置不同的值。但请注意,这些设置会应用到整个纹理集群。
Packing Textures
如果你启用了这个选项,你可能会发现你的地形变得非常白,这时你可能需要检查你的纹理设置,确保你已经正确地打包了纹理,并且这些纹理已经被正确地分配给了纹理集群。
如果你回到你的"Texture Array Config"(通常位于你的地形的"MegaSplatData"目录中),你会在配置中看到一个新的选项,这个选项允许你指定你计划为每个纹理使用多少种纹理变体。
一旦设置好,每个纹理选择区域将被替换为多行显示,用于你的纹理变体。一旦你完成了变体的设置,按下Update按钮将会导出多套纹理数组,然后你可以将它们分配给你的着色器。
配置和生成的数组需要分配给你的材质。这样,每个纹理都会根据噪声设置产生变化。
Performance
一个具有3种变体的纹理集群(Texture Cluster)将会采样3倍于同一着色器的非集群版本,并从3倍的纹理中采样。当与像Triplanar Texturing(也是3倍)和Distance Resample(2倍)这样的事物结合时,这可能会消耗更多的计算资源。然而,在MicroSplat中有许多工具可以帮助管理这个问题。你可以使用一个2种变体的集群,在许多情况下仍然可以获得高质量的集群。或者,将混合质量从Best改为Balanced或Fastest,可以大幅度减少采样次数。
可以这么说,为了得到最终的视觉效果,计算机需要从3种不同的纹理中取样,这就像是在3本不同的书中查找信息。这个过程需要消耗更多的计算资源,就像你需要花更多的时间在3本书中查找信息一样。我们可以选择只使用2种纹理,或者改变混合质量以减少采样次数。这就像是选择只在2本书中查找信息,或者改变我们查找信息的方式以提高效率。
质量 | 基于(次采样) | Texture Cluster 3 | Distance Resample | Triplanar | 总计(次采样) |
---|---|---|---|---|---|
最好 | 8 | *3 | *2 | *3 | 144 |
平衡 | 6 | *3 | *2 | *3 | 108 |
最快 | 4 | *3 | *2 | *3 | 72 |
最好 | 8 | *3 | 禁用 | *3 | 72 |
平衡 | 6 | *3 | 禁用 | *3 | 54 |
最快 | 4 | *3 | 禁用 | *3 | 36 |
最好 | 8 | *3 | 禁用 | 禁用 | 24 |
平衡 | 6 | *3 | 禁用 | 禁用 | 18 |
最快 | 4 | *3 | 禁用 | 禁用 | 12 |
在高样本数量下,大多数着色器会受到带宽的限制,特别是当这些样本都来自不同的纹理或纹理的不同区域时。然而,如果带宽是瓶颈,纹理集群实际上可以帮助解决这个问题。
想象一下,我们设计我们的地形使用大纹理,比如2k纹理。由于它们的分辨率很高,我们可以将它们拉伸覆盖更大的区域,这有助于减少平铺伪像。但是在这个大小下,GPU必须访问大量的显存来绘制整个纹理。
使用纹理集群,我们可以从多个混合在一起的纹理创建一个表面,这个表面不会平铺,因为它在几个纹理之间不断变化。所以我们可以用3个1k纹理而不是1个2k纹理来创建这个表面,并覆盖更大的区域,而不会产生平铺伪像!这实际上减少了我们需要采样的总显存,从而减少了总带宽。
随机模式(Stochastic Mode)对每个像素需要3个样本,所以它的样本成本类似于一个3层纹理集群(但没有所有额外的显存)。
结束
上一篇 :MicroSplat系列翻译:核心篇
下一篇 :MicroSplat系列翻译【二】:曲面细分(Tessellation Module)