模型贴图师宝典:PBR 综合指南 - Vol2《光与物质:创建PBR纹理的实践指南》

发表于2017-04-03
评论0 4.7k浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏美术行业精英群

167422913

  本篇文章是给模型贴图师准备的关于PBR 综合指南 - Vol2《光与物质:创建PBR纹理的实践指南》,希望大家可以从里面学到东西,毕竟现在的next gen很多都开始走PBR路线了。

  模型贴图师宝典:PBR 综合指南 - Vol1《光与物质:创建PBR纹理的实践指南》

  上周发布了PBR综合指南Vol1,没有联系到作者,抱歉,这次有联系到作者:Hine,非常感谢Hine,翻译了两篇这么屌的文献,对于美术狗的我来说,翻译这个我肯定不行,下面是Hine的博客,大家可以到他的博客去看看:bolg.csdn.net/hopposite 。同样也希望Hire多多的介绍下自己,我在他的博客没有看到太多的资料,同样我们也希望有想分享资料的朋友单独联系我,这个公号是个人形式的,我们平时白天上班,每天挤出点时间来做分享,不是盈利形式的那种官方的公号,所如果有兴趣做分享的朋友可以私信给我,把你的联系方式qq以及你想分享的内容什么的微我,谢谢。

  今天我把Hine翻译的Vol2整理发上来,希望大家也能学到,反正我自己是在学习,毕竟现在的next gen很多都开始走PBR路线了。




目录


什么是PBR?

使用PBR的好处是什么?

PBR对艺术家有何意义?


金属/粗糙度工作流程

绝缘体

固有色

金属

原始金属

腐蚀或绝缘体层

粗糙度

分辨率以及像素块密度

有关金属/粗糙对工作流程的赞成与反对


镜面反射/光泽度工作流程

漫反射

镜面反射

原始金属

绝缘体

光泽度

分辨率以及像素块密度

有关镜面反射/光泽度工作流程的赞成与反对


对两种工作流程都适用的贴图

创建Ambient Occlusion

创建高度贴图

创建法线贴图


Substance PBR 工具

材质

Bitmap2Material3

PBR 基本材质

PBR Substance 材质

反射率数值

绝缘体

金属反射率

腐蚀

PBR金属/粗糙度验证

PBR保险色

转换

金属/粗糙度转换镜面反射/光滑度


附录及图表

该表面是金属吗?

反射率值

腐蚀/非腐蚀对比


光与物质


光与物质:创建PBR纹理的实践指南

  基于物理的渲染更多的可以被看做一套方法,而不是一个硬性标准。确实存在着一些特定的原则和指导方针,但它们并非一个真正的标准,因而在实践中可以有不同的实现方法。这些不同可以典型的在使用的贴图,也就是工作流程中体现,包括BRDF处理,以及描述粗糙度/光滑度的数据,通过怎样的变换,从而在自定义方法中实现。甚至有一些实现方法定义了不同的贴图名称,但是底层的实现原理仍然相同。

  在这篇指南中,我们会讨论两种最常用的工作流程,金属/粗糙度工作流程以及镜面反射/光滑度工作流程,如图所示。用于创建 PBR 贴图的 Substance 工具集,包括 Substance Designer, Substance Painter,以及Bitmap2Material 3, 这套工具集对于两种工作流程都支持。Substance 中金属/粗糙度以及镜面反射/光滑度的PBR shaders 使用 GGX BRDF,并且不对粗糙度/光滑度进行变换。然而,如果需要任何自定义变换,可以在Substance 材质中轻松实现。 此外,Substance 工具集还支持自定义 shader,这意味着你可以将 Substance集成在自定义的工作流中。

  两种不同的工作流程在其实现方式上,各自有一些赞成和反对的意见,一种工作流程并不完全的优于另一种。真正重要的是,理解 PBR 背后的核心原理。其理念与指导方针,而不是工作流程本身,指引你创作出精准的 PBR 贴图。这些工作流程本质上表示了同样的数据,只是实现数据的方式不同。

  在“PBR 综合指南”卷一中,我们从技术和理论层面定义了 PBR。在卷二中,我们会讨论创建 PBR 纹理的实际操作,并提供一系列创作指引,这些指引基于卷一所建立的基础概念。我们以从艺术的角度重新定义 PBR 作为开始。我们会先讨论金属/粗糙度工作流程来提出原则和指导方针。随后则是镜面反射/光滑度工作流程,并只是有差异的部分深入讲解。因此,最好先通读两种工作流程,来得到创建 PBR 纹理的完整概念。





什么是PBR

  基于物理的渲染(PBR)是是一种着色与渲染的方法,它提供了一种更加精确的方法,来表现光如何与表面交互。它可以被称为基于物理的渲染(Physically Based Rendering)(PBR)或基于物理的着色(Physically Based Shading)(PBS)。依据所讨论的工作流程层面,PBS通常特指着色,而PBR则特指灯光与渲染。不过,两个术语描述了同一套表述资源的方式,而它是在物理层面精确的。



使用PBR的好处是什么?

  1. 创建具有真实感的资源更加容易,因为它去除掉了一些对于表面属性的一些猜测工作例如估计面镜面反射,其方法与算法都是基于在物理上精确的公式。

2.资源可以正确适用于任何光照条件

3.提供了一种工作流程,使得不同艺术家之间可以进行连续的艺术创作工作



PBR对艺术家有何意义?

  作为艺术家,我们对于描述表面属性的贴图需要有不同的思考。有一些新的贴图类型,需要遵从新的规则和指南。

  我们需要将传统的渲染工作流程中的漫反射和高光贴图的概念抛弃掉。这些贴图只是一种变通的方法,用于近似光线与表面相互作用。随着计算机硬件以及渲染上的进步,现在我们可以更好的从物理上去模拟灯光属性。

  在PBR中,shader通过能量守恒和BRDF处理繁重的物理层面,作为艺术家,我们创作遵从物理规则的贴图。基于物理的渲染去除了对于材质数值的猜测工作,使得我们能有更多时间花在材质更有创造性的层面。尽管遵从指导准则并正确的制作出贴图十分重要,但这并不意味着我们必须无视我们的艺术直觉。实际上,正是艺术层面给材质带来了特征,在精心制作的细节和表达中揭示了材质的来历。不要过分的被其物理属性拘束十分重要。我们并不会因为转换到一个在物理层面上更加精确的环境下工作,而不能进行一些艺术风格化的表达。例如,迪士尼的基于物理的反射模型被设计为一个“原则化”的实现方式,这表示它更加偏向艺术化,而非严格的遵从物理模型。因此,我们应该了解基于物理的规则并使用指导准则,但不要被它所束缚。

作为艺术家,我们对于描述表面属性的贴图需要有不同的思考。有一些新的贴图类型,需要遵从新的规则和指南。



金属/粗糙度工作流程

金属/粗糙度工作流程通过一系列通道来定义,这些通道作为纹理供给PBR Shader中的采样器。对于金属/粗糙度工作流程,需要的贴图为固有色,金属性以及粗糙度,如图所示,我们会在随后的子章节讨论每一张贴图。PBR Shader也会使用环境遮蔽(AO),法线以及可能会用到高度贴图来进行视差映射,如图03所示。后三张贴图对于两种工作流程都适用,我们会在“对两种工作流程都适用的贴图”章节讲到它们。



  在金属/粗糙度工作流程中,金属的反射率值与绝缘体的反射色一起,存储在固有色贴图中,与切线角度的反射光一起,由BRDF处理。

  金属性贴图起到类似于蒙版的作用,区分固有色贴图中的金属和绝缘体数据。绝缘体F0值不需要手动输入,由shader自动处理。当shader在金属性贴图中识别到黑色时,它将固有色贴图中的相应区域处理为绝缘体,使用4%(0.04)的反射率,如图所示。4%的值适用于绝大多数常见绝缘体材质。注意很重要的一点是,所有的数值,例如绝缘体的F0,金属反射率以及反照颜色的亮度范围,都从实际测量值得出。在我们讲解每一种贴图时,会讨论设计指南,它是基于测量数据得出的。




  在卷一中,我们讨论了能量守恒的概念,即一个表面重新发射出的光(反射以及散射)的总量小于它接收到的光的总量。在实践中,在Substance中shader负责处理能量守恒。在金属/粗糙度工作流程中,能量守恒法则不可能被打破。漫反射(反射光)以及镜面反射光之间的平衡由金属性贴图控制,这意味着你无法创造出一种漫反射与镜面反射相组合,能够使得反射/折射光比表面初始接收到的更多。

金属的反射率值,与绝缘体的反射颜色一起存储在固有色贴图中



绝缘体F0

  一些金属/粗糙度的实践流程提供镜面反射控制,例如在 Substance工具集以及 Unreal Engine 4 中,它允许艺术家改变绝缘体 F0 常数值。在 Substance 中,这一输出名为“镜面反射等级”,由金属/粗糙度 PBR Shader 中的纹理采样器提供。它表示了如图05所示的0.0 - 0.08 的范围。如果需要手动设置绝缘体值,可以在如图所示的 Substance Designer 中使用“镜面反射等(specularLevel)”修改。我们会在镜面反射/光泽度工作流程中更深入的讨论绝缘体的F0值。




  如果需要手动设置绝缘体值,可以在 Substance Designer中用“镜面反射等级(specularLevel)”修改。





固有色(RGB - sRGB)

  固有色贴图是一张 RGB 贴图,可以包含两种类型的数据:绝缘体材质的反射颜色以及金属材质的反射率值,如图。在卷一中讨论过,表示绝缘体部分的颜色值,代表了绝缘体表面不同波长的反射光。当一个区域在金属性贴图中被表示为金属时,该区域的数据内容则是金属的反射率值。



创作指引

  固有色贴图可以被看做某种平面的色调值,即是说它的对比度比传统的漫反射贴图要弱。不需要有太亮或太暗的值。物体的色调值实际上比我们脑海中的印象要亮许多。我们可以将这一范围视觉化,最暗的物质是黑炭而最亮的则是白雪。例如,黑炭为黑色,但它不是值为0.0的黑。我们选取的值需要处于一个较亮的区域。提到亮度范围,我主要指的是绝缘体反射颜色。如图,你可以看到一个示例,污垢部分的数值低于了正确的亮度区域。暗部颜色数值不应该低于 30-50sRGB,严格一点不应低于50。亮部颜色不应高于240 sRGB。




  我们提到过,对于绝缘体材质,固有色包含的是反射光数据,因此它不应该含有诸如AO这样的光照信息。有一些例外,需要在固有色上添加一些微观层面的物体遮蔽信息,在这种情况下,只依靠AO通道 shader 无法表示这种层级的细节。

  如图所示,然而,如果向贴图中增加微观物体遮蔽信息,它仍然需要处于规定的亮度范围之内。

  在贴图中表示金属反射率值的数据应该使用真实世界中的测量值。这些值通常是在70-100%之间的镜面反射,映射到sRGB中为180-255。在 Substance PBR

工具章节,我们会讲到提供了常见材质预设 F0 值的一些工具。同时,Sé bastien Lagarde 提供的金属/粗糙度图表也是很不错的资源。


在贴图中表示金属反射率值的数据应该使用真实世界中的测量值

1.固有色贴图中的非金属区域表示反照颜色,金属区域表示的是反射率数值。

2.固有色不应当含有光照信息,微观遮蔽(micro-occlusion)信息除外。

3.暗部数值不应低于30 sRGB(宽松范围) - 50 sRGB(严格范围)。

4.亮部数值不应高于240 sRGB。

5.金属的反射率较高,有70-100%之间的镜面反射,映射到 sRGB 为180-255

  你将会在金属性章节中读到,固有色同样也可以包括金属反射率值。如果污垢或氧化信息被加入到固有色当中,会导致金属反射率降低到原始金属的范围之外,因此不应当继续将它考虑作原始金属。额外的污垢和氧化信息也必须被包含在金属性贴图当中。例如,在图中可以看到金属生锈部分被看做绝缘体,在金属性贴图中为黑色


金属性贴图的作用与蒙版相似,指示 shader 如何去解释固有色贴图中相应区域的数据。





金属(灰度 - 线性)

  金属性贴图用于定义材质的哪部分区域为原始金属。金属性贴图是一张灰度图。它的作用与蒙版相似,指示shader 如何去解释固有色贴图中相应区域的数据。金属性贴图中并不包含直接用作材质属性的真实世界中的测量值。它只是向 shader 提供描述,表明在固有色贴图中的哪些区域应当被解释为反射颜色(绝缘体区域)以及哪些区域为金属的反射率数值。在金属性贴图中,0.0(黑色-0 sRGB)表示非金属,而1.0(白-255 sRGB)表示原始金属。在描述金属/非金属方面,金属性贴图往往是二进制的,非白即黑,金属或非金属。在实际中,当shader 在金属性贴图中看到白色时,它会检查固有色贴图的相应区域,来得到金属的相应反射率值,如图




创作指引

  金属表面有两个重要的方面与贴图制作相关,即它的反射率值处在较高的70-100%之间的范围,以及某些金属会发生腐蚀。我们会在讨论创作指引是分别介绍这两个方面。

  金属表面有两个重要的方面与贴图制作相关,即它的反射率值处在较高的70-100%之间的范围,以及某些金属会发生腐蚀。我们会在讨论创作指引是分别介绍这两个方面。



原始金属

  金属性贴图的取值非0即1,表示金属或非金属,它用以表示原始抛光过的金属状态。作为一般性的指引,原始金属的灰度范围在金属性贴图上定义在235-255 sRGB之间。对于处在这一范围的原始金属,它们会需要在固有色贴图上有一个70-100%之间的反射率值,这一范围被映射在180-255 sRGB之间,如图12所示。再次强调,这些值来源于真实世界中的测量值





腐蚀或绝缘体层

  当一个表面发生风化作用时,金属或许需要被看做被氧化过,或受到环境因素影响的结果,例如污垢或尘埃层。经过氧化的金属需要作为绝缘体对待,例如生锈的金属。这对于喷涂过的金属也同样适用。例如,当你观察一些喷涂金属表面有刮痕或被削去的地方,暴露出来的金属部分是“原始”金属(在金属性贴图上表示为金属)而喷漆是绝缘体层(在金属性贴图上表示为黑色的绝缘体)如图所示。




  金属性贴图可以表示一种金属和非金属的混合状态,通过在贴图中出现过渡的灰色。关键是,如果在金属性贴图中出现了低于235 sRGB的灰色,那么你需要在固有色贴图中降低“原始”金属的反射率值。例如,假设有一个泥垢层部分的掩盖了原始金属,如图。泥垢是绝缘体,但如果你在金属性贴图中将它做成白色,固有色贴图中的这片泥垢区域就会被看做金属的反射率值来处理。而在固有色贴图中泥垢的颜色值比表示抛光金属区域的反射率70-100%所用到的值要低的多。通过在金属性贴图中降低表示泥垢相关区域的值,就可以创建出在绝缘体和金属反射率之间合适的过渡值。




  泥垢层的不透明度可以指示需要在固有色层中将反射率值降低多少。这里没有严格而固定不变的规则。需要做的就是从高反射率表面(导体)移动数值到更低的反射率表面(绝缘体)。不过这一过渡的层级可能会改变。

  Substance 工具集允许你轻松处理风化效果,并通过多通道支持控制该效果如何传递到通道中。Substance Designer 和Substance Painter 允许你改变 Substance 效果的参数,而由 Substance效果控制的通道会被自动调整。例如,在Substance Designer 中,可以使用材质颜色混合节点来实施效果,例如泥垢在不同通道间的效果。在材质颜色混合中,通过调整金属性数值滑条控制泥垢层在金属上的效果,如图所示。




  经过氧化的金属需要作为绝缘体对待,例如生锈的金属。这对于喷涂过的金属也同样适用。

1、黑色(0.0)是非金属而白色(1.0)是金属。也可以出现过渡灰度数值来表示氧化金属或泥垢。

2、如果金属性贴图中有低于 235 sRGB的值,则固有色贴图中相应区域的反射率值需要被降低



粗糙度(灰度 - 线性)

  粗糙度贴图描述了表面的不规则性,它导致光线漫反射,如图。在卷一中讨论过,反射光的方向会依据表面粗糙度的情况随机变化。这会改变光线方向,但光的强度保持不变。较为粗糙的表面的高光会看起来更大、更暗。而更光滑的表面会保持镜面反射的汇聚,使得高光看起来更明亮或强度更高,尽管反射光的总量是相同的。




  在这张贴图中,黑色(0.0)表示光滑表面而白色(1.0)表示粗糙表面。粗糙度贴图是最需要发挥创造力的贴图,因为它允许艺术家视觉化的去定义表面特征。本质上,它允许我们创造性的讲述该表面各种状态的来历。它处在什么样的环境中?它是被精心保管还是随意放置?它是否曾经被暴露在自然环境当中?表面的状态讲述了很多关于它所处环境的内容,因此其状态与想要创建的世界与资产的整体内容有深刻的联系。

  对于粗糙度,没有正确或错误的讲究。艺术家拥有全部的处理权。从法线贴图开始是一个很好的切入点。法线贴图常常包含关键的表面细节,而这些表面细节也应该被表示在粗糙度贴图当中。


创作指引

1、发挥创造力去讲述表面经历的故事



分辨率以及像素块密度

  使用金属/粗糙度工作流程的一个副作用是,它会导致一些白边的瑕疵,如图。




  我们现在讨论的是金属/粗糙度工作流程,但这个问题也会出现在镜面反射/光泽度工作流程当中。不过,它不会很明显,因为在镜面反射/光泽度工作流程中这一效果被反转了,也就是说边缘处会出现黑边而不是白边,如图。



  这一边缘会出现在不同区域间的过渡处,从绝缘体颜色过渡到非常明亮的金属反光率时,这是由纹理插值导致的现象,如图。在金属/粗糙度工作流程中,固有色贴图中含有的明亮的金属反光率颜色会与非金属的漫反射颜色插值,导致了这样的白边。在镜面反射/光泽度工作流程中,漫反射贴图中包含的是黑色,因为原始金属没有漫反射颜色。这些黑色值与非金属的漫反射颜色插值,从而导致的是黑色的边缘。




  文件的分辨率与像素块密度对边缘瑕疵的可见程度有直接影响。例如,如果使用硬边缘的笔刷来创建金属与非金属间的过渡区域,低分辨率的文件仍旧会化该边缘而因此加剧这一瑕疵。这一低分辨率问题也可能由不恰当缩放的UV导致,UV没有基于文件分辨率提供合适的像素密度。利用UV来分配合适的像素密度,是减小边缘瑕疵问题的最好方法,如图所示。在图20中,两张贴图都使用了2048像素分辨率。但是,右边的图像由于UV布局不够合理,导致像素密度较低.




文件分辨率与像素块密度直接影响边缘瑕疵的可见程度

创作指引

1、在金属/粗糙度工作流程中,文件的分辨率与像素块密度会影响到边缘的白边问题。确保使用的UV布局合理,为纹理提供与文档相合适的分辨率来最小化边缘瑕疵问题。



镜面反射

  在金属/粗糙度工作流程中,所有绝缘体材质的F0都被设置为0.04(线性)4%。先前提到过,一些实现方式会允许用户通过提供一个镜面反射通道来重写这一设定。在Substance中,这一通道称为镜面反射层级(specularLevel)通道。绝缘体的F0在贴图创作指引方面更加复杂,因此一般性的金属/粗糙度工作流程是直接使用0.04,本文会等讲到镜面反射/光泽度工作流程时再来讨论该创作指引。



有关金属/粗糙度工作流程的赞成与反对


赞成

1、更易于创作,并且由于使用了统一的绝缘体F0数据,而减少了因绝缘体F0数据出错的可能性。

2、占用更少的纹理内存,因为金属性和粗糙度两张都是灰度图。

3、目前看来是被采用更多的工作流程


反对

1、在贴图创建时无法控制绝缘体的F0值。不过,大多数实现方式(渲染引擎)中会提供重写镜面反射控制的方法,来更改基础的4%值。

2、在低分辨率贴图中边缘瑕疵问题会比较明显



镜面反射/光泽度工作流程

  与金属/粗糙度工作流程相同,镜面反射/光泽度工作流程也由一系列贴图定义,作为纹理提供给PBR Shader的纹理采样器。对应镜面反射/光泽度工作流程的特定贴图是漫反射,镜面反射和光泽度,如图所示。尽管镜面反射/光泽度工作流程使用了看起来更为熟悉的名字,漫反射和镜面反射,但需要注意将这些贴图与传统工作流程中的对应同名贴图相区别。Substance使用漫反射这一术语,但一些实现方式中可能指的是反照率(albedo)。PBR Shader 也会使用环境遮蔽(AO)贴图,法线贴图以及可能会用到高度贴图来进行视差映射,这些我们会在“对两种工作流程都适用的贴图”章节讨论



  在这一工作流程中,金属的反射率以及非金属的F0值放在镜面反射贴图中。在镜面反射/光泽度工作流程中,会用到两张 RGB 贴图:一张是漫反射颜色(反照率)而另一张是反射率值(镜面反射)。在镜面反射贴图中,可以直接控制绝缘体材质的F0值。

  我们已经在金属/粗糙度工作流程中提到过,Substance 中的 PBR Shader负责处理能量守恒。而这一点在镜面反射/光泽度工作流程中甚至更为重要,因为镜面反射贴图提供了绝缘体 F0的完全控制功能,这意味着贴图中含有不正确数值的可能性更高了。例如,白色(1.0)的漫反射值与白色(1.0)的镜面反射值相组合,得到的反射/折射的光的总量会大于接收到的,结果就会打破能量守恒法则。这意味着创作贴图时,在贴图数据中看到的与相应的实际结果不同。

  将会看到,镜面反射/光泽度流程中的贴图内表示的数据本质上与金属/粗糙度流程中相同。我们会遵从同样的创作指引,而其中的区别在于贴图的制作方式。这些数据只是被放置在了不同的贴图当中,而我们会遵从同样的原则。同前所述,所有的数值,例如绝缘体 F0,金属反射率以及反照率颜色的亮度范围,都来源于实际的测量值。在我们逐一浏览不同类型的贴图时,会分别讨论它们基于测量值的创作指引。本章中,将不会再重复已经在金属/粗糙度章节提供过的信息。而是会集中在它们的不同之处,以及在镜面反射/光泽度工作流程中需要做出的变化。



漫反射(RGB - sRGB)

  与金属/粗糙度工作流程中的固有色贴图相同,漫反射贴图包含反照率颜色。然而,它并不包括任何反射率数值。


创作指引

  漫反射贴图只包括反照率颜色。表示原始金属的区域是黑色(0.0)因为金属没有漫反射颜色,如图。在经过氧化的部分,金属会含有颜色,因为它不再被作为原始金属对待。对于会在原始金属上创造出绝缘体层的泥垢或其他效果,也符合这一情况。在色调方面,漫反射贴图的创作指引与固有色贴图相同。然而,有一个例外是,如果有原始金属存在,则允许出现为0.0数值(黑色),而不会被规范中的暗部范围所限制。





1、颜色表示非金属材质的反照率,而黑色(0.0)表示原始金属。

2、固有色中应当避免光照信息,微观层面的物体遮蔽信息则是例外。

3、暗部的数值不应低于 30 sRGB(较宽容) - 50 sRGB(较严格)除去例外中黑色表示的原始金属。

4、亮部数值不应高于 240 sRGB。



镜面反射(RGB - sRGB)

  镜面反射贴图定义了金属的反射率值,以及非金属的F0值,如图所示。这张RGB 贴图中允许给绝缘体材质赋予不同的F0数值。在金属/粗糙度工作流程中,绝缘体的反射率被硬性的写为4%,只能通过镜面反射层级通道修改,而镜面反射贴图与它不同。与在金属/粗糙度工作流程讲到的相同,F0数据应当源自真实世界的测量值。绝缘体的F0 值应当是灰度数值,而金属反射率可以有颜色,因为有些金属会吸收不同波长的光。



镜面反射贴图允许给绝缘体材质赋予不同的F0数值


创作指引

  既然镜面反射贴图同时包括金属和非金属的F0值,那么下面来分别讲解每种材质类型。



原始金属

  金属 F0 应当基于真实世界的测量值。正如我们在金属性贴图中提到的,如果存在氧化部分,或者表面覆盖有非金属层,则该区域原始金属的反射率需要被降低。在镜面反射/光泽度工作流程中,对于金属区域,泥垢或氧化会在漫反射贴图中提高其漫反射颜色,并在镜面反射贴图中降低它的反射率值,如图。也给出了泥垢层在原始金属上的示例。镜面反射贴图中的泥土部分,包含对绝缘体来说合适的F0值。对于这种情况,我会使用0.04或4%。




绝缘体

  绝缘体材质的 F0 也在镜面反射贴图中创建。在其中可以对F0值进行完全控制,然而重点需要注意的是,要使用正确的数值。正如我们在卷一中讨论过的,非金属(绝缘体/电介质)导电性很弱。折射光被散射或者吸收(常常再次穿过表面返回原先介质)并因此反射光的总量比金属小很多。我们提到过,对于常见的绝缘体该值大约在2-5%之间,基于由折射率(Index Of Refraction)(IOR)计算得到的F0得出。除了宝石是例外,图25中常见绝缘体材质的F0在0.02-0.05(线性)之间。映射到 sRGB 上,即为 40-75 sRGB,对应于线性的 0.02-0.05(2-5%)范围。

  如果找不到特定材质的 IOR 值,可以使用4%(0.04 - 塑料)。宝石是例外,它有0.05-0.17(线性)范围间的IOR值,如图所示。Shader 被映射到0.0-0.08(线性)间的范围,其中0用以表示空气。



1、镜面反射贴图包括绝缘体的 F0 值,以及原始金属的反射率值。

2、绝缘体反射的光量比金属少。对于常见绝缘体的值应当大约在2-5%之间,映射到 sRGB 即为 40-75之间,对应于线性的 0.02-0.05(2-5%)范围。

3、常见的宝石处于0.05-0.17(线性)范围。

4、常见的液体处于0.02-0.04(线性)范围。

5、原始金属的反射率值较高,镜面反射处于70-100%之间,可以映射为180-255 sRGB。

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



光泽度(灰度 - 线性)

  光泽度贴图描述了导致光发生漫反射的表面不规则程度,如图。在这张贴图中,黑色(0.0)表示粗糙表面而白色(1.0)表示光滑表面。它与金属/粗糙度工作流程中使用的粗糙度贴图相反。这张贴图的创作指引与前面在粗糙度章节中讲到过的相同。



描述了导致光漫反射的表面不规则程度


创作指引

  1. 发挥创造力去讲述表面经历的故事


分辨率以及像素块密度

  我们先前讨论过了边缘瑕疵会怎样出现在两种工作流程当中。在金属/粗糙度章节已经深入讨论过了,因为边缘瑕疵在金属/粗糙度工作流程中更明显。也已经提到过在镜面反射/光泽度工作流程中,漫反射贴图包含黑色,因为原始金属没有漫反射颜色。而黑色值与非金属的漫反射颜色插值,会产生黑色边缘,如图所示




  在这里再次强调,文件分辨率与像素块密度对于边缘瑕疵的可见程度有直接影响。例如,文件的分辨率与像素块密度对边缘瑕疵的可见程度有直接影响。例如,如果使用硬边缘的笔刷来创建金属与非金属间的过渡区域,低分辨率的文件仍旧会柔化该边缘而因此加剧这一瑕疵。这一低分辨率问题也可能由不恰当缩放的UV导致,UV没有基于文件分辨率提供合适的像素密度。利用UV来分配合适的像素密度,是减小边缘瑕疵问题的最好方法,如图中的再次表示。



文件分辨率与像素块密度直接影响边缘瑕疵的可见程度


创作指引

1、在镜面反射/光泽度工作流程中,文件的分辨率与像素块密度会影响到边缘的黑边问题。确保使用的UV布局合理,为纹理提供与文档相合适的分辨率来最小化边缘瑕疵问题。



有关镜面反射/光泽度工作流程的赞成与反对

赞成

1、边缘瑕疵较为不明显

2、可以在镜面反射贴图中控制绝缘体的 F0


反对

1、镜面反射贴图中能够控制绝缘体F0,因而在使用中更有可能导致错误值。如果没有由 shader 正确处理,能量守恒法则有可能会被打破。

2、因为用了多一张 RGB 贴图因而占用更多内存资源。

3、因为它使用了与传统工作流程相同的术语,但却需要不同的数据,因此更容易令人困惑。并且它对理解基于物理的渲染有更高的要求,例如需要为绝缘体提供正确的F0,为原始金属提供黑色的漫反射值,以及如果没有由 shader 负责处理,则需要提供能量守恒的可能方案,



对两种工作流程都适用的贴图环境遮蔽(Ambient Occlusion )

  环境遮蔽(A0)贴图定义了有多少周边环境光能够到达表面上一点。它只会影响漫反射成分,而不应该阻挡镜面反射成分。一些引擎例如 Unreal Engine 4 有屏幕空间反射的选项用来模拟局部反射。最佳组合是使用AO和屏幕空间反射。

  在 Substance PBR Shader 中,环境光(由环境贴图产生)与AO相乘。AO贴图是一个可选通道,由 PBR Shader 中的纹理采样器提供,如图。AO不应当被烘焙到纹理贴图中,而应该只是作为独立的通道提供给 shader。



AO只会影响漫反射成分,而不应该阻挡镜面反射成分



创建环境遮蔽(AO)贴图

  在 Substance Designer 中,通过使用集成的烘焙工具,AO可以从模型中烘焙,或从法线贴图中转换得到。另外,还有一个环境遮蔽(AO)节点提供从高度贴图转换AO的功能,如图。



可以用 Bitmap2Material 来从源图像生成AO,如图。



高度

  高度贴图在 PBR 渲染中常常用于置换,它可以用来进行视差映射,由此而使得深度更加明显,最终增强法线和凹凸贴图的真实感,如图。Substance Designer使用浮雕视差映射算法(reliefmapping parallax algorithm)。在 PBR Shader 中由纹理采样器供应高度贴图,它也是可选通道。在 Substance Designer 中,这一效果可以使用浮雕参数在shader 中控制,同样如图。



高度贴图可以用来进行视差映射,由此使深度更加明显,最终增强真实感



创建高度贴图

  与 AO 贴图相似,高度贴图可以在 Substance Designer 中使用集成的烘焙工具,通过模型烘焙得到。此外,可以使用法线转高度节点,它用于从法线贴图生成高度贴图,如图。


  你甚至可以在 Substance Designer 中通过向量或位图绘制工具绘制高度数据。然而,绘制高度的最好方法是使用 Substance Painter 来直接在 3D 模型上绘制细节,如图。

可以在 SubstancePainter 中绘制高度



可以使用Bitmap2Material来从源图像生成高度贴图



法线

  法线贴图用于模拟表面细节,它在 PBR 中的作用与其在非 PBR 工作流程中的作用相同。然而,既然法线贴图用于模拟表面细节,让法线贴图中蕴含的表面细节也影响粗糙度或光泽度贴图也很有好处。


创建法线贴图

  法线贴图可以在 Substance Designer 中,使用内置的烘焙工具通过模型来烘焙。此外,还有一个法线节点,用于转换高度贴图到法线贴图,如图。




Bitmap2Material 可以用来从源图像生成法线贴图,如图。




  可以使用向量或位图绘制工具在 Substance Disigner 中来绘制高度数据,并使用法线节点,将它们转换为法线数据。在Substance Painter 中绘制的高度数据可以被导出为法线贴图,并且也可以直接绘制法线数据。



Substance PBR 工具

  在本章中,我们会讨论许多 Substance 工具,它们可以帮助创建 PBR 纹理,以及设置正确的反射率值。这些工具根据材质,腐蚀度和数值,被划分到不同的章节中。这些节点基于在本文中讲到的原则和理念来构建。



材质

Bitmap2Material 3

  2M 3 是独立的应用程序(独立版/专业版)或封装好的 Substance 材质(仅限专业版),能够从单一的源贴图输入中,为金属/粗糙度或镜面反射/光泽度工作流程创建 PBR 贴图。它可以创建无缝贴图,并且在创建反照率(使用光照消除功能)、法线贴图和高度贴图方面很有优势。 它是一个为材质创建基本纹理的很好的工具,如图。





PBR基本材质

  它同时支持金属/粗糙度和镜面反射/光泽度工作流程。提供了一些原始金属材质常用的预设,并且允许设置绝缘体的反照率来创建非金属材质。依据粗糙度和光泽度流程,它提供一些控制功能,并且也有大量的选项。可选功能是,如果想要导入在 SubstancePainter 中创建的基本贴图,可以添加自定义贴图输入。

  使用这个方法,可以快速创建一个能够与其他材质混合的材质节点。





PBR Substance材质

  Substance Designer 和 Substance Painter 使用标准化的 PBR 材质。它们是通过程序纹理、手绘纹理和照片素材产生的材质集合,并被编译到 Substance 格式中。作为 Substance 材质,它能够进行动态调整,利用各种参数来控制纹理的不同层面。它提供了一个快速并且高效的方法来在 PBR 内容上工作,而不用从头开始创建这些贴图。

  在 Substance Designer 中, Substance 材质可以在 PBR 材质库中找到。Gametextures.com 也提供了一系列手绘的 PBR 材质。通过 Allegorithmic 账户,可以从 Gametextures.com 中下载额外的 PBR 材质。

  在 Substance Painter 中, Substances 材质可以在菜单栏中的材质面板下找到。通过 Allegorithmic 账户也可以下载一系列 Gametextures.com 材质,并安装到材质面板中。

  除去由 Substance Designer 和 Substance Painter 提供的内容, Substance 数据库包含大量标准化的 PBR 材质,它们也是由程序纹理、手绘纹理以及照片素材产生的材质集合编译到 Substance 格式中而来。



反射率数值

绝缘体F0

如图,该节点用于输出常见绝缘体材质的 F0。可以在预设值中选择,并且它也有接收 IOR 的输入框参数用以计算出F0值。该节点为绝缘体材质设计,可以用在镜面反射/光泽度工作流程中,或者用在金属/粗糙度工作流程中的镜面反射层级(specularLevel)通道中。





金属反射率

这个节点输出常见原始金属材质的反射率值,可以在 Substance Designer 库中 Filters > PBR 下找到。它提供许多金属预设值,如图。





腐蚀

PBR 金属/粗糙度 验证

这一节点设计用于金属/粗糙度工作流程中,它是一个用于检查固有色和金属性贴图中不正确数值的工具,如图。它可以在 Substance Designer 库中 Filters>PBR 菜单中找到,该节点输出一张按照 红->黄->绿的顺序排列的热度贴图,其中红色为错误值,而绿/黄色是正确值。对于金属材质,它在固有色贴图中的金属区域检查F0值,该区域在金属性贴图中指定为金属(大于 235 sRGB)。热度贴图显示F0范围过低的区域。对于反照率,它检查绝缘体材质亮度范围是否正确。





PBR 保险色

这个节点校正固有色贴图或漫反射贴图,如图。它确保绝缘体数值处在经过校正的亮度范围内。它可以在Substance Designer 库中的 PBR 工具中找到。




转换

金属/粗糙度 转 镜面反射/光泽度

这个节点将金属/粗糙度工作流程中的贴图转换到镜面反射/光泽度当中,如图。它可以在Substance Designer库中的 PBR 工具中找到。





附录及图表

该表面是金属吗?

将表面划分为金属或非金属两类是非常有帮助的做法。在开始着手创作纹理之前,我会检查材质并问自己,正在创作的材质是否为金属材质。通过该问题,就可以得到如图45或46所示,在本卷中讨论的纹理处理过程的创作指引。图是金属/粗糙度工作流程,而图46则是镜面反射/光泽度工作流程。




反射率值

图展示了绝缘体的F0范围。绝缘体反射光的总量比金属小非常多。对于常见绝缘体这一数值为2-5%,在sRGB中这一数值会在sRGB 40-75 之间,即0.02-0.05(线性)范围。



  你可以同时看到绝缘体F0值和金属反射率数值。对于金属,镜面反射范围在70-100%之间,映射到 sRGB 即180-255之间。



腐蚀/非腐蚀对比



  如图,你可以看到正确与错误两方面使用金属/粗糙度工作流程创作贴图的例子。泥垢和绘制的绝缘体层在反照率值中过暗,并且泥垢在金属性贴图中被标记为原始金属。同时金属反射率值在固有色贴图中也设置过低,它的镜面反射范围不处于70-100%之间。




  如图,你可以看到正确与错误两方面使用镜面反射/光泽度工作流程创作贴图的例子。所有原始金属在漫反射贴图中数值过亮,金属的漫反射应该为黑色。泥垢和绘制的绝缘体层在漫反射贴图中反照率数值过暗。泥垢层在镜面反射贴图中F0值过亮。而泥垢的F0值并不符合绝缘体的范围。




  Allegorithmic develops the new generation of 3D texturing software: Substance Painter, Substance Designer and Bitmap2Material. With most AAA game studios using these tools, Substance has become the standard for creating next-generation PBR (Physically Based Rendering) assets.


For more information on Substance, please visit our website at

                                  www.allegorithmic.com





好了福利来了:

英文原版pdf:

链接:http://pan.baidu.com/s/1jIoA87O 密码:d2kx

中文版pdf:

链接:http://pan.baidu.com/s/1mi73tfq 密码:i1hv


转载自公众号:sculpt_up


如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

游戏学院公众号二维码
腾讯游戏学院
微信公众号

提供更专业的游戏知识学习平台