使用基于物理的着色:实用方法

在开发 Unity 5 的整个过程中,我们在内部使用维京村项目作为着色和照明工作流程的测试平台。
如果您正在使用 Unity 5 测试版,可以从资产商店下载 "维京村 "软件包,了解如何在 Unity 5 中组装和点亮场景。我们还将在下文介绍我们的一些经验教训。
为了确保您的贴图和着色器配置运行正常,我们建议您使用一个简单的场景,并设置多种照明。这可能意味着不同的天空盒、灯光等--任何有助于照亮模型的东西。
打开 Unity 5 后,你会发现任何新的空场景都有一个程序化天空以及默认的环境和反射设置。这提供了一个合适的起点。

在模板环境中,我们使用了
- HDR 摄像机渲染
- 一些散射反射探头(用于物体的局部反射)
- 一组探照灯
- 一套 HDR 天空纹理和材质,以及程序天空。 本项目中的天空是由《荷兰天空 360》的作者 Bob Groothuis 为 Unity 定制的。
- 具有匹配强度和 HDR 天空色彩的米白色定向灯
调整天空纹理全景图
大多数天空纹理都包含太阳(以及耀斑等),因此太阳光会被表面反射。这有可能导致三个问题:
1) 用来表示太阳的定向光必须与天空盒上绘制的太阳方向完全一致,否则材质上会出现多个镜面热点。
2) 反射的太阳和镜面热点重叠,产生强烈的镜面高光。
3) 当表面处于阴影中时,烘焙的阳光反射不会被遮挡,而在黑暗中则会变得过于闪亮。

因此,需要从天空纹理中编辑出太阳高光、耀斑、太阳光线和 HDR 值,然后使用定向光重新应用。
制作基于物理的阴影材料
标准着色器支持镜面色彩和金属效果工作流程。它们都定义了反射留下的颜色
表面。在 "镜面 "工作流程中,颜色是直接指定的,而在 "金属 "工作流程中,颜色是由 "标准着色器 "控件中设置的漫反射颜色和 "金属 "值组合而成的。
在维京村项目中,我们使用了标准着色器的镜面色彩工作流程。您可以从资产商店下载我们的校准场景,其中包括一些方便的校准图表。我们经常参考这些图表,因为
设计我们的材料。
在处理材质时,您可以选择我们所说的镜面工作流程和金属工作流程,每种流程都有自己的数值集和参考图。在 "镜面 "工作流程中,您可以直接选择镜面反射光的颜色;在 "金属 "工作流程中,您可以选择材料在光照下是否表现得像金属。


选择 "镜面 "工作流程还是 "金属 "工作流程主要取决于个人喜好,无论选择哪种工作流程,通常都能获得相同的效果。
除了图表和数值,收集真实世界的表面样本也非常有价值。找到你要模仿的表面类型,并尝试了解它对光线的反应,会对你有很大帮助。
设置材料
刚开始使用时,使用校准图中的颜色、数值和滑块创建一个简单但可调整的材质表示通常很有用。然后,您就可以应用纹理,同时保留原始材料作为参考,以确认特征得到保留。

维京村的纹理是通过传统手工方法(照片+调整)以及Quixel 提供的扫描漫反射/反照率、镜面反射、光泽度和法线贴图图像制作的。
在材质的纹理通道中添加细节时要小心。例如,通常应避免在纹理中放置照明(环境光遮蔽、阴影等):请记住,基于物理的渲染方法提供了您所需的所有照明。
当然,修饰照片比使用扫描数据要求更高,特别是在 PBS 值友好方面。有一些工具可以提供帮助,使这一过程变得更容易,例如Quixel Suite和Allegorithmic Substance Painter。
扫描数据
经过 PBS 校准的扫描纹理可以减少编辑的需要,因为数据已经分成多个通道,并包含反照率、镜面反射和平滑度的值。最好是在提供 PBS 校准数据的软件中包含用于导出的 Unity 配置文件。如果需要使用 Photoshop 或相关工具校准数值,您可以随时使用参考图表作为正确性检查和指导。
材料实例
维京村场景》具有大量的内容,同时努力保持合理的纹理内存消耗。让我们以 10 米高的木制起重机为例,看看我们是如何安装的。
请注意,许多纹理(尤其是镜面纹理和漫反射纹理)是同质的,需要不同的分辨率。



- 反照率纹理在镜面反射工作流程中,它表示从表面反射的漫反射光的颜色。如左图(起重机)所示,它不一定需要非常细致,而右图(盾牌)的纹理则包含了大量独特的细节。


- 镜面非金属(绝缘体)相对较暗,呈灰度,而金属值较亮,可以着色(请记住,金属上的锈、油和污垢不属于金属)。木质表面的镜面效果并没有从镜面纹理中广泛受益,因此使用了一个值而不是输入贴图。


- 光滑度是 PBS 材料的关键因素。它能使表面产生变化、瑕疵和细节,有助于表现其状态和年代。对于起重机来说,整个表面的光滑度是相当恒定的,因此用一个值来代替。这样可以获得合理的纹理内存增益。


- 遮挡表示表面不同点对周围环境光线的暴露程度。环境光遮蔽可通过弱化间接光照较弱区域的环境光和反射,突出表面细节和深度。请记住,您还可以在场景中使用 SSAO(屏幕空间环境遮蔽)。使用 SSAO 和 AO 可能会导致某些区域出现双重变暗,在这种情况下,您可能需要考虑将 AO 贴图视为空腔贴图。
如果游戏使用 SSAO 和/或光照映射环境光遮蔽,能突出深层裂缝和褶皱的环境光遮蔽贴图可能是最佳选择。

辅助纹理和分辨率
辅助纹理可用于增加细节或在材质中提供变化。可以使用 "细节屏蔽 "属性对它们进行屏蔽。
由于 "起重机 "示例中的主漫反射木材纹理分辨率较低,因此辅助纹理集至关重要。它为最终表面增添了精致的细节。在这种情况下,细节图是平铺的,分辨率相当低。它们在许多其他木质表面上重复出现,从而大大节省了纹理记忆。


这些工作流程无疑为我们设计维京村项目提供了帮助。我们希望您也能找到有用的信息,并期待阅读您的评论!