基于物理渲染指引(The PBR Guide)
翻译Academy Substance官方教程文章“The PBR Guide”,原文链接
https://academy.substance3d.com/courses/the-pbr-guide-part-1
第一部分 基于物理渲染和着色的理论
光是一种复杂的物理现象,它存在波粒二象性,既有波的特点,又有粒子的特点。为了描述这种特性,提出了很多不同的光照渲染模型。
作为纹理美术,我们关注的主要是光的几何模型,即光和介质之间的交互。理解光线和介质表面是怎么交互的非常重要,因为我们的工作就是创建用来描述介质表面的纹理。我们创建的纹理和材质在虚拟世界中要与光线发生交互。所以我们对光线的行为理解越深,创建出来的纹理效果就越好。
本文中,我们将讨论基于物理渲染模型背后的物理原理。我们从探究光线的行为开始,最后得出基于物理渲染(PBR)的特性。
光线
根据光的几何模型原理,光在均匀透明介质(比如空气)中传播时的路径是一条直线。同时,光线在碰到不透明物体表面(反射),或者从一种介质进入另一种介质(折射)(比如从空气进入水中)时的行为是确定的。
基于光的几何模型,我们可以将光线从光源起点到最终转化其他能量(比如热能)的终点,中间经过的路径展现出来。
一束照射到物体表面上某一点的光线我们称之为入射光,光线入射的角度称为入射角(图01)。
图01:入射角,入射和反射光线当一束光照射到分割两种不同介质的一个平面上时,在光线和平面的相交点,会发生以下两个事件中的一个,或者两个同时发生:
1、光线被表面反射到另一个方向,遵循反射定律,即反射角等于入射角。
2、光线从一个介质进入另一个介质,传播路径依然是直线(折射光线)。
于是,光线被分成了两个方向:反射和折射。在物体表面,光线要么被反射,要么被折射。光线最后会被介质吸收转化为热能,但是吸收不会发生在物体表面。
吸收和散射(透明和半透明)
当光线在非均匀介质或半透明材质中传播时,会被吸收和散射:
当光线被吸收时,光强会减弱,转化成另一种能量——通常是热能。由于光的吸收与波长有关,所以被吸收后光的颜色会发生改变,但是光的方向不会变。
当光线被散射时,方向会随机改变,改变的幅度与材质有关。散射随机改变光线方向,但光强不会发生改变。以耳朵来举例,耳朵很薄,对光的吸收较少,可以看到从耳朵背后头过来的散射光,图02。
图02:耳朵背后的散射光如果既没有散射,吸收也比较少,光线会透过介质,比如玻璃。举个例子,想象一下你在一个干净的池子里游泳,你可以在水中睁开眼睛看较远的距离。然而,如果池子里水比较脏一些,水中的脏微粒会将光线散射,降低水的清澈度,在水中看到的距离就会缩短。
光在介质中传播的距离越远,就越可能被吸收或散射。所以物体的厚度很大程度上决定了光线被吸收或散射的程度。在shader中一般用一张厚度纹理(Thickness map)来描述物体的厚度,图03。
图03:Substance Painter中次表面散射shader用到的厚度纹理漫反射和镜面反射
镜面反射是指我们之前提到的在物体表面被反射的光线。光线在物体表面被反射,然后沿着不同的方向传播。遵循反射定律,即在完美平滑表面上反射角等于入射角。然而,大多数物体的表面是不规则的,反射方向会根据表面粗糙度不同发生一些变化。这只影响光线方向,二光强保持不变。
粗糙表面的高光区域更大,而且比较模糊暗淡。光滑表面的镜面反射则比较聚集,在某些角度看起来更亮。然而,不论是光滑表面还是粗糙表面,反射的光线总量是一样的,图04。
图04:反射方向根据物体表面粗糙度不同而改变折射改变光线的方向。当光线从一种介质进入另一种介质时,光的速度和方向都会发生改变。折射率(IOR)是用来描述介质对光线传播方向改变程度的一种光学参数。折射率决定了光线穿过某种介质进入另一种是的光线方向扭曲程度。例如,谁的折射率是1.33,玻璃的折射率是1.52。在图05中可以看到一根吸管放在一个装有水的玻璃杯中。吸管看起来弯曲了,因为光线在不同介质(空气、水、玻璃)中传播发生了折射。
图05:吸管因为折射而弯曲漫反射是一种折射光。光线从一种介质进入另一种,举个例子,比如从空气中进入一个物体。在物体中光线会发生多次散射,最后又在与进入是几乎相同的地方,从物体中折射回空气,图06.
图06:光线从一种介质进入另一种,在内部散射漫反射材质对光线的吸收性较强。如果散射光在材质中传播很长一段路径,会被完全吸收掉。从物体中出来的光线一般只传播了很小一段距离,距入射点很近。所以,入射点和出射点之间的距离可以忽略。
传统着色中用于漫反射的Lambertian模型,没有考虑物体表面的粗糙度。然而其他一些模型,比如Oren-Nayar模型,把粗糙度考虑在内了。
有时我们把一些高散射度低吸收度的材质当作半透明材质。比如烟、牛奶、皮肤、玉、大理石。皮肤、玉、大理石这三种材质的渲染一般要使用次表面散射模型,次表面散射模型中入射点和出射点之间的距离不可忽略。精确渲染那些散射度与吸收度非常低且差异较大的材质比如烟和雾,需要更复杂的方法,像蒙特卡洛模拟。
微表面理论(Microfacet Theory)
理论上讲,物体表面的不规则度对漫反射和镜面反射都有影响。然而实际中,由于材质内部的散射,粗糙度对漫反射的影响微乎其微。结果就是,漫反射的出射方向与物体表面粗糙度和入射方向都不相关。最常用的漫反射光照模型(Lambertian)完全忽略了粗糙度。
本文中,我们称物体表面不规则度为粗糙度。物体表面不规则度还有很多叫法,包括粗糙度、光滑度、光泽度、微表面,根据使用的PBR工作流不同而叫法不同。所有这些叫法描述的都是物体表面的同一种属性,即像素级的几何细节。
根据使用的工作流不同而使用粗糙度纹理或光滑度纹理来表示物体表面不规则度。基于物理的双向反射分布函数(BRDF)是以微表面理论为基础的。微表面理论假设物体表面由很多微小的朝向不同的平面细节组成,这些平面被称作微表面。每一个小平面按照自己的法线将光线反射到一个特定的方向,图07。
图07:基于微表面原理的基于物理双向反射分布函数那些法线方向刚好处于入射光方向和视角方向中间方向(半角向量)的微表面反射出来的光线是可见的。然而,并不是所有法线方向与半角向量方向相同的微表面反射出来的光线都可见,其中一些可能处于光源或视角的阴影中,如图08所示。
微观层面的表面不规则度会使光线发散。例如,分散的光线使得反射光变模糊。如图08所示,由于反射后的光线不平行,所以最终的镜面反射光是模糊的。
图08:分散的光线使得反射光变模糊颜色
我们看到的物体表面的颜色与光源发出的光的波长有关。这些波长的光部分被物体吸收,另一部分通过漫反射和镜面反射反射出来,最后反射出来的光的波长就是我们看到的颜色。
例如,苹果皮对红色光的反射程度大,只有红色波长的光从苹果皮反射回来,其他波长的光被吸收了,图09。
图09:红色波长的光反射至眼睛苹果还会有与光源颜色相同的镜面反射高光,因为像苹果皮这样的绝缘体,它们的镜面反射几乎与波长无关。对于这些材质,镜面反射不会收物体本身颜色影响。之后的章节中我们会讨论另一些不同类型的材质(金属和导体)。
Substance PBR shaders使用GGX微表面分布。
BRDF
双向反射分布函数(BRDF)是一个用来描述物体表面反射属性的函数。在计算机图形学中,有很多不同的双向反射分布函数模型——其中包括一些不是基于物理的。基于物理的双向反射分布函数,必须满足能量守恒和互换性(Reciprocity)。互换性即赫尔姆霍兹互换原则(Helmholtz Reciprocity Principle),对于同一个BRDF函数,交换入射光和出射光依然成立。
Substance的PBRshader中使用的BRDF是基于迪士尼反射模型的。这个模型使用了GGX微表面分布函数。GGX函数用于镜面反射分布效果非常好:它产生的高光有一个短的波峰和一个长的衰减拖尾,看起来更真实,图10。
图10:GGX和Blinn镜面反射分布——GGX效果更好能量守恒
能量守恒在基于物理渲染中起着至关紧要的作用。这一原则是说从物体表面发射出来的光线(包括反射和散射)总量小于表面接收到的光线总量。换句话说,物体表面反射的光线强度不可能大于入射到表面时的光线强度。作为美术人员,不需要关心怎么去保持能量守恒。这就是基于物理渲染的一大优点:能量守恒总是在shader中强制保持的,它是基于物理模型的一部分,这使得我们把精力放在艺术创作而不是物理规则上。
菲涅尔现象
菲涅尔反射因子,作为双向反射分布函数的一个系数,同样在基于物理着色中有着至关重要的作用。菲涅尔现象是由法国物理学家奥古斯丁.简.菲涅尔发现的,光线在物体表面反射的程度与视角相关。拿水池来举例,如果从上方直接看下去,视线垂直于水面,你能看到水池底部。我们称这样的视角为零度视角或法线视角,法线指的是物体表面的法线。如果从掠射视角看水池,视角几乎平行于水面,你会看到水面上的镜面反射变得很强烈,你完全无法看到水面下的情况。
在基于物理着色中,菲涅尔并不需要像传统着色那样由美术人员来控制。它也是由PBR shader进行处理的物理部分。当从几乎平行的视角看物体表面时,光滑表面在掠射角下有接近100%的反射比。
对于粗糙表面,在掠射角下反射比也会显著增加,但不会达到100%。造成这种情况最重要的影响因素是每个微表面的法线与光线的夹角,而不是整个表面的法线与光线的夹角。因为光线被分散到不同的方向了,所以反射变得柔和模糊了。在微观层面上讲,就像是所有微表面的菲尼尔现象的平均结果。
F0(0度角菲涅尔反射程度)
当光线以垂直于表面(0度角)射向物体表面,一部分光线会被反射。使用物体的折射率(IOR),可以计算出反射光的量,标记为F0(0度角菲涅尔)(图11)。而折射进物体表面的光线的量为1-F0。
图11:光滑绝缘体表面,F0反射2-5%的光线,掠射角时反射100%对于大多是绝缘体来说F0值得范围为0.02-0.05(线性值)。对于导体,F0值为0.5-1.0。物体表面的反射比是由折射率决定的,公式如下:
当我们创建纹理时,我们关心的时F0值。非金属(绝缘体)使用灰度值,而金属(导体)使用RGB颜色值。在基于物理渲染中,针对美术人员来说,通用光滑绝缘体表面,F0反射2%到5%的光线,掠射角时反射100%,图11。
不同绝缘体(非金属)的反射比差异并不明显,结合粗糙度后,实际的差异很难看出来。然而,值确实是不同的。图12用一张表展示了金属和非金属材质的F0值范围。从表中可以观察到非金属材质之间F0值差异并不明显。宝石材质是一个例外,F0值高一点。我们在之后讨论导体和绝缘体时还会继续谈到F0。
导体和绝缘体(金属和非金属)
在为PBR创建材质时,分清楚金属和非金属很有用。首先要看物体表面是否是金属。如果是,要遵循一些规则。如果不是金属,则需要遵循另外的规则。
当然,这只是一种简化的思路,因为有一些材质既不是金属也不是非金属,比如准金属,它们介于金属和非金属之间。但在创建材质的过程中,除准金属之外区分金属和非金属依然是一个不错的方法。为了给材质建立准则,我们必须首先知道要创建什么材质。使用PBR,我们来看一看金属(导体)和非金属(绝缘体)的属性,然后建立起一系列准则如图12所示。
图12:一些金属和非金属材质的F0值范围对于金属材质来说,折射光被吸收了,金属表现出来的颜色来自于反射光线,所以在我们的纹理中,不会给金属材质设置漫反射颜色。
金属
金属有良好的导热和导电性。导电金属中的电场为零,当由组成光波的电磁场碰到金属表面时,一部分光波被反射,而折射的部分全部被吸收。抛光金属的反射比非常高,达到70%-100%(图13)。
图13:金属的镜面反射反射比在70-100%之间一些金属会吸收特定波长的光线。比如黄金吸收可见光谱中位于高频端的蓝光,所以看起来是黄色。然而,由于折射光被吸收了,金属表现出来的颜色来自于反射光。所以,在我们的贴图中,不需要给金属指定漫反射颜色。举例来说,在镜面反射/光泽度工作流(specular/gloss workflow)中,金属的漫反射贴图(diffuse map)设置为黑色,而镜面反射贴图(specular map)中的反射比值则设为金属的颜色。金属的反射比是RGB值,可以由美术人员来调整。不过既然我们是使用基于物理的模型,我们需要使用在真实世界中测量到的金属反射比值来设置我们的贴图。
创建纹理时金属需要考虑的另一个重要方面是易腐蚀性。风化会大大影响金属的反射情况。如果金属生锈了,那它的反射性质就发生了改变。腐蚀的区域我们会把它当作绝缘体材质来处理,如图14中显示,在金属度贴图(metallic map)中腐蚀区域设置为黑色。我们在第二部分会将到,金属度/粗糙度工作流(metallic/roughness workflow)的着色器会把绝缘体的F0值硬编码为4%。图14中显示的腐蚀区域在设置漫反射颜色的基本色贴图(base color map)的值就是硬编码的4%。
图14:腐蚀区域当作绝缘体来处理,F0值为4%还有就是,喷漆的金属也要当作绝缘体而不是金属来处理。喷漆区域相当于在金属上面叠加了一层别的材质。只有没被漆覆盖暴露在外的原金属区域才能当作金属来处理。金属上面的脏点或其他覆盖物同此理。
正如本章开头所提到的,创建PBR材质时先明确材质是金属还是非金属非常重要。更准确地说,还应该包括金属的状态:是否喷漆,是否生锈,是否覆盖有其他物质比如污点油斑等。如果不是原始金属,则要作为绝缘体来处理。由于风化会影响金属的反射状态,可能会需要在金属和非金属之间做某种混合。
非金属
非金属(绝缘体)的导电性能很差。对于绝缘体,折射光会被散射和吸收(有的会重新透出物体表面),所以反射光线的量远小于金属,而且有漫反射颜色。
我们之前提到过,绝大部分的绝缘体通过折射率计算所得的F0值在2-5%之间。这些值在线性空间0.017-0.067(40-75sRGB空间)范围内,如图15。除了一些特殊的非金属材质比如宝石,绝大多数的绝缘体材质F0值不会超过4%。
图15:sRGB空间和线性空间的转换,使用伽马值2.2近似——详见线性空间渲染章节像金属材质一样,理论上我们需要使用真实世界测量的值来设置绝缘体材质的反射比,但是一些不透明材质的折射率是非常难获得的。然而,大多数绝缘体材质的反射比值之间差异很小,所以我们可以使用一些准则来为它们设置反射比值。我们将会在之后介绍。
常见的绝缘体由折射率计算所得的F0值在2-5%之间,如图15所示。
线性空间渲染
线性空间渲染是一个非常复杂的主题。本文中,我们采用一个简化的观点,线性空间渲染保证了光照计算的数学正确性。在线性空间环境下,光照交互可以用可靠的真实世界的方式来表达。在线性空间性,伽马值是1.0,施加的计算是线性的。为了使渲染出来的图像眼睛看起来是正确的,还需要对线性的伽马值做校正。
我们的眼睛对光线亮度的改变的感知是非线性的,意味着眼睛工作在伽马值大于1.0的环境下。人眼对暗色调的感知度强于亮色调。计算机显视器要根据人眼的感知度来显示图像使我们看起来正确,也就是说我们看到的显示器上的颜色使用了非线性的伽马值,或者说是在伽马空间(sRGB)。
颜色值得计算和针对颜色的运算需要在线性空间性进行。我们颜色贴图中的颜色值,和我们通过显示器上视图中的颜色选择控件选取的颜色值,是伽马编码的,在进行运算之前,有一个处理过程将它们转换为线性编码。在颜色管理工作流中,我们需要将使用到的纹理贴图进行标记,是线性编码还是sRGB编码。所有的计算在线性空间(伽马1.0)下进行,最后将渲染结果再转换到伽马编码空间(sRGB)。
更简化一点讲,如果贴图表示的时能看到的颜色(漫反射或镜面反射颜色),比如金属的色泽或者草的绿色,那么它应该是sRGB编码。如果贴图表示的时数据,比如表面有多粗糙或者材质是否金属,那它应该是线性编码。
Substance会自动将输入的sRGB编码转换成线性,也会自动对渲染到视口的计算结果做伽马校正。作为美术人员,在使用Substance软件的时候,我们通常不需要担心关于线性计算和转换的问题。
使用Substance集成插件的时候,这些关于线性空间的转换也会自动处理。然而,理解这个过程还是很重要的:当使用Substance导出的贴图而不是使用Substance材质时,你需要根据渲染需要手动处理这些转换。
从sRGB空间到线性空间转换的标准定义是:
处于简化计算的需要,本文中以及Substance Designer软件和Substance Painter软件中的所有转换,都使用简化(近似)的转换函数来代替:
PBR的主要特点
我们已经探讨了基于物理渲染背后的基本原理,现在我们可以得出PBR的主要特点了:
1、 能量守恒。反射光线不可能比入射光线更亮。能量守恒由着色器处理。
2、 菲涅尔。双向反射分布函数由着色器处理。对于大多数绝缘体,F0反射比值差异很小且范围在2-5%之间。金属的F0值较高,在70-100%。
3、 镜面反射由双向反射分布函数,粗糙度或光泽度贴图,和F0反射比决定。
4、 光照计算在线性空间下进行。所有以伽马编码的贴图如基本色贴图或漫反射贴图需要由着色器转换成线性,你需要在将贴图导入到游戏引擎或渲染器中时检查一下导入选项设置,以确保转换正确处理。那些描述表面属性如粗糙度、光泽度、金属度、高度图等贴图需要被解释成线性编码。
第二部分 创建基于物理渲染纹理的实践指南
在第一部分,我们从技术和理论的角度讲解了基于物理渲染。在第二部分,我们将讨论创建PBR纹理的实践应用,以及基于第一部分的理论基础建立一套实践准则。
我们首先从美术人员的角度重新定义PBR。然后我们将列出金属度/粗糙度工作流的准则。接下来是镜面反射/光泽度工作流,然后比较两种工作流的差异。最好两种工作流都通读,才能全面了解创建PBR纹理的准则。
在本文中,我们讨论的工作流用于Substance工具集,但是这些创建贴图的准则适用于任何其它创建基于物理渲染纹理和材质的软件。
基于物理渲染(PBR)是方法学而不是硬标准。它是一些指导准则而不是一成不变的真理,可以有许多不用的实现方式。每种实现方式使用的贴图类型和工作流也不尽相同。GGX双向反射分布函数最常用,但也存在其它选择。某些实现会改变贴图叫法,但内在的使用方式是相同的。
在这一部分,我们将讨论两种最常用的工作流,金属度/粗糙度工作流和镜面反射/光泽度工作流(图16)。用于创建PBR贴图的Substance工具集,包括Substance Designer、Substance Painter和Substance B2M,两种工作流都支持。Substance的金属度/粗糙度和镜面反射/光泽度PBR着色器使用GGX BRDF,同时没有对粗糙度/光泽度做任何值映射。然而,如果需要自定义的值映射,在Substance中可以很容易实现。
图16:金属度/粗糙度工作流和镜面反射/光泽度工作流Substance工具集还支持自定义着色器,你可以将Substance与任何自定义管线做适配。
两种工作流各自有优缺点,没有哪一种比另一种更优秀。保证创建出来的PBR贴图的正确性的是那些概念和准则,而不是工作流自身。两种工作流表达的时相同的内容,只是实现方式不同。
什么是PBR?
基于物理渲染(PBR)是一种着色和渲染方法,它提供了一种更为准确的表示光和物体表面之间交互的方法。有两种叫法,基于物理渲染(PBR)和基于物理着色(PBS)。根据讨论管线的哪个方面,PBS通常特指着色概念,而PBR特指渲染和光照。然而,两种表述说的都是以物理准确为立足点来表现物体的流程。
有什么优点?
作为美术人员,我们可以从美术和生产效率角度来看看PBR的优点:
1、PBR避免了设置反射率等表面属性时的猜测工作,因为它的方法学和算法是以准确的物理公式为基础的。所以创建真实感资源更容易些。
2、物体在所有光照条件下看起来都是正确的。
3、PBR提供了一个工作流使得创建的作品具有一致性,即便是不同的美术人员创作的。
对美术人员来说意味着什么?
作为美术人员,我们需要以一种不同以往的方式来看待这些描述表面属性的贴图,因为现在计算机硬件和渲染系统运行我们更精确地去模拟光线的物理行为。
我们需要抛开传统渲染工作流中漫反射贴图和镜面反射贴图的概念,因为传统的漫反射和镜面反射贴图只是用来近似模拟光线与材质交互的变通方法。
在PBR中,着色器负责处理能量守恒、双向反射分布函数等复杂物理规则,作为美术人员,我们需要创建符合物理原理的贴图。PBR的科学性省去了原先设置材质参数时需要做的猜测工作,使我们可以把大量精力放在创作层面上。虽然遵循一些规范以确保贴图的正确性很重要,但也不是说我们就要扔掉我们的艺术灵感。材质的特色正是由艺术视角带来,通过精心制作的细节和表现展示出来的。物理过程永远不应该是美术人员主要关心的事情。我们在一个更物理准确的环境下创作并不是意味着我们不能创作风格化作品。例如,迪士尼基于物理反射模型就是作为一个原则性的观点设计的。它更多是面向艺术家而不是严格的物理模型。知道原则并用来作为指导很重要,但不要被束缚住。
作为美术人员,我们需要以一种不同以往的方式来看待这些描述表面属性的贴图。它们是新的类型的贴图,需要遵循一些规范和准则。
金属度/粗糙度工作流
金属度/粗糙度工作流定义了一组通道,以纹理的方式提供给PBR着色器的采样器。金属度/粗糙度工作流特有的贴图包括基本色贴图(base color)、金属度贴图(metallic)和粗糙度贴图(roughness)(图17)。还有一些贴图是两种工作流所公用的,包括全局光遮蔽贴图(ambient occlusion)、法线贴图(normal),可能还有用于视差映射或位移映射的高度图(height map)(图18)。
图17:金属度/粗糙度工作流 图18:高度图和环境光遮蔽贴图作为着色器的可选输入项在金属度/粗糙度工作流下,基本色贴图中设置金属的反射比和非金属的漫反射颜色。掠射角反射由BRDF处理。金属度贴图作为一个遮罩来使用,用来区分基本色贴图中的数据是解释为金属还是非金属。绝缘体的F0值无法手动更改,而是由着色器定义。当着色器发现在金属度贴图中值为黑色时,它将这一区域当作绝缘体来处理,使用4%(0.04)的反射比(图19)。
图19:黑色表示非金属,使用0.04(4%)反射比我们在第一部分中谈到过,4%的反射比覆盖了绝大多数的绝缘体材质。一定要记住这一点,所有的这些如绝缘体F0、金属的反射比和漫反射颜色亮度范围等值,都是从实际测量数据中得出的。我们将给每一个贴图类型,基于测量数据,建立一系列准则。
在第一部分,我们讨论过能量守恒的概念,即从物体表面反射的光线不可能亮过射入物体表面的光线。实现的时候,一般由着色器来控制能量守恒。Substance中就是这样的。只要使用金属度/粗糙度工作流,能量守恒定律就不可能被打破。漫反射和镜面反射之间的平衡由金属度遮罩贴图控制,所以不可能出现漫反射和镜面反射组合后多于接收到的光线这种情况。
金属的反射比和非金属的漫反射颜色一起放在基本色贴图中。
绝缘体F0
普通绝缘体材质的F0值一般设为0.04(线性空间)4%。在金属度/粗糙度工作流中,这个值是硬编码在着色器中的。
在某些金属度/粗糙度工作流的实现中,比如Substance工具集和虚幻4引擎,提供了一个反射比控制接口,允许艺术家更改绝缘体的F0常量值。Substance提供了一个名称为“specularLevel”的输出参数给金属度/粗糙度PBR着色器,它的表示范围为0.0-0.08,见图20。这个参数传给着色器时是映射到0.0-1.0范围的,0.5表示反射比4%。
图20:Specular Level输出表示了着色器中绝缘体F0值范围0.0-0.08如果你需要手动设置绝缘体的F0值,Substance Designer软件中你可以使用Substance graph的specularLevel输出节点,Substance Painter软件中你可以使用specularLevel通道,见图21。在镜面反射/光泽度工作流中,你可以完全控制F0值,那时我们还会继续深入讨论绝缘体的F0值。
图21:使用specular level通道自定义绝缘体F0值
基本色贴图(RGB-sRGB空间)
基本色贴图是一张RGB贴图,包含两种类型的数据:非金属的漫反射颜色值和金属的反射比,见图22。漫反射颜色代表绝缘体的反射波长,如第一部分中讨论。如果金属度贴图中标识为金属(白色),则基本色贴图中的数据代表反射比。
图22:基本色贴图中包含非金属的漫反射颜色和金属的反射比创作准则
基本色贴图的色调要平缓一些,和传统漫反射贴图相比,对比度要低一些。不建议使用太亮和太暗的值。物体的色调要比我们记忆中的样子轻一点。我们可以把这个明暗范围可视化表现出来,在substance中,最暗的材质时煤,最亮的材质时干净的白雪。煤很暗,但它并不是0.0黑。我们需要在一个亮度范围内选取颜色。
说到亮度范围,我们指的是绝缘体的反射颜色。图23中,你可以看到一个值低于正确亮度范围的例子。对于亮度下限来说,不应该低于30-50sRGB。容忍度宽松时可以设置亮度下限为30sRGB,严格时设置为50sRGB。对于亮度上限,不应该高于240sRGB(图23)。
图23:绝缘体的基本色取值范围(反射颜色)我们说过基本色贴图中包含的是绝缘体材质的反射颜色信息,需要避免在其中包含光照信息,比如环境光遮蔽。有一个例外就是可以添加微观遮蔽信息,因为这是着色器无法仅通过环境光遮蔽通道来表达的细节层,见图24。然而,往基本色贴图中添加微观遮蔽时,仍然要受亮度值范围限制。
对金属来说,基本色贴图中的值是反射比,需要从真实世界测量值中获得。这些值的范围在70-100%,映射到sRGB空间是180-255。
图24:基本色贴图的例外情况,包含了微观遮蔽光照信息在Substance PBR实用工具章节,我们会将Substance提供的用于预设常用材质F0值的工具。Sébastien Lagarde提供的金属度/粗糙度图标也是非常好的资源(Lagarde 2014)。
基本色贴图中的金属的反射比数据需要从真实世界测量数据中获得。
●基本色颜色值代表的是非金属材质的漫反射颜色和金属材质的反射比。
●基本色贴图中应避免包含光照信息,微观遮蔽除外。
●非金属材质颜色值最暗不应低于30sRGB(最大容忍)到50sRGB(严格范围)。
●非金属材质颜色值最亮不应高于240sRGB。
●金属材质反射比值要设置的高一点,70-100%,映射到sRGB空间180-255。
基本色贴图中包含的是金属的反射比值。在下一节关于金属度贴图的内容中会看到,如果污点或氧化层添加到基本色贴图中,将导致金属的反射比降低超出一定范围,不能再被当做纯金属。这时金属度贴图也必须加入这些污点或氧化层信息,金属度的值需要相应减小一些表示这些区域不再是纯金属。在图25中你会看到被腐蚀的金属在金属度贴图中设为黑色,当做非金属来处理。污点层在金属度贴图中采用过渡的灰色值来表示。当金属上覆盖了一层非金属层比如污点后,金属度贴图就不再总是二值化的,非0.0(黑)即1.0(白)了。
金属度贴图的运算方式类似于一个遮罩,它告诉着色器怎样解读基本色贴图中的信息。
图25:创建金属度贴图是必须将金属的污点和氧化层考虑在内金属度贴图(灰度值-线性空间)
金属度贴图用来定义材质中那些区域是纯金属。它是一张灰度图,当作一个遮罩来使用,告诉着色器怎样解读基本色贴图中的信息。
金属度贴图中的数据不包含直接作为材质属性值使用的真实世界数据。它仅仅是向着色器描述基本色贴图中哪些区域需要被解读成反射颜色(非金属),哪些区域需要被解读成金属的反射比。在金属度贴图中,0.0(黑色——0sRGB)表示非金属,1.0(白色——255sRGB)代表纯金属。当只有纯金属和非金属是,金属度贴图常常是二值化的:非黑即白,金属或非金属。实际使用时,当着色器在金属度贴图中看到白色,它就会在基本色贴图中相应区域里去取金属的反射比值,见图26。
图26:金属度贴图中金属区域在基本色贴图中表示纯金属的反射比创作准则
金属表面有两个重要方面与贴图相关:第一,它们的反射比值在70-100%;第二,金属可能被腐蚀。我们分别从这两方面来看创作准则。
金属区域的反射比必须在70-100%之间。
纯金属
金属度贴图的取值为0或1,金属或非金属,用来定义纯的,抛光的金属状态。通常的做法是,将纯金属区域在金属度贴图中的灰度值设置在235-255sRGB之间。在这个范围之内的金属区域相应在基本色贴图中的反射比值要在70-100%之间,也就是映射到sRGB空间的180-255sRGB,如图27所示。再一次说明,这些值是基于真实世界测量数据的。
图27:金属度贴图中金属区域的值要设置为>=235sRGB腐蚀区域或绝缘层
如果物体表面风化了,则需要考虑金属的生锈,或者受其他环境因素方面影响,比如污垢。这些情况下,金属需要按非金属处理。喷漆的金属也一样。如果喷漆的金属其中一部分的漆被刮掉了,则漏出来的部分当作纯金属(在金属度贴图中时白色),有漆的部分是非金属(在金属度贴图中是黑色),如图28所示。
图28:喷漆金属当作非金属金属度贴图中可以表示金属和非金属的混合状态,用过渡的灰色来表示。如果金属度贴图中的灰度值低于235sRGB,你需要在基本色贴图中降低该区域的反射比值。见图29中所示,纯金属表面部分被一层污垢覆盖。污垢是绝缘体,如果金属度贴图中污垢区域还保留纯白色值的话,这些污垢区域在基本色贴图中的值将被当作金属反射比来使用。但污垢的颜色远低于抛光金属表面反射比所需要的值70-100%,违反了物理准则。将污垢区域在金属度贴图中相应的值降低一些,就能创建出合适的混合了金属与非金属的反射比。
图29:金属度贴图中表示金属区域的灰度值应该>=235sRGB污垢层的透明度可以用来表示基本色贴图中反射比值的降低程度。这里没有硬性的标准。本质上,相当于是从一个高反射比表面(导体)变到了一个低反射比表面(绝缘体),这种变化程度视情况而定。
Substance工具集提供了非常简单易用的风化效果,以及通过多通道支持将这些效果简单应用到贴图通道中。Substance Designer和Substance Painter运行你更改Substance效果生成器的参数,来自动调整Substance效果影响的通道。
例如,在Substance Designer中,你可以使用Material Color Blend结点将污垢效果等应用到多个贴图通道上。在Material Color Blend结点上,你可以控制通过调整金属度值滑块控件来控制金属上的污垢层效果,如图30所示。
图30:Material color blend结点。低金属度值表示一薄层污垢(污垢和金属的过渡状态)氧化的或者生锈的金属需要当作非金属处理,喷漆的金属同样。
●金属度贴图中的黑色(0.0)是非金属,白色(1.0)是金属。可以有过渡的灰度值表示氧化区或污垢。
●如果金属度贴图中的值低于235sRGB,在基本色贴图中需要降低该区域对应的反射比值。
粗糙度贴图(灰度值-线性空间)
粗糙度贴图描述造成光线发散的物体表面不规则度,如图31。在第一部分中讨论过,反射光方向会基于表面粗糙度产生随机变化。这会改变光线的方向,但光线强度保持不变。粗糙表面的高光看起来大且模糊。光滑表面则使得镜面反射聚焦,看起来更亮更强烈,即使是反射的光线总量相同。
图31:粗糙度贴图描述造成光线发散的物体表面不规则度在粗糙度贴图中,黑色(0.0)表示光滑表面,白色(1.0)表示粗糙表面。粗糙度贴图是一个非常有创造力的贴图,它允许美术人员可视化定义表面属性。允许你发挥自己的创造力,讲一个关于物体表面情况的故事。它的环境是什么样的?是被精心照顾的还是漠不关心的?是暴露在恶劣环境中的吗?物体表面的状况可以讲述周边环境的状况,进而关系到了你的资源的整体设计和想要创作的世界。
粗糙度是一个高度主观的范畴,完全由作为美术人员的你来掌控。一个好的创作粗糙度贴图的起点是法线贴图。法线贴图常常包含物体表面的重要细节,这些也应该在粗糙度贴图中表现出来。
创作准则
尽情发挥创造力,讲一个关于物体表面的视觉故事。
分辨率和纹素密度
使用金属度/粗糙度工作流的一个弊端就是会产生白边瑕疵,如图32所示。这一弊端在镜面反射/光泽度工作流中同样存在。只不过在镜面反射/光泽度工作流中的弊端没那么明显,因为它的现象刚好是相反的:是黑边而不是白边,见图33。
这个边缘瑕疵是由纹理插值导致的,出现在两种材质的过渡区域,在这里绝缘体材质和高亮金属材质有很强的对比度。如图34所示。在金属度/粗糙度工作流中,基本色贴图中金属度反射比的值很亮,与非金属的漫反射颜色插值后,就产生了白边。在镜面反射/光泽度工作流中,漫反射贴图中金属对应的值是黑色,因为金属没有漫反射颜色。黑色值与非金属漫反射颜色插值,就形成了黑边。
图32:金属度/粗糙度工作流的弊端就是会产生白边瑕疵 图33:镜面反射/光泽度工作流的弊端就是会产生黑边瑕疵 图34:瑕疵出现在两种材质的过渡区域贴图分辨率和纹素密度会直接影响边缘瑕疵的可见性。举例来说,如果你使用了硬笔刷来创建金属和非金属之间的过渡区域,低的贴图分辨率会使边界软化,从而加剧边缘瑕疵。如果UVs没有基于贴图分辨率作缩放来适配纹素密度,也会导致上述低分辨率问题。给UVs提供一个合适的纹素密度是优化边缘瑕疵的最好方法,如图35所示。
图35中,两张贴图用的都是2048像素分辨率,然而,右边图像显示的UV排版较差,纹素密度较低。
贴图分辨率和纹素密度对边缘瑕疵的可见性有直接影响。
图35:给UVs提供一个合适的纹素密度是优化边缘瑕疵的最好方法创作准则
纹素密度和分辨率影响着金属度/粗糙度工作流的白边瑕疵的出现。为了优化瑕疵,确保为你的UVs提供合适的纹素密度来和贴图分辨率匹配。
金属度/粗糙度工作流的优缺点
优点
●使用简单,不容易因为设置了错误的绝缘体F0数据而导致错误。
●贴图占用内存少,因为金属度贴图和粗糙度贴图都是灰度值贴图。
●适用范围更广的工作流
缺点
●创建贴图时无法控制绝缘体的F0。然而,大多数的实现提供了额外的控制接口来重写默认的4%值。
●边缘瑕疵更明显,尤其是在低分辨率情况下。
镜面反射/光泽度工作流
同金属度/粗糙度工作流一样,镜面反射/光泽度工作流也定义了一组通道,以纹理的方式提供给PBR着色器的采样器。镜面反射/光泽度工作流特有的贴图包括漫反射贴图(diffuse)、镜面反射贴图(specular)和光泽度贴图(glossiness)(图36)。
图36:镜面反射/光泽度工作流虽然镜面反射/光泽度工作流使用的贴图名字比如漫反射贴图和镜面反射贴图听起来很熟悉,但是必须要知道这些贴图和传统着色中用到的同名贴图是有区别的。Substance使用diffuse这个名称,另一些应用中可能使用albedo这个名称来表示漫反射贴图。早先提到过,PBR着色器还会使用环境光遮蔽贴图、法线贴图、可能还有用于视差映射的高度贴图,我们将在两种工作流公用的贴图章节中讨论。
在镜面反射/光泽度工作流中,金属的反射比和非金属的F0值放在镜面反射贴图中。在镜面反射/光泽度工作流中,有两张RGB贴图:一张用于漫反射颜色(漫反射贴图),一张用于反射比(镜面反射贴图)。有了镜面反射贴图,我们只通过贴图就可以控制绝缘体材质的F0值。
我们在金属度/粗糙度工作流中说过,Substance的PBR着色器控制能量守恒。在镜面反射/光泽度工作流中,能量守恒变得更重要了,因为通过镜面反射贴图可以完全控制绝缘体F0值。这就意味着贴图更容易引入错误的值。例如,一个白色(1.0)的漫反射值和一个白色(1.0)的镜面反射值组合,会反射出比接受到的光线更多的光线。因此,这样的贴图就不在与实际情况相一致了。
正如你所看到的,贴图中的数据内容与金属度/粗糙度工作流是一样的,我们遵循同样的准则,不同的只是所使用的贴图。如前所述,所有数据值,如绝缘体F0、金属反射比、漫反射颜色的亮度范围,都是从实际测量数据中得到的。我们将对每一种贴图,基于测量数据讨论它们的准则。这一章节中我们不再重复在金属度/粗糙度章节中讲过的详细内容,更多关注镜面反射/光泽度工作流与金属度/粗糙度工作流的不同的地方以及需要注意的地方。
漫反射贴图(RGB-sRGB空间)
像金属度/粗糙度工作流中的基本色贴图一样,漫反射贴图中放的也是漫反射颜色,然而,其中不包含任何反射比值。
创作准则
漫反射贴图中只有漫反射颜色。金属区域在漫反射贴图中是黑色(0.0),因为金属没有漫反射颜色(图37)。生锈的金属区域是有颜色的,因为不在被当作纯金属来处理了。金属上覆盖污垢或其他绝缘体层时同理。
图37:漫反射贴图中纯金属区域的值为黑色(0.0),因为金属没有漫反射颜色漫反射贴图中关于色调的准则与基本色贴图相同,金属区域除外,金属区域的0.0(黑色)值是允许的,不受亮度范围准则的约束。
●漫反射贴图中的颜色表示非金属材质的漫反射颜色,对于纯金属来说是黑色(0.0)。
●颜色中不应该包含光照信息,微观遮蔽除外。
●颜色亮度值不能低于30sRGB(高容忍范围)或50sRGB(严格范围),除了纯金属区域的黑色。
●颜色亮度值不能高于240sRGB。
镜面反射贴图(RGB-sRGB空间)
镜面反射贴图中定义了金属的反射比和非金属的F0值(图38)。这张RGB贴图允许给使用到的绝缘体材质设置不同的值。这与金属度/粗糙度工作流是不同的,在那里,绝缘体F0值是硬编码的4%,只能通过“specularLevel”通道来修改。同我们在金属度/粗糙度工作流中讲到的一样,F0数据必须是从真实世界测量数据中的到的。在这里,绝缘体的F0值可以更暗一点,金属的反射比是某种颜色表示对不同波长光线的吸收性。金属和非金属的F0值都在一张RGB的镜面反射贴图中。
镜面反射贴图允许给使用到的绝缘体材质设置不同的值。
图38:镜面反射贴图定义了金属的反射比和非金属的F0创作准则
既然镜面反射贴图中同时包含了金属和非金属的F0值,我们将分别针对每种材质类型来讨论。
纯金属
F0值应该基于真实世界数据。我们在金属度贴图中讲过,如果金属表面生锈了,或者覆盖了其它绝缘体层,则反射比值应该适当减小。在镜面反射/光泽度工作流中,纯金属表面的污垢区域或氧化区域,需要提升在漫反射贴图中颜色亮度值,同时降低在镜面反射贴图中的反射比值,如图39所示。图39同时举了一个纯金属表面污垢层的例子。污垢区域在镜面反射贴图中要设置成适当的绝缘体F0值,在本例中,我们使用的是0.04(4%)。
图39:纯金属表面的污垢区域或氧化区域,需要提升在漫反射贴图中颜色亮度值,同时降低在镜面反射贴图中的反射比值绝缘体
绝缘体材质的F0值也在镜面反射贴图中。这里你可以完全控制F0值,但一定要使用正确的数值。我们在第一部分中讨论过,非金属(绝缘体)导电性能差,折射光被散射和吸收(有些会重新透出表面),所以这些材质反射的光线量较金属要少的多。常见绝缘体通过折射率计算所得的F0反射比在2-5%之间。除了宝石,常见绝缘体材质的F0值在0.02-0.05(线性空间)范围内(图40)。
图40:常见绝缘体反射比值在2-5%范围内sRGB空间下,我们使用40-75sRGB之间的值,与线性空间0.02-0.05(2-5%)范围重合。
如果你无法知道某个特定材质的折射率,你可以假设它的反射比为4%(0.04-塑料)。宝石是一个例外,反射比范围在0.05-0.17(线性空间),如图40所示。在金属度/粗糙度工作流中,使用specularLevel通道时,着色器将其映射到0.0-0.08(线性空间)范围内,零用于空气,如图40所示。
●镜面反射贴图中包含了绝缘体的F0和纯金属的反射比。
●绝缘体反射的光线量远小于金属。常见绝缘体的反射比在2-5%之间。sRGB空间下,范围为40-75sRGB,相当于线性空间0.02-0.05。
●常见宝石的反射比范围在0.05-0.17(线性空间)。
●常见液体的反射比范围在0.02-0.04(线性空间)。
●纯金属的反射比在70-100%,映射到180-255sRGB。
●如果找不到某种材质的折射率,可以使用4%(0.04-塑料)。
光泽度贴图(灰度值-线性空间)
光泽度贴图描述造成光线发散的物体表面不规则度(图41)。在这一贴图中,黑色(0.0)表示粗糙表面,白色(1.0)表示光滑表面。它与金属度/粗糙度工作流中的粗糙度贴图刚好相反。它的创作准则参考粗糙度贴图相关内容。
图41:光泽度贴图描述造成光线发散的物体表面不规则度创作准则
再一次,尽情发挥创造力,讲一个关于物体表面的视觉故事。
贴图分辨率和纹素密度
我们之前讨论过两种工作流下边缘瑕疵的产生原因。在金属度/粗糙度工作流中做了深入探讨,因为边缘瑕疵在那种工作流下更明显。我们也提到过,在镜面反射/光泽度工作流中,因为纯金属没有漫反射颜色,所以在漫反射贴图中存在黑色。这些黑色和非金属的漫反射颜色插值后,会产生黑边瑕疵,见图42。
图42:镜面反射/光泽度工作流的弊端是会产生黑边瑕疵再一次说明,贴图分辨率和纹素密度对边缘瑕疵的可见性有直接影响。如果使用硬笔刷创建金属和非金属的过渡区域,低分辨率的贴图会使边缘软化,进而加剧瑕疵。如果UVs没有按照贴图分辨率做合适的纹素密度适配,也会造成低分辨率问题。给UVs提供一个好的纹素密度是控制边缘瑕疵的最好方法(图43)。
图43:给UVs提供一个好的纹素密度是优化边缘瑕疵的最好方法创作准则
纹素密度和分辨率影响着镜面反射/光泽度工作流的黑边瑕疵的出现。为了优化瑕疵,确保为你的UVs提供合适的纹素密度来和贴图分辨率匹配。
镜面反射/光泽度工作流的优缺点
优点
●边缘瑕疵不明显。
●镜面反射贴图中可以更好地控制绝缘体F0。
缺点
●因为镜面反射贴图中可以控制绝缘体F0,使得出错的可能性增加。如果着色器中没有正确处理,可能打破能量守恒定律。
●多使用了一张RGB贴图,内存使用更大。
●由于使用了与传统工作流相同的贴图名称,但是要求的数据不同,所以容易造成困惑。需要更多的基于物理准则来约束,比如正确的绝缘体F0,纯金属的黑色漫反射颜色,可能还需要考虑能量守恒如果着色器中没有做处理的话。
两种工作流共用的贴图
环境光遮蔽(AO)
环境光遮蔽贴图定义了物体表面某点可以接收到多少环境光。它只影响漫反射光,不影响镜面反射光。某些引擎,像虚幻4引擎,提供了使用屏幕空间反射来模拟局部反射的选项。最好是结合屏幕空间反射来使用环境光遮蔽。
在Substance的PBR着色器中,环境光(生成自环境映射)与AO相乘。AO贴图作为一个可选通道提供给PBR着色器的纹理采样器(图44)。AO不应该烘焙到其他纹理贴图中,只能通过自己的通道提供给着色器。
AO仅影响漫反射光,不应遮蔽镜面反射光。
图44:AO不可以烘焙进其他纹理贴图中,只能通过自己的通道提供给着色器创建环境光遮蔽贴图
在Substance Designer和Substance Painter中,AO可以从网格中烘焙生成,或者使用集成的烘焙工具从法线贴图转换生成。Substance Designer和Substance Painter中还都提供了一个HBAO结点/滤镜,用来从高度图生成horizon-based环境光遮蔽,能生成与光线追踪烘焙近似的结果,如图45所示。
图45:使用Designer中的HBAO结点或Painter中的HBAO滤镜可以生成与光线追踪烘焙近似的结果高度图
高度图在渲染中一般用于位移映射。它可以用于视差映射,相比法线映射和凹凸映射,能产生更真实的表面起伏细节。Substance使用了relief mapping视差映射算法。高度图作为PBR着色器的一个可选输入通道,以贴图的方式提供给PBR着色器的纹理采样器。在Substance Designer中,你可以使用parallax occlusion或者tessellation shader(图46)。在Substance Painter中,你可以使用displacement通道来控制视差遮蔽。
图46:高度图作为PBR着色器的一个可选输入通道,以贴图的方式提供给PBR着色器的纹理采样器创建高度图
同AO一样,高度图也可以在Substance Designer或Substance Painter中使用集成的烘焙工具从网格烘焙生成。在Substance Designer中,你可以使用一个结点从法线贴图生成高度图(图47)。在Substance Painter中,你可以直接绘制高度细节(图48)。
图47:使用法线转高度结点从法线生成高度图 图48:直接在网格上绘制高度细节将高度图用在实时着色器中时,最好减少贴图中的高频细节内容。高度图是用来表示几何模型表面偏移的大体轮廓的。一个好的方法是使用经过模糊的贴图来突出轮廓而减少高频细节。使用法线贴图来提供高频细节,而使用高度图来表示偏移的轮廓(图49)。如果高度图是在光线追踪渲染器用作位移映射,则高频细节是需要的。
图49:法线贴图提供高频细节,高度图提供轮廓法线贴图
法线贴图用于模拟物体表面细节。它是一张RGB贴图,每一个通道分别对应表面法线的X、Y、Z坐标。它可以用来存储高精度模型到低精度模型的投影细节。在Substance软件中可以烘焙生成法线贴图或者从高度图转换生成法线贴图。
创建法线贴图
在Substance Designer和Substance Painter中可以使用集成的烘焙工具从网格烘焙生成法线贴图。在Substance Designer中,可以使用法线结点将高度图转换为法线贴图,如图50所示。在Substance Painter中,可以直接在3D视口绘制法线数据(图51)。
图50:法线结点可以从高度图生成法线图 图51:法线通道可以用来绘制法线数据Substance PBR实用工具
在本章中,我们将讨论一些Substance的实用工具,可以帮助我们创建PBR贴图和设置正确的反射比值。这些工具是基于本文的那些准则和概念创建的。
Substance Designer
PBR Base Material
这是Substance Designer中的一个结点,是一个用来创建基础材质的实用工具,可以在Material Filters > PBR Utilities下找到,如图52所示。它支持金属度/粗糙度和镜面反射/光泽度两种工作流,而且提供了一些常用纯金属材质的预设。还允许你设置非金属的漫反射颜色。根据你使用的工作流控制粗糙度或光泽度,有非常多的选项可以设置。你可以使用贴图输入来设置材质的基本色、法线、高度等通道。
图52:用来创建基础材质的PBR实用工具,实用预设值或自定义贴图作为输入Dielectric F0
这个结点输出常见绝缘体材质的F0值(图53),同样可以在Material Filters > PBR Utilities下找到。你可以选择预设值,也可以使用结点的IOR输入来通过设置IOR计算F0值。它是为绝缘体材质设计的,可以用于镜面反射/光泽度工作流。
图53:用于计算绝缘体F0的PBR实用工具,使用预设值或自定义IOR作为输入Metal Reflectance
这个结点输出常见纯金属材质的反射比值。在Substance Designer结点库中Material Filters > PBR Utilities路径下。可以选择一些金属的预设值,见图54。
图54:包含金属反射比预设值的PBR实用工具PBR Metal/Roughness Validate
这个结点用在金属度/粗糙度工作流中,用来检查基本色贴图和金属度贴图中的错误数据(图55)。在Material Filters > PBR Utilities下可以被找到。这个结点的输出是一张热度图,从红色>黄色>绿色,红色表示错误值,绿色/黄色表示正确值。对于金属,它检查基本色贴图中标识为金属区域相应的F0值(要大于235sRGB)。热度图会显示出F0值太低的区域。对于非金属的漫反射颜色,它检查亮度范围是否正确。
图55:用来检查漫反射颜色/金属反射度的PBR实用工具,输出一张热度图来显示正确/错误值PBR Safe Color
这个结点用来校正基本色贴图或漫反射贴图中的值,如图56所示。它确保绝缘体的漫反射颜色亮度值在正确的范围内。可以在Material Filters > PBR Utilities下找到。
图56:用来检查基本色贴图和漫反射贴图亮度范围的PBR实用工具Conversion
BaseColor_metallic_roughness_converter
这个结点将金属度/粗糙度工作流生成的贴图转换成各种渲染器所使用的贴图,可以在Material Filters > PBR Utilities下找到。支持的渲染器包括:
●Vray(GGX)
●Corona
●Corona 1.6
●Redshift 1.x*
●Arnold 4(aiSurface)*
●Arnold 4(aiStandard)*
●Renderman(pxrSurface)
*Arnold 5支持基本色贴图/金属度贴图/粗糙度贴图工作流。
*Redshift 2.x支持基本色贴图/金属度贴图/粗糙度贴图工作流。
Substance Painter
PBR Metal/Roughness Validate (filter)
这个滤镜用在金属度/粗糙度工作流中,用来检查基本色贴图和金属度贴图中的错误数据(图57)。这是一个免费的滤镜,可以从Substance Share上下载。
https://share.allegorithmic.com/libraries/824
这个滤镜的输出是一张热度图,从红色>黄色>绿色,红色表示错误值,绿色/黄色表示正确值。对于金属,它检查基本色贴图中标识为金属区域相应的F0值(要大于235sRGB)。热度图会显示出F0值太低的区域。对于非金属的漫反射颜色,它检查亮度范围是否正确。
要在Substance Painter中使用它,就需要将它导入到Substance Painter工程中,并标记为Filter类型,或者将它拷贝到你的Shelf目录下的Filter文件夹中。
图57:用来检查漫反射颜色/金属反射度的PBR实用工具,输出一张热度图来显示正确/错误值Substance输出和渲染
Substance Source上的Substance材质同时支持金属度/粗糙度和镜面反射/光泽度两种工作流。这些材质用于那些支持实时的基于物理的着色器中,比如虚幻4和Unity。基本色/金属度/粗糙度材质可以用于支持金属度工作流的光线追踪渲染器比如Arnold中。镜面反射/光泽度贴图只能用于实时着色器。根据使用的渲染器不同,有的可以直接使用基本色/金属度/粗糙度贴图,有的需要做一些转换。
从Substance Share上下载到的自定义材质或资源可能没有某个制定渲染器的合适贴图输出,因为它们大多只包含基本色/金属度/粗糙度贴图输出。所以你需要清除你的材质需要的输入类型,然后才能正确定制Substance的材质输出来转换成你需要的类型。
例如,在Arnold 5中你可以直接使用金属度/粗糙度贴图。然而,对于Vray材质,你需要将金属度/粗糙度工作流的输出贴图转换成镜面反射贴图和1/IOR贴图。Substance Painter支持一些第三方渲染器配置,如图58所示。
图58:Substance Painter的导出设置支持流行渲染器诸如Arnold、Vray、Keyshot、Corona、RedshiftSubstance集成插件的目的就是自动将Substance的输出材质转换成适用于特定渲染器。例如,3ds Max Substance插件有用于Arnold、Vary和Corona的预设。选择某个预设就可以将Substance输出自动转换为这些渲染器所使用的格式(图59)。
图59:使用Corona预设将自动转换Substance输出并创建Corona材质想要获取更多关于Substance Painter和Substance Designer(Substance材质)用于第三方渲染器的相关信息,请参阅Substance官方的渲染文档。
https://support.allegorithmic.com/documentation/display/integrations/Rendering
附录-图表
表面是金属吗?
把物体表面分成金属和非金属两类很有帮助。在开始创建纹理之前,先要考察材质是否金属。带着这个问题,你可以在创建材质过程中遵循一些我们讲过的准则,见图60和61。图60使用金属度/粗糙度工作流,图61使用镜面反射/光泽度工作流。
图60:表面是金属吗?金属度/粗糙度工作流 图61:表面是金属吗?镜面反射/光泽度工作流反射比值
图62显示了绝缘体的F0值范围。绝缘体反射的光线量少于金属。常见绝缘体材质的反射比在2-5%之间。sRGB空间下,在40-75sRGB之间,线性空间下0.02-0.05范围。
图62:常见绝缘体的F0值在图63中,既有绝缘体的F0值也有金属的反射比值。对于金属来说,反射比在10-100%之间,映射至sRGB空间180-255sRGB。
图63:绝缘体的F0值和金属度反射比值从sRGB空间到线性空间的转换使用伽马2.2近似。详见第一部分线性空间渲染相关章节。
正确值/错误值对比
在图64中,举了一个金属度/粗糙度工作流下创建的正确贴图和错误贴图对比的例子。在金属度贴图中,污垢层被错误标记为纯金属了。还有,基本色贴图中金属的反射比设置的太低,不在10-100%范围内。
图64:正确和错误贴图对比——金属度/粗糙度工作流1.金属度贴图中污垢层错误标记成了纯金属2.基本色贴图中金属的反射比设置的太低
网友评论