您想找什么?
Engine & platform

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

ERLAND KÖRNER / UNITY TECHNOLOGIESSenior Technical Artist
Feb 18, 2015|8 Min
使用基于物理的着色:实用方法
为方便起见,此网页已进行机器翻译。我们无法保证翻译内容的准确性或可靠性。如果您对翻译内容的准确性有疑问,请参阅此网页的官方英文版本。

在开发 Unity 5 的整个过程中,我们在内部使用维京村项目作为着色和照明工作流程的测试平台。

如果您正在使用 Unity 5 测试版,可以从资产商店下载 "维京村 "软件包,了解如何在 Unity 5 中组装和点亮场景。我们还将在下文介绍我们的一些经验教训。

创建模板环境

为了确保您的贴图和着色器配置运行正常,我们建议您使用一个简单的场景,并设置多种照明。这可能意味着不同的天空盒、灯光等--任何有助于照亮模型的东西。

打开 Unity 5 后,你会发现任何新的空场景都有一个程序化天空以及默认的环境和反射设置。这提供了一个合适的起点。

lightcond5fr640x480loop

在模板环境中,我们使用了

  • HDR 摄像机渲染
  • 一些散射反射探头(用于物体的局部反射)
  • 一组探照灯
  • 一套 HDR 天空纹理和材质,以及程序天空。 本项目中的天空是由《荷兰天空 360》的作者 Bob Groothuis 为 Unity 定制的。
  • 具有匹配强度和 HDR 天空色彩的米白色定向灯

调整天空纹理全景图

大多数天空纹理都包含太阳(以及耀斑等),因此太阳光会被表面反射。这有可能导致三个问题:

1) 用来表示太阳的定向光必须与天空盒上绘制的太阳方向完全一致,否则材质上会出现多个镜面热点。

2) 反射的太阳和镜面热点重叠,产生强烈的镜面高光。

3) 当表面处于阴影中时,烘焙的阳光反射不会被遮挡,而在黑暗中则会变得过于闪亮。

image11
从天空纹理中抹去太阳,然后使用定向光和镜头耀斑重新添加。

因此,需要从天空纹理中编辑出太阳高光、耀斑、太阳光线和 HDR 值,然后使用定向光重新应用。

制作基于物理的阴影材料


标准着色器支持镜面色彩和金属效果工作流程。它们都定义了反射留下的颜色
表面。在 "镜面 "工作流程中,颜色是直接指定的,而在 "金属 "工作流程中,颜色是由 "标准着色器 "控件中设置的漫反射颜色和 "金属 "值组合而成的。

在维京村项目中,我们使用了标准着色器的镜面色彩工作流程。您可以从资产商店下载我们的校准场景,其中包括一些方便的校准图表。我们经常参考这些图表,因为
设计我们的材料。

在处理材质时,您可以选择我们所说的镜面工作流程和金属工作流程,每种流程都有自己的数值集和参考图。在 "镜面 "工作流程中,您可以直接选择镜面反射光的颜色;在 "金属 "工作流程中,您可以选择材料在光照下是否表现得像金属。

镜面反射值图
UnitySpecularChart
金属价值表
UnityMetallicChart

选择 "镜面 "工作流程还是 "金属 "工作流程主要取决于个人喜好,无论选择哪种工作流程,通常都能获得相同的效果。

除了图表和数值,收集真实世界的表面样本也非常有价值。找到你要模仿的表面类型,并尝试了解它对光线的反应,会对你有很大帮助。

设置材料

刚开始使用时,使用校准图中的颜色、数值和滑块创建一个简单但可调整的材质表示通常很有用。然后,您就可以应用纹理,同时保留原始材料作为参考,以确认特征得到保留。

materialcompare_refl.1
上排:无纹理下排:纹理从左到右岩石、木头、骨头、金属
制作纹理的传统方法

维京村的纹理是通过传统手工方法(照片+调整)以及Quixel 提供的扫描漫反射/反照率、镜面反射、光泽度和法线贴图图像制作的。

在材质的纹理通道中添加细节时要小心。例如,通常应避免在纹理中放置照明(环境光遮蔽、阴影等):请记住,基于物理的渲染方法提供了您所需的所有照明。

当然,修饰照片比使用扫描数据要求更高,特别是在 PBS 值友好方面。有一些工具可以提供帮助,使这一过程变得更容易,例如Quixel SuiteAllegorithmic Substance Painter

扫描数据

经过 PBS 校准的扫描纹理可以减少编辑的需要,因为数据已经分成多个通道,并包含反照率、镜面反射和平滑度的值。最好是在提供 PBS 校准数据的软件中包含用于导出的 Unity 配置文件。如果需要使用 Photoshop 或相关工具校准数值,您可以随时使用参考图表作为正确性检查和指导。

材料实例

维京村场景》具有大量的内容,同时努力保持合理的纹理内存消耗。让我们以 10 米高的木制起重机为例,看看我们是如何安装的。

请注意,许多纹理(尤其是镜面纹理和漫反射纹理)是同质的,需要不同的分辨率。

image10
示例 1:起重机对象有 2 种材料:2 种漫反射纹理、1 种镜面平滑纹理、2 种闭塞纹理和 2 种细节纹理。
image06
例 2:盾牌道具有 1 种材料:1 个漫反射纹理、1 个镜面光滑纹理、1 个闭塞纹理,无细节纹理。
Screen-Shot-2015-02-17-at-17.12.23
左边的是两种材料的起重机检查员。最右边的是盾牌道具材料。

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

vv-albedo-texture
绘制的仙鹤漫反射地图片段,颜色和强度为纯木。包含适量的细节。右图:具有更高(ppi)独特细节的屏蔽漫反射纹理。
image09
起重机材料的漫射值(无纹理

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

image07
起重机木材的镜面值。
Screen-Shot-2015-02-17-at-17.40.23
起重机金属镜面贴图(未使用金属着色器)。对屏蔽镜面纹理

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

image05
起重机木材的平滑度值。无需纹理!
Screen-Shot-2015-02-17-at-17.51.13
起重机金属平滑度贴图(未使用金属着色器)。对Shield Smoothness Map with mixed metal and wood surfaces.Crane Smoothness Map for metal(未使用金属着色器)。对混合金属和木材表面的屏蔽光滑度图。

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


如果游戏使用 SSAO 和/或光照映射环境光遮蔽,能突出深层裂缝和褶皱的环境光遮蔽贴图可能是最佳选择。

image01
1 光线映射 AO,2:闭塞纹理,3:弥漫性闭塞,4:图像效果 SSAO

辅助纹理和分辨率


辅助纹理可用于增加细节或在材质中提供变化。可以使用 "细节屏蔽 "属性对它们进行屏蔽。

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

image20
辅助反照率和法线图补偿了低分辨率的主漫反射和法线图。这两种纹理通过广泛 "叠加 "和铺设在整个村庄的木质表面,减少了整体纹理记忆。在为漫反射细节图提供照明信息时要谨慎,因为这与在主漫反射中添加此类信息的效果类似。
image16
带(左)和不带(右)辅助纹理贴图的起重机木质表面。

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

致谢


维京村项目是与Quixel 创意团队合作推出的,Quixel 是 HDR 表面捕捉技术和 Quixel Megascans PBS 就绪纹理库的开发商。

非常感谢才华横溢的 Emmanuel "Manu" Tavares 和 Plamen "Paco" Tamnev 将这一场景变为现实。

资产商店下载项目。请注意,它已针对 Unity 5.0.0 RC2 进行了优化。