光线
1. 光
光在均匀透明介质中遵循直线轨迹,同时光在非透明表面以及不同介质中的反射和穿透轨迹也是有迹可循的,因此我们可以直接推断并画出光的路径(如图1所示)。
反射:当光线照射到表面时,会发生反射。此现象遵循反射定律,即光线的入射角等于反射角。
折射:当光从介质A进入介质B时,会发生折射,折射路径为直线。
当光线照射到表面时,它可能会被反射或折射,也可能最终被介质吸收。但值得注意的是,光吸收不会发生在物质表面。
和 - 和
2. 吸收和散射——透明和半透明
当光穿过非均匀介质或半透明材料时,可能会被吸收或散射:
吸收:当光被吸收时,光的强度会降低,因为光的能量会转换成其他形式(通常是热量)。此外,由于不同波长的光被吸收的方式不同,光的颜色也会发生变化。但是,光的角度保持不变。
散射:光线散射时,光线的方向可能会随机改变,偏转角度则取决于材质本身。但散射并不会改变光线的强度。散射是生活中常见的现象,耳朵皮肤的透光率就是一个很好的例子:由于耳朵的皮肤很薄,我们可以观察到从耳朵后面穿透进来的散射光(下图2)。
当光没有散射,吸收较弱时,它可以直接穿透材料表面,比如透过玻璃,我们就可以直接观察到另一侧的光。例如,如果你在一个干净的游泳池里,当你在水中睁开眼睛时,你大致可以看到远处的池壁;相反,如果游泳池很脏,这些杂质颗粒就会使光线发生散射,从而降低能见度。
光在这样的介质中穿透得越远,散射和/或散开的程度就越大。因此,材料的厚度是光散射和吸收的重要因素。厚度图可用于描述物体的厚度,并可用于着色器进行渲染。
和
3. 漫反射和镜面反射
高光反射:光线在完美平面上反射时,根据反射定律,反射角等于入射角,属于高光反射。但现实生活中,大多数平面都是不规则的,因此由于接触面粗糙,反射的方向也会变得非常随机。反射会改变光线的方向,但光线的强度保持不变。
表面越粗糙,高光范围就越大,看起来就越暗。表面越光滑,高光就越集中,因此从某个角度看,高光会更亮、更强烈。请注意,两种情况下反射的光量仍然相同。
折射会改变光线的角度,当光线从介质 A 进入介质 B 时,其速度和方向都会发生改变。折射率(IOR)是用来描述光线折射时角度变化的光学参数,用于表示光线穿过不同介质时弯曲的程度(生活中常见的例子:吸管插入液体的折射效果)。例如,水的折射率为 1.33,而平板玻璃的折射率为 1.52。
当光从介质A进入介质B时,遇到介质B中不同的散射粒子,发生多次散射后,再次折射穿过物体,第二次折射回到原介质的穿透点与第一次折射的位置大致相同。
漫反射材料通常对光的吸收性很强。如果光在这种材料中穿透太久,可能会被完全吸收。如果光最终穿透了材料,则意味着它只穿透了很短的距离。
因此,在漫反射材质的渲染中,通常可以忽略光线进入和离开点之间的距离。 模型(用于在着色中显示标准漫反射的材质)不考虑表面粗糙度。其他漫反射照明模型(例如 Oren-Nayer 模型)会考虑表面粗糙度。
散射强、吸收低的材质通常被认为是中间介质或者半透明材质( ),比如雾、牛奶、皮肤、玉石、大理石等。在渲染后三者时,通常会加入次表面散射( )光照模型来保证渲染物理属性的准确性。这种情况下,需要在计算中考虑光线的入射点(光线散射的距离)。在计算一些变化较大、散射和吸收率低的材质(比如雾或烟)时,可能需要使用渲染成本更高的算法,比如蒙特卡洛模拟。
微面理论
理论上,当光线照射到不规则表面时,会同时发生漫反射和镜面反射,且与表面粗糙度有关。但在实际应用中,由于散射发生在材料内部,粗糙度对漫反射的视觉影响并不明显。因此,光线第二次穿透物体的角度几乎不受表面粗糙度和入射角的影响。最常见的漫反射照明模型——朗伯体,忽略了表面粗糙度。
在本指南中,我们将统一将表面不规则性( )称为表面粗糙度( )。根据 PBR 管道的不同,表面不规则性还有几个昵称,包括粗糙度( )、平滑度( )、光泽度( )或微面片( )。这些术语都描述了同一种属性,即材质表面的子纹理(Sub-texel)几何细节。
这些表面不规则性被记录在粗糙度图或光泽度图中。基于物理的双向反射分布函数(BRDF)也是基于微面片理论,它认为一个大的表面是由许多方向可变的小平面组成的,这些平面称为微面片(),每个微面片基于单一的法线方向反射光线。
当微面片的表面法线方向与光线的入射角和观察角的半角向量方向恰好一致时,该微面片就会反射可见光(在理论上的镜面反射中,反射光要进入观察者的眼睛,镜面法线向量必须与视线向量和入射向量的半角向量恰好在一条直线上。[8])。但是在某些情况下,并不是所有满足上述条件的微面片都会起作用,因为有些光线会被投影(光线方向)或遮挡(观察方向)所阻挡。
表面不规则性会导致微观层面的光散射。模糊的反射是由光的漫反射引起的。这些光线不是平行反射回来的反射折射定律,所以我们收到的反射是模糊的。
颜色
4. 颜色
表面的可观察颜色由光源发出的波长决定。这些波长会被物体本身吸收,也会被镜面光或漫射光反射。吸收和散射后剩下的波长就是我们眼睛看到的颜色。
比如说,苹果皮的大部分都会反射红光,因为在苹果皮表面只有红光的波长会被背向散射,其他光都会被吸收,所以我们看到的苹果是红色的。
此外,苹果具有与光源颜色相同的非常明亮的高光,这是因为苹果本身的材质具有非导体(电介质)特性(不传导光波和粒子),因此苹果表皮上的高光反射几乎与光的波长无关(详情请参阅下一章)。对于这些材质,高光的颜色几乎不受物体表面颜色的影响。
PBR 着色器通常使用 GGX 微面分布(GGX)。
双向反射分布函数
双向反射分布函数(BRDF, )是用来描述表面反射特性的函数。在计算机图形学中,有各种各样的BRDF模型,其中一些模型并不是基于真实的物理渲染。基于真实物理特性的BRDF必须遵循能量守恒定律,表现出互易律。互易律源于亥姆霍兹互易原理( ),也就是说,入射光和返回光可以理解为互易,这并不影响BRDF的最终推导结果。
PBR 使用的 BRDF 模型是基于 开发的反射模型,同时这个模型也是基于 GGX 微面片分布特性而来的。GGX 对高光反射提供了更优的解决方案:表现为更窄的高光峰值点和更长的衰减扩散,让材质的高光看起来更加真实。
5.能量守恒定律
能量守恒定律是 PBR 渲染中一个非常重要的前提。该规则规定,一个表面重新发射(反射或散射)的光必须小于该表面接收到的光。对于艺术家或设计师来说,我们不必担心如何控制能量守恒定律,因为 PBR 着色器的设置一般都遵守能量守恒定律。
-F0
6. 菲涅尔效应和 F0
作为BRDF的一个系数,菲涅尔项在PBR着色中起着非常重要的作用。法国物理学家菲涅尔认为,一个表面反射的光总量和观察光的角度有关。比如你正在观察一缸水,从正上方(垂直于水面)往下看,就能直接看到池底,因为此时的观察角度为0°,观察向量与水面的法向量重合。当你从更倾斜的角度观察水面,慢慢变得与水面平行时,你会看到越来越多的高光反射。
菲涅尔项通常不是我们在传统着色器中可以控制的属性,它只能由 PBR 着色器本身控制。当我们从掠射角(角切角/掠射角)观察所有光滑表面时,它们几乎会在与光的入射角成 90° 的位置形成 100% 的反射(当我们使用菲涅尔效果时,通常可以在材质球的边缘观察到一圈强烈反射)。
对于粗糙的表面,反射会更明显,但不会达到 100% 的镜面反射。这种情况下反射效果受各个微面片法线与光线的夹角影响,而不是整个宏观表面法线与光线的夹角影响。当表面粗糙时,光线会以不同的角度被微面片漫反射,因此整体反射效果看起来会更柔和。
F0:0度菲涅尔反射
当光线垂直照射到一个平面(与法线的夹角为0度)时反射折射定律,一定比例的光线会被高光部分反射,利用折射率(IOR,Index of)来衡量,可以得到反射光的量,我们把这个值记为F0,折射进材质表面的光线量记为1-F0(如图11所示)。
对于常见的非导电(介电)材料,其 F0 范围在 0.02-0.05(空间)之间。对于导电材料,F0 范围约为 0.5-1.0。表面的反射率受其折射率的影响,可以使用以下公式计算:
F0 反射率值也会影响我们该如何制作材质贴图。非金属材质(绝缘体)使用灰度来表示反射率值,而金属材质(导体)则使用 RGB 值。基于对 PBR 和艺术设计中反射的理解,我们可以推测,对于一般光滑的非导体(电介质)表面,F0 会反射 2%-5% 的光,在切线角处会反射 100% 的光。
非导体(电介质)表面的 F0 反射率值一般变化不大。事实上,当我们改变表面粗糙度时,反射率值的变化很难看出来。然而,不同材料之间还是存在一些差异。图 12 显示了金属和非金属表面上 F0 的范围。需要注意的是,宝石材料可能是一个特殊情况,因为它们具有更高的 F0 值。
和
7. 导体和绝缘体 - 金属和非金属
当我们为PBR制作材料时,我们应该始终考虑材料是金属还是非金属,因为它们的生产规格完全不同。
虽然有些类金属材料(非金属与金属的混合材料)很难被明确分类,但对于大多数材料生产工作流程来说,提前辨别材料是否为金属仍是一个好方法。本文将拆解金属与非金属的特性,并分别描述其生产规范。
对于导电的金属材质,由于折射光被吸收,所以金属的颜色来自于反射光。因此,贴图中没有给出金属的漫反射颜色(Color)。
金属
金属是热和电的优良导体。导电金属的电场为零,当带有电场和磁场的入射光波射到金属表面时,光波会被部分反射,折射的光波则全部被吸收。抛光金属的反射率值较高,一般在70%-100%之间。
不同的金属吸收不同波长的光,金属的颜色/色调来自反射光,因为折射光被吸收。例如,金吸收可见光谱高端的蓝光,因此呈现黄色。
在纹理中,我们不赋予金属漫反射颜色(Color,这也是为什么给金属材质添加颜色通常没有什么效果的原因)。例如,在/工作流程中,金属通常在Map中设置为黑色,反射值通常在通道中带有色相的颜色值中记录。(对于金属材质,反射值以RGB记录,并带有色相。)由于我们是在PBR环境中工作,因此我们需要利用现实世界的规律、价值观和方法来在纹理中还原金属的反射。
对于金属来说,影响材质的另一个因素是腐蚀程度,也就是说,引起腐蚀的因素可能会对金属的反射状态产生更明显的影响。在金属贴图中,被腐蚀的区域将被标记为黑色,并标识为非导体(电介质)材质。/工作流着色器会将这些被腐蚀区域的 F0 值设置为统一的 4%。
另外,一般认为涂漆金属为非导体(电介质)材料,而油漆为覆盖在原有金属上的一层材料,只有未被油漆覆盖的金属才被定义为原有金属,被灰尘或其他物质覆盖的金属材料亦同。
正如本章开头所提到的,在制作 PBR 材质之前,首先要想清楚这个材质是否是金属。为了更加精准地达到想要的效果,设计师应该清楚金属材质的状态:是否被涂漆、腐蚀,或者被灰尘、油污等其他物质覆盖。如果材质的某一区域的纹理显示它不是金属,那么这块区域就会被着色器解释为非导体(电介质)材质。需要注意的是,腐蚀效果一般会呈现出金属和非金属之间的某种混合状态(金属贴图可能会显示不同程度的灰度)。
非金属
非金属(非导体/绝缘体/电介质,为设计师直观理解,以下统称为非导体)是电的不良导体,在材质内部发生折射的光线一般会被散射或同时被吸收(通常穿透物体后会折射两次),相比于金属,它们反射的光线较少,且具有反照率颜色(*需要注意的是,Color、Base Color 是不同工作流程中的称呼,它们作为贴图所携带的 RGB 属性,适用原理类似,但携带的信息本质上并不完全一致,广义上包括 Base Color 和)。
之前提到过,基于折射率计算,对于常见的非导电(电介质)材质,F0 反射率大概在 2-5% 左右。这些数值转换回线性空间大概在 0.017-0.067(40-75 sRGB)。除了一些特殊的非金属材质(比如宝石)外,大部分非导电材质的 F0 值都不会超过 4%。
和金属材质一样,对于非金属材质,我们也需要用真实世界的测量值来绘制。然而,各种非透明材质的折射率(IOR)很难获得。不过,非金属材质的F0值变化不大,所以我们可以为反射值做一个参考尺寸(见图15)。
空间
8.线性空间渲染
在着色器中,颜色值的提取和颜色计算操作都是在线性空间()中进行的。这个过程首先将颜色图中的伽马(通常是sRGB)值转换成。
在色彩管理的过程中,这张图的色彩空间通常会被程序自动标注出来,或者由工程师手动标注出来,以便后期进行正确的计算。所有的计算和渲染都会在线性空间中进行,最后显示之前再经过伽马校正回到sRGB,以保证色彩的正确显示。
那么我们如何知道哪些贴图会被解码回来呢?如果设计师直接从RGB或RGB输出纹理,我们可以看到哪些纹理包含颜色,例如金属或玻璃色调。这些纹理在进入着色器之前应该标明它们原来的颜色空间(通常是sRGB,因为设计师通常在这个环境中绘制纹理)。
因此PBR渲染过程中标记为gamma-的贴图有Base Color(基础颜色/反照率颜色)、(漫反射)、(高光反射)、(辐照度贴图)。
当贴图只用来记录数据(材质粗糙度,是否是金属等)时,通常会输出为。在PBR渲染过程中,会将贴图标记为(粗糙度)、(AO)、(法线)、(金属)、(高度)等。
我们在使用SP或者SD设计贴图、输出素材的时候,一般不用担心转换成sRGB的问题,因为这套输入输出流程已经自动化了,所以最终渲染出来的显示结果也是经过gamma校正之后的正确效果。
同样的,在使用插件中的材质时,输出结果已经根据贴图的色彩空间(线性或sRGB)和所在程序的色彩管理设置自动转换。不过需要注意的是,了解这个过程背后的原理还是很重要的,因为当材质贴图(Map)作为普通位图()使用时,你仍然需要根据你使用的渲染器手动标注贴图的色彩空间。一般后缀为.png、.jpg、.tga、.tif、gamma-的贴图使用sRGB色彩空间;而后缀为.exr的贴图(比如环境光贴图HDRI)则使用该空间。
PBR 的关键
9.PBR的核心属性
能量守恒定律:表面反射的光量小于其接收的光量。着色器会自动执行此定律。
菲涅尔效果:产生菲涅尔效果的BRDF双向反射率分布函数已被PBR 自动实现。对于大部分非导体(电介质)材质,其F0反射率值不会有太大变化,一般分布在2-5%范围内。对于金属材质,反射率值较高,在70-100%之间。
镜面反射的强度受多种特性的影响:BRDF 算法(GGX、Blinn 或其他)、取决于工作流程的粗糙度或光泽度图以及 F0 的反射值。
光照计算在线性空间中进行:所有包含颜色信息的纹理(如Base Color)通常由进行转换后再进行计算。设计师或开发者需要注意在引入纹理时渲染引擎是否自动进行了这种转换,若没有则需要手动标注纹理的颜色空间。当纹理仅用于记录材质的属性值(如粗糙度、光度、高度、法线等)时,应在整个过程中将纹理解释为空间。