Skip to main content

文章源地址:https://marmoset.co/posts/physically-based-rendering-and-you-can-too/

目录

  • 新的标准
  • PBR FAQs
  • 贴图术语
    • 能量守恒
    • Albedo
    • 微表面
    • Reflectivity
    • Fresnel
    • Ambient Occlusion
    • Cavity
  • 找寻正确的材质数值
  • 创建贴图内容
  • 艺术家快速问答:Wojciech Klimas
  • 艺术家快速问答:Joeri Vromman
  • 引用

新的标准

随着计算能力的提升和对艺术家友好的统一需求,PBR在游戏产业中快速成为一个新的标准。PBR致力于重新定义我们怎样创建和渲染艺术。

基于物理的渲染(PBR-Physically based rendering)是指使用真实着色器和灯光模型计算表面数值,以此来精准表示真实世界材质的一种概念。

PBR不止是一套严格的计算公式,精准表述PBR系统是不容易的。然而,因为每个PBR系统都基于相同的原则:尽量精准的渲染材质,所以很多概念都可以很容易的相互转换。

不止于渲染质量,一致性也是使用测量值(measured values)的最大原因。拥有一个统一的基础材质,让每一位艺术家在创建材质的时候不是去靠猜想。从艺术角度讲也很容易让团队里的艺术家创建材质能够适用于所有的灯光环境下。

PBR FAQs

在我们开始之前,有一个很重要的点是先说明下人们对PBR的常见疑问。

1)我不知道怎样使用PBR系统,我需要重新学习怎样创建材质吗?
在大多数情况下,不需要。如果你之前有创建上一代着色器的经验,其实你早已经就有了使用PBR系统的绝大部分知识。术语是对艺术家来说最大的障碍,所以我会在下面解释关于各种贴图术语。大多数概念都非常简单而且易于理解。
如果你之前的经验大部分是关于手绘或者适用于移动游戏的材质,那么关于PBR的新技术和工作流程可能会有一些难度。然而,绝对不会比传统的法线贴图工作流程难。

2)艺术家们需要为创建的每一个材质都去拍摄一张真实照片作为参考吗?
不需要,通常情况下你的工作室会为你提供一个通用的材质参考。或者,你也可以从各个3D资源库中获取到已知的数值,比如Quixel Megascans。创建你自己的扫描材质是一个技术活,而且太耗时间,大部分情况下是没必要的。

3)如果我使用一个PBR着色器,就意味着我的作品是物理上准确的吗?
可能并不是。简单的使用PBR着色器并不意味着你的作品是物理精确的。一个PBR系统需要一个精确的灯光和着色,还需要一个经过正确校准的艺术资产。

4)我需要在PBR中使用metalness吗?
不需要,metalness贴图只是决定reflectivity的一种方式,跟specualr贴图比,或多或少不那么物理准确。

5)我需要在PBR中使用IOR贴图吗?
不需要,类似metalness贴图,IOR只是另一种定义reflectivity的方式。

6)specular贴图不再需要了吗?
不太准确。specular反射强度,或者说reflectivity仍然是PBR系统中很重要的一个参数。你或许不需要直接用一张贴图直接设定reflectivity(比如metalness工作流程),但是在PBR系统中它仍然是需要的。

7)gloss贴图代替specular贴图了吗?
不,gloss或者roughness贴图定义了材质的微表面(有多粗糙或有多光滑),并没有替代specular强度贴图。然而,如果你不使用gloss贴图,可能需要在你的specular贴图上做一些细节调整。

8)PBR系统能够用来创建风格化艺术吗?
完全可以。如果你的目标是创建一个奇幻的风格化世界,有一个精准的材质定义仍然是非常重要的。即便你要创建一个独角兽放的彩虹屁,你仍然需要这个独角兽遵从灯光或其他什么的法则。

贴图术语

那些不属于PBR系统概念的艺术家通常认为创建材质是非常困难的,这通常是因为使用的术语看上去很难。如果你使用现代的着色器创建技术,其实你早已经有了关于PBR系统的许多知识。

想要搞清楚创建什么类型或者怎样使用PBR创建你的工作内容是很让人困惑的,所以这有一些通用的术语和概念。

能量守恒

能量守恒的概念表示一个物体不能反射出比接收的还要多的光。

出于经验来说,漫射和粗糙度更强的材质通常高光也更暗和广,而更光滑和反射更强的材质能反射更亮和更集中的高光。

Albedo

Albedo就是base color,更熟悉的名字是diffuse贴图。

albedo贴图定义漫射光的颜色。PBR系统中的albedo贴图和传统的diffuse贴图最大的区别在于,albedo贴图没有方向性的灯光影响或者AO环境光遮蔽。方向性的灯光会在某些灯光情况下显示不正确,而环境光遮蔽应该单独使用。

有时候albedo贴图定义的内容要多于diffuse贴图。比如,当使用metalness贴图时,albedo贴图定义了绝缘体的diffuse颜色和金属表面的反射颜色。

微表面

微表面定义了材质的表面有多粗糙或者光滑。

在这张图中我们能看到能量守恒是如何影响材质的微表面的,粗糙的表面显示出更广但更暗的高光反射,反之亦然。

取决于你使用的渲染引擎,有时候roughness贴图也被称作gloss贴图。实际上这两种贴图有一点点小区别,roughness贴图可能是相反的映射,比如:黑色的部分表示光滑的表面,白色部分表示粗糙的表面。

Reflectivity

reflectivity是表面反射光的百分比。所有类型的reflectivity(也被称为base reflectivity或者F0),包括specular、metalness和IOR,都定义了直视时表面的反射度,而Fresnel定义了表面入射余角的反射度。

注意上面的图中,绝缘体材质的反射范围有多窄。结合能量守恒定律来看,很容易就能总结出表面的变化通常应该用微表面贴图表示,而不是reflectivity贴图。对于一个指定的材质类型来说,reflectivity倾向于保持相对固定。绝缘体中反射颜色倾向于白色,只有金属物体才有反射颜色。因此,为了使用metalness贴图,专门定义reflectivity强度和颜色的贴图可能会被舍弃。

当使用metalness贴图时,绝缘体表面(贴图中颜色为黑色部分)被指定为反射数值,而使用albedo贴图作为diffuse数值。对于金属物体(贴图中颜色为白色部分)高光颜色和强度是从albedo贴图中获取的,diffuse数值默认设为0。对于灰色部分,被视为是半金属体,从albedo贴图中获取反射数值,相应的diffuse数值会比贴图中显示的要弱一些。但是半金属体是非常罕见的。

再次强调,相对于specular贴图,metalness贴图或多或少不那么物理准确。但是它的概念是很容易理解的,而且metalness贴图可以使用灰度图表示,能节省一些资源占用。使用metalness贴图的弊端是缺失了对绝缘体表面数值的精准控制。

传统的specular贴图提供了对高光强度和颜色的更多控制,而且允许非常灵活的创建某种复杂材质。缺点是specular贴图经常使用24bit的图片存储,会占用一些内存使用。当然它也需要艺术家对物理材质属性有着很好的认识。

专家提示:metalness贴图应该只使用0或者1数值(过渡部分使用一些灰度也可以)。油漆材质不能被设定为金属,因为油漆是绝缘体。metalness数值应该表示的是材质最顶层。

IOR是定义反射度的另一种方式,它等同于specular贴图和metalness贴图。与specular最大的不同是IOR贴图使用不同比例来定义。IOR比例决定了真空中光穿过材质表面的快慢。1.33数值(也是水的数值)的IOR意味着光线在水中的传播速度慢于真空中传播速度1.33倍。你能在网上搜到更多的数值标准。

对于绝缘体来说,IOR数值不需要颜色信息,它可以直接进入index filed(这个术语没有查到什么意思),尽管extinction field(也没找到)应该被设为0。对于有反射颜色的金属体来说,需要将IOR数值在红绿蓝每个通道中都计算一次,这些通道可以在颜色贴图中获取。extinction数值也将需要设为金属,这个数值可以在IOR数值库中找到。

不建议使用IOR贴图,因为在游戏行业中使用的不多,而且使用多个贴图才能计算出正确值也很麻烦。

Fresnel

fresnel表示光在表面入射角的反弹的百分比。

fresnel通常设置为1,在使用metalness流程中也被锁定为1,因为所有类型的材质在入射角都是100%反射,不同微表面材质导致的fresnel效果不同,会通过gloss贴图自动计算。

fresnel在大多数PBR系统中都是由BRDF自动估算,在Blinn-Phong或者GGX情况下都不需要额外的贴图输入。然而,在Blinn-Phong BRDF中对fresnel有额外的控制,而对于传统用法来说,这可能会导致结果物理不准确。

Ambient Occlusion

Ambient Occlusion(AO)表示大比例上的灯光遮挡关系,通常是由3d模型烘焙出来的。

相对于直接将AO烘焙进albedo和specular贴图中,使用额外的输入端使用AO贴图有一个明显的好处是着色器可以有更多的方法使用AO。因为AO只会由环境diffuse光照遮蔽产生,与动态光源中的直接diffuse光照或者任何情况下的高光反射没关系。

AO贴图也不应该与specualr或者gloss贴图相乘,specualr贴图与AO贴图相乘在过去技术中是一个普遍用法,用来减少一些反射度,比如天空光线反射到一个被遮挡住的物体上时。但是如今本地屏幕空间(Local screen space)反射在表示物体间的反射已经做的很好了。

Cavity

cavity表示小比例上的灯光遮挡关系,通常是由3d模型或者normal贴图烘焙出来的。

cavity贴图应该只包含表面的凹陷部分,而不是突起部分。贴图上应该大部分都是白色,黑色部分表示物体表面上凹陷部分,在这部分中光线将会被“困住”。cavity贴图影响diffuse漫射颜色和specular高光在环境和动态光源下的表现。

或者,relfection occlusion贴图也可以当作cavity贴图使用,但是要设置diffuse cavity数值为0。

找寻正确的材质数值

使用PBR系统最困难的事是找到准确的数值。同一个东西网上有很多种数值,找到一个足够准确的信息是很难的。Quixel Megascan在这里就显得很实用了,因为他们提供了大型的扫描材质库。

大多数库中都是在实验室条件下测量原始材质数值,你很难在真实生活中看到这种数值。材质的磨损程度、氧化成都等等因素都会导致真实世界中的材质数值更多样化。

尽管Quixel的扫描是从真实世界材质中测量的,但是不同的环境下经常需要一些变化,尤其是gloss或者roughness贴图。因此使用Quixel材质是一个很好的开始,但绝不是最终完美的参考。

创建贴图内容

使用PBR系统创建材质有很多种方法,具体方式取决于你的习惯和所使用的软件。这里快速回顾下我创建镜头镜片时的方法:

首先,整合Megascans中的无缝贴图为每个材质类型做一个基础贴图,这些无缝贴图的数值都是从已知的材质中测量的,非常适合现在缺少适当的参考和观察的情况使用。我经常直接将基础材质赋予给高模上,这样在烘焙贴图之前,我就对怎样整合贴图有了一个明确的想法。

之后根据逻辑关系,通过Photoshop来给贴图分层,底部的黄铜,镀镍,磨砂底漆,半光泽纹理漆,刻字漆,最后是红色光泽塑料。这种分层方式提供了一种简单的方法,可以使用简单的蒙版遮挡关系显示下面的各种材质。dDo、Mari和Substance Designer都有类似的功能。

设置好基础层,并将其混合在一起以表示磨损程度之后,我添加了一些额外的细节。首先,我使用dDo生成灰尘和污垢通道,然后使用gloss贴图添加精细的表面变化。

用于PBR系统创建内容的准确方法远没有最终结果重要,所以随意进行测试并找出最适合你的需求方法。 但是,你不应该使材质只在特定的照明环境中看起来正确。使用合理的数值可以极大地简化流程,提高大型项目的一致性和资产重用率,并且无论你如何照亮资产,都可以确保资产始终看起来不错。

艺术家快速问答

Wojciech Klimas

Q:适应PBR流程最大的困难是什么?
A:我认为最难的是找到精准的albedo、relfectance和roughness数值。你总是在某一种灯光环境下将材质调的看上去正确,但是在其他灯光下可能就很糟糕。如果你找到了物理准确的数值,那么在所有灯光条件下都会看上去很好。
一开始我在一个屏幕上使用Photoshop,在另一个屏幕上显示不同材质反射数值的参考图表。但是随着经验的提升,你就不需要经常查看数值了。

Q:你是怎样决定你的材质正确数值是什么的?
A:通过在网络上搜索研究数据,自己测量数据对于个人来说是非常困难的,不过有机会我还是会自己测量,而且能从中学到很多。

Q:你能分享一些创作完美作品的经验吗?
A:这是个很难的问题,我认为最好的建议就是学习物理。对于理解材质的表现非常有帮助。创建好的材质没有捷径,你就是需要不断的练习再练习。

Joeri Vromman

Q:适应PBR流程最大的困难是什么?
A:最难的部分是将各个不同资源拼凑在一起,作为一个独立艺术家,我没有工作室那些工具和资源。一开始很难,但是一旦你钻研进去,对流程更加的熟悉,就会非常的顺手。

Q:你是怎样决定你的材质正确数值是什么的?
A:
收集对象的每种材料类型/部分的参考
对每种材料类型进行粗略的调整,并不一定要精确,但应该足够接近,以便有一个良好的基础来开始进行调整。
调整反射率值是一个很好的开始,可以在网络上各种图表中找到这些值,如果我找不到某种材料的反射率值,我会尝试通过逻辑推理来确定(即,橡胶磨损会少一些反光,黄铜是铜和锌等的混合物)。
反射率值是最容易开始的,并为其他贴图奠定了良好的基础。对于绝缘体,重要的是要保持反射率数值不会太高。对于金属,重要的是首先使漫反射层变黑,然后找到合适的反射率值。之后,我将指定一个快速的粗糙度值,通常是将材料分为3类(光泽,中间或粗糙)。然后,我选择一种albedo率颜色,在这里要注意使颜色保持一致且不会太暗。我还会在各种天空中切换,以确保材质在各种照明条件下均保持一致。完成此初始阶段后,由于每种材料都不同,我会继续观察以对这些值进行微调,牢记PBR的概念。在这一点上,我想为法线贴图添加一个基本叠加层,以用于具有强烈表面变化的材质(例如粗糙的塑料)。
重要的是要记住,仅当材质发生实际变化时,反射率贴图中的值才会更改。

Q:你能分享一些创作完美作品的经验吗?
A:在我看来,虽然某些方面已经很容易了,比如点击获取反射数值。但是这并不意味着你可以完全依赖它们。观察,并能够令人信服地将你看到的内容转换为最终的纹理仍然是制作可信贴图最重要的一部分

Leave a Reply