Unity 中的程序化随机纹理制作

THOMAS DELIOT / UNITY TECHNOLOGIESContributor
Feb 14, 2019|3 Min
Unity 中的程序化随机纹理制作
为方便起见,此网页已进行机器翻译。我们无法保证翻译内容的准确性或可靠性。如果您对翻译内容的准确性有疑问,请参阅此网页的官方英文版本。

您是否尝试过使用可平铺纹理来覆盖大面积表面或为网格添加精细细节?如果是这样,您可能已经熟悉了随着平铺值的增加而迅速出现的可见重复模式。在 Unity 实验室,我们开发了一种新的纹理技术来避免这一问题,即程序化随机纹理技术。

可拼贴纹理是为 3D 场景添加细节的有用工具。但是,当您想使用可平铺纹理和细节贴图为大面积区域制作纹理或实现高度精细的表面时,平铺模式就会显现出来。下图左侧展示了这种效果。通常情况下,要减少重复模式,就需要更大的纹理或用额外的物体来隐藏可见的重复。在这篇博文中,我们提供了一个插件,用于解决具有随机外观的纹理(如铁锈、苔藓、树皮等)的这一问题。其影响如下图右侧所示。

可覆盖大面积的瓷砖纹理图像

在此下载插件。

给定输入纹理后,插件将程序化地生成与输入纹理外观相匹配的无限纹理。为此,我们利用了最先进的纹理混合功能,该功能对输入纹理的修改版进行操作,每个片段只需三个纹理样本,并获取一个小型查找表。由于该插件无需平铺,因此可以用较小的纹理和较高的细节级别覆盖较大的表面,而不会产生任何重复效果。

使用标准拟态着色器

该插件提供了标准着色器的一种变体,标准着色器包含在 Unity 软件包中。导入软件包后,为材质选择 StandardStochastic 着色器。界面与标准着色器相同,只是在顶部增加了两个新控件,分别对应两个必要的设置步骤:

图片显示顶部增加了两个新控件
图片显示输入改进

随机输入"菜单允许您指定在哪些输入纹理上启用我们的技术(可设置为所有纹理或特定纹理, 例如反照率和/或法线贴图)。

应用"按钮可预先计算所选随机输入的数据并更新材料,从而完成整个过程。对于每个输入纹理,该步骤会生成位于同一文件夹中的两个中间纹理。

再补充几句:

  • 由于现有的中间纹理会在发现它们跳过生成时间时加载,因此对原始纹理进行任何修改都需要先删除它们,然后再点击 "应用 "按钮强制它们再生。
  • 在 "标准 "着色器和 "标准拟态 "着色器之间切换时,参数会来回传输。
  • 此外,还为使用镜面反射工作流程的材质提供了标准镜面反射(镜面设置)着色器。

下面的示例展示了原型在使用小尺寸(256²)输入纹理时与不同材料的配合情况。

着色器示例
着色器示例
着色器示例
局限性

这种技术仅适用于可拼贴的随机和近似随机纹理,例如从远处看类似随机噪声的纹理,以及典型的没有精确几何形状的自然纹理。

纹理示例
反馈意见

这只是一个研究原型,并没有进行积极的开发。因此,我们不保证提供维护或支持,但请随时在此 Unity 论坛主题上提出任何问题和反馈意见。我们目前正在开发 ShaderGraph 实现,以实现自定义着色器和与新渲染管道的兼容性。请关注论坛主题的更新!

扩展阅读

对插件的工作原理感到好奇吗?请查看我们最近发表的两篇相关研究论文,我们的插件就是以这些论文为基础的:

随插件一起提供的代码中包含对技术章节中特定部分的注释。