Notifications
Article
Unity中的程序化随机纹理制作功能
Published 6 months ago
358
0
你是否尝试过使用可平铺纹理覆盖大型表面,或者为网格添加精致细节?那么你一定发现使用较大平铺值会生成明显重复图案的问题。Unity Labs开发了一种新的纹理制作技术,它会避免此类问题的发生,这种技术称为程序化随机纹理制作(Procedural Stochastic Texturing)。
可平铺纹理是为3D场景添加细节的实用工具,但是使用可平铺纹理和细节贴图,为大型区域制作纹理或实现高度精细的表面时,平铺图案会重复明显而不自然。
通常减少重复图案要使用较大的纹理,或使用额外对象来隐藏明显的重复图案。本文中,我们会提供一个插件解决该问题,给纹理提供随机的外表效果,例如:生锈、长苔或损耗等效果。
下载插件:
https://github.com/UnityLabs/procedural-stochastic-texturing
如下图所示,左图是具有规则纹理的生锈金属材质,右图是使用新技术实现的效果,可以对比出右侧的效果更为自然而真实。
只要提供输入纹理,该插件就会程序化生成符合与输入外观匹配的无限纹理。
我们通过利用最先进的纹理混合函数来实现这种功能。该函数会处理输入纹理的修改版本,每个片段只需要三个纹理样本,并通过获取小型查找表来完成。
由于该插件避免了平铺,它可以使用较小纹理和较高等级的细节覆盖大型表面,而且不会出现任何重复的瑕疵。

使用StandardStochastic着色器

该插件提供了标准着色器的变体,它包含在Unity资源包中。当导入该资源包后,为材质选择StandardStochastic着色器。
StandardStochastic着色器的界面和标准着色器界面一样,在顶部添加了二个新控件,对应着二个必需的设置步骤:
  • Stochastic Inputs(随机输入)菜单允许你指定对哪个输入纹理使用我们的技术,你可以设为任何对象或者具体纹理,例如:反照率贴图和法线贴图。
  • Apply按钮会为所选随机输入预先计算数据,更新材质,然后完成过程。对于每个输入纹理,该步骤都会在相同文件夹生成二个中间纹理。

补充说明

因为发现已有中间纹理时,插件会加载这些中间纹理并跳过生成过程,所以对原始纹理做修改时,需要在按下Apply按钮前删除已有的中间纹理,从而使它们重新生成。
当切换Standard着色器和StandardStochastic着色器时,参数会随着切换而传递。StandardStochastic(Specular镜面设置)着色器也为使用Specular工作流程的材质而提供。
下面的展示了使用小型(256²)输入纹理处理不同材质的原型制作效果。

限制

该技术仅兼容可平铺的随机纹理和几乎随机的纹理,例如:从远处观察时类似随机噪声的纹理,它们通常是没有精确几何形状的自然外观材质。

参考信息

你是否对插件的工作原理感兴趣?请查看阅读最近发表的二个相关研究论文,它们是创作这个插件的构建基础。
  1. 由Eric Heitz和Fabrice Neyret发表于HPG 2018大会的论文《High-Performance By-Example Noise using a Histogram-Preserving Blending Operator》https://eheitzresearch.wordpress.com/722-2/
  2. 由Thomas Deliot和Eric Heitz发表于GPU Zen 2在技术文章《Procedural Stochastic Textures by Tiling and Blending》https://eheitzresearch.wordpress.com/738-2/

反馈

本文中的插件是一个研究原型,它并未进入稳定的开发阶段,暂时无法保证此后对它进行长期维护或支持,但是你可以在Unity官方论坛进行讨论和提供反馈,以便我们确定后续的开发计划。
我们目前正在开发自定义着色器的ShaderGraph实现,以及新渲染管线的兼容性。请在Unity官方论坛讨论转帖获取更新信息。
Procedural Stochastic Texturing 讨论贴:
https://forum.unity.com/threads/procedural-stochastic-texturing-prototype.628522/
更多Unity新功能介绍,尽在Unity官方中文论坛(UnityChina.cn) !
Unity China
644
Comments