PBR 贴图制作准则

Metal / Roughness Workflow 总结

纯金属 (Metallic > 235)

  • BaseColor上的值是金属的反射值,应当有 70-100%,或者说 180-255 sRGB
  • 如果你得到某个金属素材,发现它的Base Color很黑,它可能是Specular/Glossiness工作流
    hexo

    介电质/绝缘体:

  • BaseColor暗部不应低于30-50 sRGB, 亮部不应高于 240 sRGB

符合PBR规则可以使素材在任何光照条件下都有合理的表现

  • 注意,不等于不符合规则的贴图一定看起来不好(在特定光照下有可能看起也合理)

根据以上原则,制作一个批量排查工具

Substance Painter 用PBR检查工具: PBR Validate

Substance Disigner 可以使用 PBR Metal/Roughness Validate Node
位置在Material Filters > PBR Utilities

Source: Practical Guidelines For Creating PBR Textures
官方中文版:创建PBR纹理实用指南

Metal / Roughness Workflow

Dielectric (介电质/绝缘体) F0

普通绝缘体的 F0 通常设置为 0.04 (linear) 4% 反射。在金属度/粗糙度工作流中,该数值是hardcode在Shader中的。
某些金/粗实现中,比如 Substance toolsetUnreal Engine 4,提供了Specular控制,使美术可以对绝缘体的 F0 常量进行改变。在Substance中,该输出被标记为 “specularLevel” 并且由一个 texture sampler 提供给shader。如下图,它提供了0.0-0.08的范围。该范围在shader中被映射到0.0~1.0,其中 0.5 对应 4% 反射率。

基础色 Base Color (RGB - sRGB)

Base Color是一张RGB贴图,可以有两种信息:

  • 绝缘体的漫反射颜色(diffuse reflected color)
  • 金属反射值

颜色代表了绝缘体反射的波长,而当一块区域是金属时,金属反射值生效

制作准则

基础色(Base Color)可以被想成一张在色调上很”平”的图。就是说,它的对比度比传统diffuse贴图要低。在这张图上不建议出现过亮或过暗的地方。物体在色调上会比我们通常印象中的要更明亮。

就亮度范围来说,我们基本上指绝缘体。在下图中,你可以看到脏迹的数值低于正确亮度范围。对暗部来说,不应低于30-50 sRGB。暗部数值宽松的说应该大于30,严格地说大于50。对亮部来说,不应高于 240 sRGB

我们说过base color包含绝缘体表面反射光的信息,所以它不应包含像AO这样的光照信息。可以有一些例外,比如细微的遮蔽(当shader无法仅仅通过ao来体现这一精度的细节时),如下图。

金属的反射值应当从现实测量数值中获取。这些数值应当在 70-100% specular左右,对应sRGB范围在 180-255

Sébastien Lagarde的图表是个很好的资源(DONTNOD Physically based rendering chart for Unreal Engine 4](https://seblagarde.wordpress.com/2014/04/14/dontnod-physically-based-rendering-chart-for-unreal-engine-4/))

金属的反射值应当从现实测量数值中获取

  • 颜色代表非金属材质的Albedo,与金属材质的反射值
  • 基础色(Base color)应该避免包含光照信息,除了微遮蔽(micro-occlusion)
  • 暗部应该不低于 30 sRGB(宽松下限) 到 50 sRGB(严格下限)
  • 亮部不应高于240 sRGB
  • 纯金属的反射很高,在70%-100%,对应 180-255 SRGB

在接下来的金属段落中你会读到,基础色(base color)包含了金属反射值,如果尘土或锈迹被加在基础色上。会导致该处的金属反射值降低到不可被认定是纯金属的范围。

金属度贴图(Metallic map)必须考虑尘土和锈迹的情况,这些地方的金属度必须降低以体现这些地方不再被认定为是纯金属。在下图中你可以看到在金属度贴图中锈蚀的地方被当作绝缘体设置成黑色。尘土的地方也设置成了灰色。所以考虑到比如尘土的这种情况,金属度贴图并不总是非黑即白的0/1贴图。

金属度贴图类似于一张mask,它告诉shader如何处理基础色(base color)中的信息

金属度 Metallic (Grayscale - Linear)

金属贴图用于定义哪些区域是纯金属。作为一张灰度图,它的作用类似于一张mask,告知shader如何处理基础色(base color)中的信息。

金属度贴图中的信息并不直接包含真实世界中的信息。它只是告知shader,基础色的哪些区域应当被作为漫反射颜色(绝缘体),哪些区域应当被当作金属反射值。在金属度贴图中,0.0 (black – 0 sRGB) 表示非金属,而 1.0 (white – 255 sRGB) 代表纯金属。在实际操作中,当shader发现金属度贴图上的值是白色,它就将Base color贴图上相应的部分当作金属反射值来使用。

制作准则

金属表面有两个与贴图相关的方面:

  • 第一,它们的反射值很高,在 70%-100% 范围;
  • 第二,有些金属可以生锈。
    我们讨论制作准则时会分别检视这两个方面。
纯金属

大致上,我们定义金属度贴图上灰度值 235-255 的范围为纯金属,在这一区间的金属需要它的Base color有 70-100% 的反射值,或者说 180-255 sRGB。如下图。再次说明,这些数值来源于真实世界的测量数据。

锈蚀或绝缘体

当你制作一个表面时,需要考虑该金属的氧化情况,或者其它环境因素如尘土及污垢。当一个喷漆的金属某些部分被刮坏或者掉漆了的时候,暴露的金属是纯金属(金属度贴图中为白色),喷漆表面是绝缘层(金属度贴图中为黑色),如下图。

金属度贴图可以体现金属及非金属之间的过渡状态(灰度)。如果金属度低于 235 sRGB 的时候你需要降低base color上的反射值。想想一个部分盖住金属的尘土层,如下图。尘土是绝缘体,如果你保留纯白的金属度,shader会将这些尘土在base color上的值用作金属的反射值。尘土的颜色远低于光滑金属所需要的70%-100%范围。通过降低尘土区域的金属度,你才能制作出合适的介于绝缘体和金属反射值之间的过渡。

在Substance Designer中可以使用Material Color Blend节点制作尘土效果。

粗糙度 Roughness (Grayscale - Linear)

粗糙度贴图描述物体因为表面不规则导致的光线散射,反射的方向是随机的。这改变了光的方向,但是光的总体强度是保持不变的。粗糙的表面有面积更大、更暗的高光。光滑的表面会使高光反射保持聚集,看起来更亮更强,虽然总体反光量是相同的。

粗糙度贴图是最具创作性的贴图,它允许美术在视觉上定义一个表面的特征。使我们可以创造性的讲述这个表面的情况。它的环境是怎样的?它被好好珍藏还是粗暴对待?它曾被暴露在某些情况下吗?一个物体表面的情况可以告诉我们很多关于它所在的环境的故事,并因此与我们想要设计的这个物体,以及想要创造的整体世界相联系起来。

制作准则

保持创造性,讲述一个关于该表面的故事。

分享