【Substance2018版】官方PBR指南翻译/规范整理

天鸿

2022-06-243507次浏览

0评论

22收藏

5点赞

分享

Substance官方提供了一个非常好的PBR指南。首先2017的版本网上已经有翻译了,然后这次翻译2018的版本, 重新整理为Markdown。因为官方不知道哪天会出中文版, 所以本文后面部分也可以直接看官方 Vol1 Vol2 ,但本文有大量的总结。

文章篇幅很长, 这里抽取里面规范的部分整理出来:

1.第一部分, 官方指南里的规范整理部分/应用经验——每个只保留一句话, 好记。

2.第二部分, 再展开一点点注意事项, 每个几句话。

3.第三部分, 官方文档的翻译Vol2, Vol1

1.整个规范整理如果只有一句话

  • 用Substance Painter/Designer的标准材质来制作PBR贴图, 不要自己画

  • 用Substance Painter/Designer的标准材质来制作PBR贴图, 不要自己画; 让TA做标准材质; 发给外包

  • 用Substance Painter/Designer的标准材质来制作PBR贴图, 不要自己画; 使用标准场景测试(看下面)

    天上飘来3个字--"用~标~准~材~质"

2.Substance的注意事项——每个只保留一句话, 好记

  • PBR是一个物理模型, 不是手绘模型, 给出合理的输入, 才会有合理的输出。不要把颜色搞成灰色的, 调一下就当Metallic, 再调一下当Roughness, 虽然看上去也有那么回事,但是就别想得到最好的效果了。

  • BaseColor应该是中灰的; 数值应该是50 ~ 240的sRGB

  • BaseColor在金属和非金属的时候意义不一样; 金属是反射率; 非金属是漫反射颜色;

  • BaseColor的亮度, 非金属部分基本上应该在127(sRGB 187附近)附近为峰值服从正态分布, 然后金属部分集中到240左右的附近的分布; 看下面详细论述

  • Metallic控制是否为金属,氧化, 生锈, 油漆之后, 都应该认为是非金属,直接Metallic非黑即白不失为好的指导思想。

  • BaseColor/Metallic不同情况的数值

  • BaseColor一般存储为sRGB贴图, 即就是PS里面画出来的; 而Normal,Metallic, Roughness, AO等其它都经常使用线性贴图, 所以最好用Substance制作, 不然这个变换就要解释半天.

  • Roughness: 对比Metallic和BaseColor在现实世界中都有一一对应关系, 粗糙度是很主观可以自己调节的
    一个石头, 一个金属, 拿个砂纸磨一磨看上去可能完全不一样了

  • Normal , 请正确用高模烘焙; 手绘NormalMap这种事情, 最好没事不要做

  • AO, 应该用Substance的工具生成AO, 用Bake工具也行, 用Designer里面的节点也行, 用sbsbaker自动化命令行工具也行. 这个时候又会遇到直接把颜色调一下当AO的情况, 别.

  • Diffuse/Specular/Glossiness的模型一般不采用, 所以原则看下面展开叙述的部分

  • 推荐看Vol2最下面的图表部分, 可以看到直观的图表; 发现Unity的图表更直观, 这里也一并附上。

3.Unity官方校正表——对比参考

注意Unity的规范和Substance的在值的范围上略有不同, 但是原则上是一致的。

Roughness-Metallic矩阵:

Metallic/Roughness流的校正表:

Specular/Glossiness的较正表:

4.Unreal的PBR表:

5.BaseColor中灰, 专门列出讨论

我们项目在使用PBR的时候, 曾经有一段时间经常出现物体亮度无法匹配的问题.BaseColor的亮度, 非金属基本上应该服从正态分布, 然后金属部分集中到240左右的附近的分布。下面是官方的材质还有我们自己PBR做的比较好的贴图, 发现基本是在中灰附近正态分布的。

检查BaseColor是否合法的方法除了使用官方的PBR Utilities之外, 可以手工做:PS打开贴图, 改成图像>模式, LAB模式; 窗口打开直方图,然后在通道里面点明度(L)通道, 就可以看到明度分布了;

这个和官方指南里面的BaseColor的指导是一致的: BaseColor图可以认为是色调有点平坦. 也就是说, 它的对比度应该低于传统的漫反射贴图. 具有太亮或太暗的值是不可取的。另外, 推荐使用Paragon的那种测试场景来验证. 这个在我们公司的复数项目得到非常好的实践; 看下面:

6.Paragon使用标准场景来保证PBR材质的效果, 也是68的经验

可以看视频:

Paragon Character Texturing Pipeline | Unreal Dev Day Montreal 2017 | Unreal Engine

  • 核心就是做一个标准场景, 做标准灯光, 标准BRDF(PBR), 标准ToneMapping(ACES), 把东西放进去比较得到你想要的效果。

  • 在Painter自定义Shader以对齐ACES。

  • Paragon分享说注意标准场景是一切的基础, 出了问题先整标准场景里面的材质, 然后如果再出问题, 就是场景的问题. 我们问题是一步一步解决的, 基础正确, 然后逐步上升, 而不是削足适履。

7.展开叙述注意事项--这个是官方指南的Vol2核心内容的抽取

  • 最严重的问题PBR是一个物理模型, 不是手绘模型, 给出合理的输入, 才会有合理的输出。没有按照PBR规范制作各个通道的贴图, 导致各种Tweak/Trick参数的出现, 导致整个画面总有一些不和谐的亮度和暗部, 什么后处理都救不回来。再次重申: 不要把颜色搞成灰色的, 调一下就当Metallic, 再调一下当Roughness, 还有手绘Normal.真是让人要(╯ ̄Д ̄)╯╘═╛ 的

  • BaseColor应该是中灰的
    1.对于黑暗值, 你不应该**低于30-50 sRGB. **
    2.暗数值的范围可以放宽到30 sRGB, 严格一些则应该在50 sRGB以上.
    3.对于明亮的颜色, 您不应该有高于240 sRGB的任何值(图23).
    4.使用微遮挡(micro-occlusion)的Shader模型情况下(如表现海边多孔石头的边沿), 可以使用更高的180-255的数值
    5.金属原料的反射率会很高, 所以可以使用180-255
    PS: 所谓的sRGB你可以认为就是PS上看上去的贴图的颜色; 而不是线性空间的颜色
    煤炭可能是很黑的, 但是并不是完全没有光的, 如果你把BaseColor设得太低, 则即使阳光直射到它表面都不会获得实际世界里面得亮度
    同理新雪可能很白, 但是并不是不会吸收光能的, 如果你把BaseColor设太高, 则会抢场景其它地方的亮度导致后处理都无法正常调和光照
    PBR的物理模型会帮你处理好最终的光照, 你按照实际标准材质的规范输入数值即可
    最稳妥的做法是使用Substance里面的现成节点来绘制/连线得到贴图

  • BaseColor在金属和非金属的时候意义不一样
    在PBR模型里面, 可以认为Metallic是0的时候, BaseColor的颜色是绝缘体, 认为有F0为0.04的反射率 (菲尼尔系数)。绝缘体颜色的物理意义就是漫反射Diffuse的颜色;
    而Metallic是1的时候, BaseColor是导体的F0系数,这个不是高光颜色也不是任何别的东西, 所以如果要金属反射正确, 最好使用Substance的固有金属节点来制作。

  • Metallic图以类似于蒙版的方式操作, 因为它告诉着色器如何解释在BaseColor中找到的数据。金属部分就是金属部分; 一旦蒙尘就应该理解为非金属(绝缘体)或者半导体, 使用非金属的准则。一旦叠加蒙尘和划痕, BaseColor和Metallic和Roughness可能都是要改的; BaseColor就需要从表示金属反射率的240以上, 调节到表示非金属的中灰。

  • Diffuse贴图的原则

    • 颜色代表非金属材料的反照率和纯金属的黑色(0.0).

    • 除了微遮挡外, 应该没有照明信息.

    • 黑色值不应低于30 sRGB(容许范围)或50 sRGB(严格范围), 除非纯金属为黑色.

    • 亮度值不应高于240 sRGB

  • Diffuse贴图和BaseColor的比较

在Metallic/Roughness模型下面, BaseColor同时存了金属和非金属2者的东西, 通过Metallic分开处理
而Specular/Glossiness模型下面, 非金属都在Diffuse里面, 金属都在Specular里面

  • Specular贴图包含金属和非金属的F0值; 所以可以精确控制

    • 绝缘体反射比Metallic少量的光. 普通绝缘体的价值将在2-5%左右. 就sRGB而言, 数值应介于sRGB 40-75之间, 它与0.02-0.05(线性)范围重叠.

    • 常见的宝石在0.05-0.17(线性)范围内.

    • 普通液体落在0.02-0.04(线性)范围内.

    • 纯金属的反射率值将在70-100%Specular范围内高, 我们可以将其映射到180-255 sRGB.

    • 如果找不到特定材料的IOR值, 则可以使用4%(0.04 - 塑料)

  • Substance允许对绝缘体的F0进行数值细致定义, 贴图输出到specularLevel的Output通道

    贴图的0-1会被映射到实际数值0-0.08

    实际测试对效果影响几乎看不到, 手游可以不处理这个通道

  • Diffuse/Specular不同情况下的数值

  • Glossiness = 1 - Roughness. 制作规范和Roughness相同; 这个可以用SD的BaseColor/Metallic/Roughness Convertor 来验证

  • 能量守恒

    从表面反射的光永远不会比它撞击表面之前更强烈

    这个由PBR保证

8.Vol.1的微表面模型理论核心抽取

  • PBR是能量守恒的, 也就是出射光能 <= 入射光能

  • 金属非金属的区别

F0反射率值对于大多数常见绝缘体而言具有最小的变化, 并且在2-5%的范围内. 金属的F0值很高, 从70-100%不等.

  • 蒙尘/划痕/污垢/油漆/风化/生锈, 这些在金属上发生的现象, 导致金属会变成半导体甚至绝缘体, 要按照非金属或者 金属/非金属 之间那样来处理

  • 计算要在线性空间处理

    BaseColor/Diffuse/Specular一般用sRGB空间来输入输出

    Metallic/Roughness/Glossiness 一般用线性空间输出

    这个Topic虽然并不算很复杂, 但是并不容易一下子理解

  • PS: 在PBR模型里面, 可以认为Metallic是0的时候, BaseColor的颜色是绝缘体, 则颜色的物理意义就是漫反射Diffuse的颜色; 而Metallic是1的时候, BaseColor是导体的F0系数, 这个不是高光颜色也不是任何别的东西, 所以如果要金属反射正确, 最好使用Substance的固有金属节点来制作。

👇推荐阅读👇

【Substance2018版】The PBR Guide Vol.1理论篇完整翻译

【Substance2018版】The PBR Guide Vol.2实践篇完整翻译

评论 0

0/1000
网易游学APP
为热爱赋能
扫描二维码下载APP