PBR指南第一部分:光与物质:基于物理渲染和着色的理论

文章来源:https://academy.allegorithmic.com/courses/9898b6ed-5830-43c2-84eb-eda6aeed50c9

THE PBR GUIDE BY ALLEGORITHMIC – VOL. 1

光与物质:基于物理渲染和着色的理论

阅读Substance 学院PBR指南第二部分

基于物理渲染和着色的理论

光是一个复杂的现象,它可以表现为光波和粒子特性,因此,我们已经创建的不同的模型可以描述出它的表现形式。

对于纹理艺术,我们专注于光线模型,它描述出光与物质的相互作用。了解光线如何与物质表面相互作用非常重要,因为我们的工作就是创建描述出物体表面的纹理,我们创建的纹理和材质与虚拟世界的光线相互作用,我们要了解更多的是光的表现形式,纹理看起来会更好。

在这个指南中我们将会讨论基于物理渲染(PBR)的理论。首先检查光线的表现形式然后着手于定义PBR的主要特征

光线

光线模型表明,光线在均匀的透明介质中具有直线的轨迹,如空气。光线模型也表明光线在遇到不透明物体等表面,或者穿过不同的介质如从空气到水里的时候将会以可预测的方式表现出来。

这实现了光线从开始的一点移动到另一点的路径可见性,在这里它变成另外一种形式的能量,就像热量。

光线射到介质表面被称为入射光线,与此同时形成的角度被称为入射角。(如图01)。

图01:入射角,入射光线和反射光线

光线入射到两个介质之间的平面界面上。当光线照射介质表面的时候,可能会发生以下一种或两种情况:

  • 反射光线脱离表面以另一种不同的方向运行。它遵循反射定律,反射角度等 于入射角度(反射光线)。
  • 光线从一个介质穿过到另一个以一条直线的轨迹运行(折射光线)。

在这一点,光线的运行分为两个方向:反射和折射。在介质表面,光线不是反射就是折射,它可以最终被任何介质吸收。但是,在材质表面不会发生光线被吸收这种事情。

吸收和散射(透明度和半透明度)

当碰上不均匀的材质或半透明材质时,光线可以被吸收或者散射:

当光线被吸收时,光线强度会减弱随着它变成另外一种能量的形式 – 通常是热量。它颜色的变化取决于波长上吸收的光量,但是光线的方向不发生变化。

当光线散射,光线的方向会随机变化,偏差量取决于材质。随机散射光线的方向,不会改变其强度。耳朵就是表明这种现象一个很好的例子。耳朵很薄(吸收很少),所以你可以看到光线从耳朵背面散射出来的光线,如图02所示。

如果光线没有散射并且吸收很少,那么光线可以直接穿过介质表面。玻璃就像这种情况。例如,可以想象你在一个干净的泳池中游泳,睁开眼睛,透过清澈的水你可以看到很远的距离。然而,如果在相同的泳池中相对水是污垢的,污垢颗粒会散射光线并降低水的清澈度,这样你将会看到被缩短的视觉距离。

其他光线碰到这种介质/材质,其吸收/散射的光线更多。介质的厚度在光线吸收和/或者散射过程中起着很重要的作用。可以使用厚度贴图来描述着色器里物体的厚度,如图03所示。

图03:厚度贴图常用于Substance Painter中子集表面的光线散射
图02:耳朵背后散射出来的光线

漫反射和高光反射

高光反射指的是在介质表面反射的光线,在光线部分讨论过。反射光线离开介质表面以不同的方向运行。它遵循反射定律,该定律表明在规则的表面上,反射角等于入射角。然后,大多表面是不规则的,反射光线的方向会根据介质表面的粗糙度而随机变化。虽然改变了光线的方向,但是光线的强度保持不变。

比较粗糙的介质表面会有较大的亮点,并且看起来比较暗。比较光滑的介质表面将会保持聚焦的高光反射,从适当的角度观察的时候,光线看起来会更亮更强烈,两种情况下的光线量是相同的。(图04)

图04:反射光线的方向会根据介质表面的粗糙度而随机变化

折射是光线方向变化的一种,当光线从一种介质移动到另一种的时候,这样改变了光线的速度和方向。折射率或者IOR,这种光学测量描述了光线行进方向的变化。实质上,IOR值用来确定光线会弯曲多少,当光线从一个介质穿过到另一个的时候。例如,水的IOR值是1.33,其中平板玻璃的IOR值是1.52.在图05中你可以看到一杯水中放置吸管的状态。当光线穿过不同的介质(空气,水和玻璃)时,吸管会因为折射看起来是弯曲的。

图05:吸管因为光线折射看起来是弯曲的

漫反射是折射的光线。光线从一个介质到另一个介质;作为例子,我们假定它进入一个物体。光线在这个物体中被发生多次散射。最后再次折射离开物体,回到最初进入介质的位置(图06)。

漫反射材质是可吸收的。如果折射光线在这种材质中运行太久,它可能会被完全吸收。如果光线离开了这个材质,它很可能只走了离入口点很短的距离。

因此,光线的输入点和输出点之间的距离可以忽略不计。Lambertian模型用于传统阴影的漫反射,不考虑表面的粗糙度。一些其他漫反射模型,就像Oren-Nayar模型,是需要考虑介质表面粗糙度的。

同时具有高散射和低吸收的材质有时被称为参与介质或者半透明材质。例如烟雾,牛奶,皮肤,玉石和大理石。对于后三种情况的渲染可能通过额外的子集散射建模来实现,此时光线的输入点和输出点之间的差异不再忽略不计。精确渲染的介质具有高度变化和非常低的散射和吸收性能,就像烟雾,可能就需要费用高点的方法,就像蒙特卡洛模拟。

图06:物体内的光线运行散射从一个介质到另一个介质

微面元理论

理论上,漫反射和高光反射都取决于光线与介质相交处的表面的不规则性。然而,实际上由于材质内部发生散射,粗糙度对漫反射的影响不太明显。结果是光线输出点的方向与介质表面的粗糙度和入射光线的方向是无关的。最常见的漫反射类型(Lambertian)完全忽略了粗糙度。

在这本指南中,我们将这些表面不规则称为表面粗糙度。表面不规则也有几个其他的名称,包括粗糙度,平滑度,光泽度或者微表面,随PBR工作流程中的使用而定。所有的这些术语都描述了介质表面的相同方面,这是子集Texel的几何细节。

这些介质表面的不规则会在正在使用的粗糙度或者光泽度贴图中的工作流程中创建。基于物理的BRDF是建立在微面元理论上的,该理论假设介质表面由被称为微面的一些不同方向的小尺寸平面细节的表面构成。每一种小平面上的反射光线会基于它的法线在单一方向上。(图07)

微观表面法线恰好在光线方向和视线方向中间将反射出可见光线。但是,如果微面法线和半法线相等,并不是所有的微表面都是如此,像一些阴影部分(光线方向)或者遮蔽部分(视线方向)不会这样,如图07所示。

微观表面的不规则性会导致光线发生漫反射。例如,散射的光线导致模糊的反射。光线不是平行反射的,所以我们认为高光反射是模糊的(图08)。

图07:基于物理的BRDF是建立在微面元理论上
图08:模糊的反射是由于光线发生散射

颜色

介质表面可见的颜色是由光源发出的波长引起的,这些波长被物体吸收并且发生反射,高光发射以及漫反射。剩下的反射波长就是我们看到的颜色。

例如,苹果的表面主要反射红色光线。只有红色的波长散射回苹果表面,而其他部分则被吸收(图09)。

苹果也有明亮的高光和光源的颜色一样,因为材质不导电(电介质) – 像苹果的表面 – 高光反射几乎与波长无关。对于这些材质,高光反射从不着色。我们将在后面的章节讨论不同类型的材质(金属和电介质)。

Substance PBR着色器使用GGX微面分布

图09:红色的反射光线的波长进入眼睛

BRDF

双向反射分布函数(BRDF)是描述介质表面反射特性的函数。在计算机图形学中,有不同的BRDF模型 – 其中一些模型并不符合物理理论,对于一个符合物理理论的BRDF,它必须是能量守恒互惠的。互惠指的是亥姆霍茨互惠原则,它表明入射光线和反射光线可以被认为是互相颠倒的并不影响BRDF的结果。

Substance的PBR着色器使用的BRDF基于Diseny的原则反射模型。该模型基于GGX微面分布。GGX在高光反射方面提供了较好的解决方案之一:在高亮显示的峰值和较长尾段,这样看起来更真实。(图10)

图10:GGX与Blinn高光反射分布 – GGX在高光反射方面提供了较好的解决方案之一

能量守恒

能量守恒在基于物理的渲染方案中起着很重要的作用,这个原则说明在介质表面(反射和散射回来的)重新发射出的光线总光量小于接收到的光线总量。换句话说,就是介质表面反射的光线不会比它撞击介质表面前的光线更加强烈,从艺术角度来讲,我们不必担心保持能量守恒。这是PBR材质的优势之一:能量守恒总是由着色器强制控制。这是基于物理模型的一部分,并且它使我们能更专注于艺术而不是物理。

菲涅尔效应

菲涅尔反射因子在基于物理的阴影中作为BRDF的系数也起着很重要的作用。 菲涅尔效应,是由法国物理学家Augustin-Jean Fresnel所观察到的。该效应指出,从介质表面反射的光量取决于观察的角度。想象一个水池。如果直视,视线垂直于水面,你可以看到池底。用这种方式观察水面此处观察角度处于零度或者法线入射处,该处的法线即介质表面的法线。如果你以掠入角度观察水面,更加平行于水面,你将看到水面上的高光反射更加强烈,并且根本看不到水面下面。

菲涅尔效应不像我们在传统阴影中控制的PBR。这是由PBR着色器处理的另一个物理方面。当以一个掠入射线观察介质表面的时候,所有平滑的表面将以90度入射角成为近似100%的反射面。

对于粗糙表面,反射率变得越来越高,但不会接近于100%的高光反射。这里最重要的因素是每个微面法线和光线之间的角度。而不是微面法线和光线之间的角度。因为光线在不同的方向会消失,反射光线看起来更加柔和或者更加暗淡。在微面发生的事情与在所有微面观察到的菲涅尔效应的平均值有些相似。

F0(0度的菲涅尔反射率)

当光线直接或者垂直(以0度角)照射介质表面的时候,该光线百分百折射为高光反射。使用介质表面的折射率(IOR),可以导出折射的光线量,这被称为F0(菲涅尔零点)(图11)。折射到介质表面的光线量被称为1-F0。

图11:对于一个光滑的电介质表面,F0将会以掠射角度反射2%-5%的光线和100%的光线

大多数常用的电介质的F0范围从0.02-0.05(线性值)。对于导体,F0值 范围为0.5-1.0。因此表面的反射率由折射率决定,正如下面的方程式所示(Lagarde 2011)。

F0反射率值是我们在创建纹理时所关心的。非金属(电介质/绝缘体)具有灰度值,金属(导体)具有RGB值。关于PBR和反射的艺术角度解释,我们可以认为对于一个平滑的电介质表面,F0值将会反射出光线的2%~5%,掠射角度是100%,如图09所示。

电介质(非金属)的反射率值实际上不会强烈的变化。事实上,当粗糙度被改变的时候,被改变的反射率值是很难看出来的,只是在值上有差异。在图11中,你可以看到图表显示了金属和非金属材质的F0值的范围。

留意非金属的F0值的范围不会相互偏离,宝石是一个例外因为它们有很高F0值,稍后再讨论F0值,因为它涉及到导体和绝缘体。

导体和绝缘体(金属和非金属)

当创建PBR材质的时候,从金属和非金属的角度来考虑是有帮助的。先判定介质表面是金属还是非金属。如果是金属,你将需要遵循一套指导原则,如果是非金属,你将需要遵循另外一个。

这可能是一种简单的方法,因为有些材质不属于这些类别,就像准金属(金属和非金属的混合物),但是在创建材质的整个过程中,区分金属和非金属是一种好方法,但是准金属是个例外。为了制定材质指导原则,我们必须首先明白我们尝试努力创建什么,就PBR而言,我们可以查看金属(导体)和非金属(绝缘体)的属性,以推导出这套指导原则如图12所示。

图12:F0值的范围适用于金属和非金属材质

反射光线被吸收,金属的色彩来自于光线的反射光线,所以在我们的贴图中,我们不需要给金属调一个漫反射颜色。

金属

金属是热量和电力的良好导体,金属导体的电场为零,当电场和磁场产生的入射光波到达介质表面时,光波就会发生部分反射,所有的反射光线就会被吸收。抛光金属的反射率值处于很高的范围约70%~100%(图13)。

图13:金属的高光反射率值大约在70%-100%

一些金属吸收不同波长的光线。例如,金子吸收可见光谱的高频端蓝光,因此它显示为黄色。但是,由于折射光线被吸收,所以金属的色彩来自反射光线。在贴图中,我们不给金属调漫反射颜色。例如,在高光反射/光泽度工作流程中。粗金属在漫反射贴图中设置为黑色,反射率值在高光贴图中是色彩值。使用金属时,反射率值将是有色彩的RGB。由于我们在基于物理的模型中工作,我们需要使用现实世界的实际测量值来计算贴图中的金属反射率。

金属纹理化的另一个重要方面是倾向于锈蚀化。这就意味着风化元素在金属反射状态中起着很重要的作用。如果金属生锈,这将改变这种金属状态的反射率。 锈蚀化的区域在金属贴图中以黑色值作为电介质材质,如图14所示。正如我们在第二部分讨论的,金属/粗糙度中的着色器将电介质的F0值硬编码为4%。如图14所示,锈蚀区域在基本颜色贴图中作为漫反射颜色并且硬编码F0值为4%。

此外,涂漆金属被视为电介质而不是金属。油漆作为粗金属最顶部的图层。只有从剥落油漆中暴露的粗金属视为金属。金属上的污垢或者任何能遮蔽粗金属的物质都是如此。

正如此章节的开头所述,在创建PBR材质的时候判断一下该材质是否为金属是有帮助的。更确切的说,这个问题还应该包括金属状态的信息:无论它是否被涂漆,生锈或者覆盖了其他物质像污垢或者油脂。该材质如果不是粗金属将会被视为电介质。由于风化,可能会在金属和非金属之间进行混合,因为风化元素在金属的反射状态中起一定作用。

图14:锈蚀化区域被视为具有F0值4%反射率值的电介质

非金属

非金属(绝缘体/电介质)是不良电介质导体。折射光线被散射或者吸收(通常在介质表面重新出现),所以它们反射比金属少的光线量并具有白光。

我们之前说过,通常电介质的值约2-5%,这是基于折射率计算出的F0值。这些值包含在0.017-03067(40-75 sRGB)的线性范围内,如图14所示。除了一些非金属材质像宝石外,绝大多数电介质不会有超过4%的F0值。

与金属一样,我们需要使用现实世界的实际测量值,但是对于其他不透明材质的折射率值(IOR)可能很难找到。然而,大多数常用电介质之间的值没有太大的变化,所以我们可以使用一些反射值作为指导原则。这将在该指南的稍后部分介绍它们。

基于IOR计算的F0值,常用电介质的值约为2-5%。你可以在图15中看到这个范围。

图15:使用Gama 2.2近似完成从sRGB到线性的转换 – 请参阅关于线性空间渲染部分了解更多细节

线性空间渲染

线性空间渲染是一个非常复杂的主题。对于该指南,我们将采用简单的方法说明线性空间渲染为光线提供了正确的算法。它创建了一个环境允许光线互动并在可靠的现实世界中表现出来,在线性空间,Gama 1.0并且在该空间中进行线性计算,为了使渲染的图像看起来是正确的,我们需要调整线性Gama值。

我们的眼睛非线性的感知光线值的变化,这将意味着它们的Gama值大于1.0。人类的眼睛对较暗的色调比较明亮的色调更敏感。计算机显示器利用这种灵敏度来显示图像,所以我们可以正确的感知它们,这就是说,我们使用非线性Gama或者Gama编码空间在显示器上查看颜色(sRGB)。

颜色值和颜色操作的计算应该在线性空间内执行。该过程将Gama编码值转换为色彩贴图中的线性编码值,并且通过颜色选择器在显示器上观看时选择颜色。在色彩管理工作流程中,该过程通常包括标记要阐释为线性或者sRGB的纹理贴图。然后在线性空间(Gama 1.0)进行计算,并且在Gama编码空间中查看最终的渲染结果。

一个更简单的方法来考虑这一点,如果贴图代表着你看到的颜色(漫反射颜色),例如金属的颜色或者青草的绿色,它应该被阐释为sRGB。如果贴图代表数据,就像表面有多粗糙,或者材质是金属,然后应该将其阐释为线性。

在Substance Designer和Substance Painter中,输入到着色器的线性/sRGB空间之间的转换为自动处理,并且在渲染视图窗口对计算结果进行Gama校正。从艺术方面讲,我们通常不必担心在Substance软件中的线性计算和转换,因为在默认情况下可以这样做。

当通过使用Substance集成插件使用Substance时,通过集成和主机应用程序的颜色管理自动标记线性/sRGB空间的输出。了解该过程非常重要:当Substance贴图用作导出位图而不是Substance贴图的时候,你可能需要手动将纹理标记为sRGB或线性,随你使用的渲染器而定。

在Substance Painter和Substance Designer中使用从sRGB到线性正确的(标准)转换的公式,定义如下:

在书写的时候,Substance Designer中线性节点到RGB及RGB到线性不使用该公式来优化的原因。这可能在未来的版本中发生变化。

简单起见,对于该指南中所有转换,我们使用了如下的简化(但是近似)的转换公式来代替:

PBR的主要特征

现在我们已经探索了物理背后的基本理论,可以推导出PBR的一些主要特征:

1.能量守恒。反射光线不会比它第一次敲击介质表面时的光线亮。能量守恒 由着色器控制。

2.菲涅尔效应。BRDF由着色器控制。F0反射率值对于大多数常见的电介质 而言有轻微的变化,并且在2-5%的范围内。金属的F0值很高,范围在70-100%。

3.高光反射强度通过BRDF,粗糙度或者光泽度贴图和F0反射率值来控制。

4.在线性空间的光线计算。所有的具有Gama编码值的贴图,例如基础颜色 贴图或者漫反射贴图通常由着色器转换为线性,但是你也必须通过游戏引擎 或者渲染器中导入图像时检查相应的选项以确保正确的处理转换过程。描述 贴图表面的属性如粗糙度,光泽度,金属性和高度应该设置为线性。

发表评论

电子邮件地址不会被公开。 必填项已用*标注