Realtime Rendering 4th notes - chapter9

"Let the form of an object be what it may,|light, shade, and
perspective will always make it beautiful. " — John Constable

在本章中,我们将介绍基于物理的着色的各个方面。我们首先在9.1节中介绍光物质相互作用的物理特性,然后在9.2到9.4节中,我们将展示这些物理如何关联到着色过程。第9.5至9.7节专门用于构建基于物理的着色模型的构建块,模型本身——涵盖各种材质类型——在第9.8至9.12节中讨论。最后,在9.13节中,我们描述了材料如何混合在一起,并且我们介绍了避免混叠和保持表面外观的过滤方法。

9.1 Physics of Light(光物理)

光与物质的相互作用构成了基于物理的着色的基础。 要理解这些相互作用,有助于对光的本质有一个基本的了解。
在物理光学中,光被建模为电磁横波(transverse wave),即垂直于其传播方向振荡电场和磁场的波。两个场的振荡是成对的。磁场矢量和电场矢量彼此垂直,并且它们的长度比是固定的。 该比率等于相速度,我们将在后面讨论。

在图9.1中,我们看到一个简单的光波。事实上,这是最简单的正弦函数。 该波具有单个波长,用希腊字母$λ$表示。正如我们在8.1节中看到的那样,光的感知颜色与其波长密切相关。因此,单波长光被称为单色光。 然而,在实践中遇到的大多数光波是多色的,包含许多不同的波长。

图9.1

图9.1中的光波是线性偏振的(linearly polarized)。这意味着对于空间中的固定点,电场和磁场均沿着线来回移动。 相比之下,在本书中,我们关注的是非偏振光,这种光非常普遍。 在非偏振光中,场振荡在垂直于传播轴的所有方向上均匀地扩展。 尽管它们简单,但是理解单色线性偏振波的行为是有用的,因为任何光波都可以被分解成这种波的组合。

如果我们随着时间跟踪具有给定相位(例如,振幅峰值)的波上的点,我们将看到它以恒定速度在空间中移动,这是波的相速度(phase velocity)。对于穿过真空的光波,相速度为c,通常称为光速,大约每秒300,000千米。

在8.1.1节中,我们讨论了这样一个事实,即对于可见光,单个波长的大小在大约400 - 700纳米的范围内。为了给这个长度一些概念,它大约是单根蜘蛛丝线宽度的一半到三分之一,它本身不到人类头发宽度的五十分之一。见图9.2。在光学中,谈论相对于光波长的特征的尺寸通常是有用的。在这种情况下,我们可以说蜘蛛丝线的宽度约为2λ-3λ(2-3倍光波长),并且头发的宽度约为100λ-200λ。

光波携带能量。能量流的密度等于电场和磁场的大小的乘积——因为幅度彼此成比例——与电场的平方幅度成比例。我们专注于电场,因为它比磁场更强烈地影响物质。在渲染中,我们关注的是随时间的平均能量流量,其与平方波幅度成比例。该平均能量流密度是辐照度,用字母E表示。辐射照度及其与其他光量的关系在8.1.1节中讨论。

图9.2

光波线性的组合在一起。最终的波是分量波的总和。然而,由于辐射照度与振幅的平方成正比,这似乎会导致矛盾。例如,将两个相等的波相加不会导致辐射照度“1 + 1 = 4”情况?由于辐射照度测量能量流量,这是否会违反能量守恒?这两个问题的答案分别是“有时”和“不”。

为了说明,我们将看一个简单的例子:增加n个单色波,相位除外。n个波中的每一个的振幅是a。 如前所述,每个波的辐照度$E_1$与$a_2$成比例,换句话说,对于某个常数k,$E_1 = ka^2$。

图9.3显示了此案例的三个示例场景。在左边,波浪都以相同的相位排列并相互加强。 组合波辐照度是单波的$n^2$倍,其是各个波的辐照度值之和的n倍。这种情况称为建设性干扰(constructive interference)。在图的中心,每对波都处于反相,相互抵消。 组合波具有零振幅和零辐照度。 这种情况是破坏性干扰(destructive interference)。

图9.3

建设性和破坏性干扰是相干相加的两种特殊情况,其中波的波峰和波谷以一致的方式排列。 取决于相对相位关系,n个相同波的相干相加可以产生相对于单个波在0到 $n^2$倍的辐射。

然而,大多数情况下,当波浪加起来时,它们是相互不相干的,这意味着它们的相位相对随机。这在图9.3的右侧说明。 在这种情况下,组合波的幅度是$\sqrt{n}a$,并且各个波的辐照度线性地加到一个波的辐照度的n倍,正如人们所期望的那样。

似乎破坏性和建设性的干扰违反了能量守恒。但是图9.3没有显示完整的图片,它只显示了一个位置的波浪交互。 当波在空间中传播时,它们之间的相位关系从一个位置变为另一个位置,如图9.4所示。在一些位置,波构造性地干涉,并且组合波的辐照度大于各个波的辐照度值之和。 在其他位置,它们破坏性地干涉,导致组合辐照度小于各个波辐照度值的总和。 这并不违反能量守恒定律,因为通过建设性干涉获得的能量和通过破坏性干扰损失的能量总是被抵消。

当物体中的电荷振荡时发射光波。引起振动,电能,化学能的部分能量被转换为从物体辐射出的光能。在渲染中,这些对象被视为光源。我们在第5.2节中首先讨论了光源,第10章将从更加基于物理的角度对它们进行描述。

在发射光波之后,它们穿过太空直到它们遇到一些与之相互作用的物质。 大多数光物质相互作用的核心现象很简单,与上面讨论的发射情况非常相似。振荡电场推动和拉动物质中的电荷,使它们依次振荡。振荡电荷发射新的光波,其将入射光波的一些能量重定向到新的方向。 这种称为散射(scattering)的反应是各种光学现象的基础。

散射光波具有与原始波相同的频率。当通常情况下,原始波包含多个光频率时,每个光分别与物质相互作用。一个频率的入射光能量对不同频率的发光能量没有贡献,除了荧光和磷光等特殊情况,我们在本书中将不再描述。

分离的分子在所有方向上散射光,强度有一些方向性变化。更多的光在靠近原始传播轴的方向上向前和向后散射。 分子作为散射体的有效性——其附近的光波全部散射的可能性——随波长而变化很大。与长波长光相比,短波长光更有效地散射。

在渲染中,我们关注许多分子的集合。与这种聚集体的光相互作用不一定类似于与分离的分子的相互作用。从附近分子散射的波通常是相互相干的,因此表现出干扰,因为它们来自相同的入射波。本节的其余部分专门讨论了几种重要的多分子光散射特殊情况。

9.1.1 Particles(粒子)

在理想气体中,分子不会相互影响,因此它们的相对位置是完全随机且不相关的。 虽然这是一种抽象,但对于正常大气压下的空气来说,它是一个相当不错的模型。在这种情况下,从不同分子散射的波之间的相位差是随机的并且不断变化的。结果,散射波是不相关的,它们的能量线性增加,如图9.3的右边部分所示。 换句话说,从n个分子散射的聚合光能是从单个分子散射的光的n倍。

相反,如果分子紧密地堆积成远小于光波长的簇,则每个簇中的散射光波同相并且建设性干预。这会导致散射波能量以二次方式相加,如图9.3左侧所示。因此,从一小群n个分子散射的光的强度是从单个分子散射的光的$n^2$ 倍,这是相同数量的分子在理想气体中散射的光的n倍。这种关系意味着对于每立方米固定密度的分子,将分子聚集成簇将显着增加散射光的强度。使簇更大,同时仍保持总分子密度恒定,将进一步增加散射光强度,直到簇直径变得接近光波长。除此之外,簇尺寸的额外增加不会进一步增加散射光强度。

这个过程解释了为什么云和雾如此强烈地散射光。它们都是由凝结产生的,凝结是空气中水分子聚集成越来越大的团簇的过程。 即使水分子的总密度不变,这也显着增加了光散射。第14.4.2节讨论了云的渲染。

随着粒子的尺寸增加超过波长,散射波在整个粒子上不再同相的事实改变了散射的特性。 散射越来越趋于向前方向,并且波长依赖性降低,直到所有可见波长的光均匀地散射。这种类型的散射称为米氏散射(Mie scattering)。 Rayleigh and Mie scattering 在第14.1节中有更详细的介绍。

9.1.2 Media(介质)

另一个重要的情况是光通过均匀介质传播,该介质是填充有均匀间隔的相同分子的体积。 分子间距不必像晶体那样完全规则。 如果液体和非结晶固体的组成是纯的(所有分子都相同)并且它们没有间隙或气泡,则它们可以是光学均匀的。

在均匀介质中,散射波在除原始传播方向之外的所有方向上破坏性地干涉。在原始波与从各个分子散射的所有波组合之后,最终结果与原始波相同,除了其相速度和(在某些情况下的)振幅。最终波没有表现出任何散射,它已经被破坏性干涉有效地抑制了。

原始波和新波的相速度的比率定义了介质的光学性质,称为折射率(index of refraction,IOR / refractive index ),由字母n表示。有些介质是吸收性的。它们将部分光能转换为热能,导致波幅随距离呈指数减小。降低速率由衰减指数(attenuation index)定义,由希腊字母$\kappa$(kappa)表示。 n和κ通常都随波长而变化。 总之,这两个数字完全定义了介质如何影响给定波长的光,它们通常组合成单个复数$n +iκ$,称为复折射率。折射率抽象出分子级细节。 光相互作用并使介质能够作为连续体积处理,这样更简单。

虽然光的相速不直接影响外观,但速度的变化确实如此,我们将在后面解释。另一方面,光吸收对视觉效果有直接影响,因为它会降低光的强度,并且(如果波长变化)也会改变其颜色。 图9.5显示了一些光吸收的例子。

图9.5

非均匀介质通常可以被建模为具有嵌入散射粒子的均匀介质。抑制均匀介质中散射的破坏性干涉是由分子的均匀排列引起的,因此也是由它们产生的散射波引起的。分子分布的任何局部变化都将破坏这种破坏性干涉模式,允许散射光波传播。这种局部变化可以是不同分子类型的集群,气隙,气泡或密度变化。在任何情况下,它都会像前面讨论的粒子那样散射光,散射属性同样取决于簇的大小。甚至气体也可以这种方式建模。对于这些,“散射粒子”是由分子的恒定运动引起的瞬态密度波动。该模型能够为气体建立有意义的n值,这有助于理解它们的光学性质。图9.6显示了一些光散射的例子。

图9.6 从左到右:水,含几滴牛奶的水,含约10%牛奶的水,全脂牛奶和乳白玻璃。 大多数牛奶的散射粒子大于可见光波长,因此其散射主要是无色的,中间图像中有明显的蓝色色调。 乳白玻璃中的散射颗粒均小于可见光波长,因此散射蓝光更强烈,而不是红光。由于分开的浅色和深色背景,透射光在左侧更明显,而散射光在右侧更明显。

散射和吸收都与尺度有关。 在小场景中不产生任何明显散射的介质在较大尺度上可能具有非常明显的散射。 例如,当观察房间中的一杯水时,在空气中的光的散射和在水中的吸收是不可见的。但是,在更大的环境中,两种效果都很重要,如图9.7所示。

图9.7

在一般情况下,介质的外观是由散射和吸收的某种组合引起的,如图9.8所示。散射程度决定了浑浊,高散射会产生不透明的外观。除了极少数例外,例如图9.6中的乳白玻璃,固体和液体介质中的颗粒往往比光波长大,并且倾向于均匀地散射所有可见波长的光。因此,任何颜色色调通常由吸收的波长依赖性引起。介质的亮度是这两种现象的结果。特别是白色是高散射和低吸收组合的结果。这将在第14.1节中详细讨论。

9.1.3 Surfaces(表面)

从光学角度来看,物体表面是分离具有不同折射率值的体积的二维界面。在典型的渲染情况下,外部体积包含空气,折射率约为1.003,为简单起见,通常假设为1。内部体积的折射率取决于制造物体的物质。

当光波照射到表面时,该表面的两个方面对结果具有重要影响:两侧的物质和表面几何形状。 我们将首先关注物质方面,假设最简单的表面几何形状,一个完美的平面。我们将“外部”(入射或入射波发生的一侧)的折射率表示为$n_1$,并将“内部的折射率”表示为“(通过表面后波将被传输的地方)$n_2$。

图9.8

我们在前面的部分中已经看到,当光波遇到材料成分或密度的不连续性时,即在折射率方面,光波会散射。分离不同折射率的平面是一种特殊类型的不连续性,它以特定方式散射光。边界条件要求平行于表面的电场分量是连续的。换句话说,电场矢量到表面平面的投影必须在表面的任一侧上匹配。这有几个含义:

  1. 在表面,任何散射波必须与入射波同相或180°异相。因此,在表面处,散射波的峰值必须与入射波的峰值或波谷对齐。这限制了散射波仅沿两个可能的方向进入,一个向前延伸到表面,一个向远离它的方向。第一个是透射波(transmitted wave),第二个是反射波(reflected wave)。
  2. 散射波必须与入射波具有相同的频率。我们在这里假设单色波,但我们讨论的原理可以通过首先将其分解为单色分量来应用于任何一般波。
  3. 当光波从一种介质移动到另一种介质时,波通过介质的相速度与相对折射率$(n_1/n_2)$成比例地变化。 由于频率是固定的,因此波长也与$(n_1/n_2 )$成比例地变化。

最终结果如图9.9所示。反射波和入射波方向与表面法线具有相同的角度$θ_i$。透射波方向以角度$θ_t$弯曲(折射),其与$θ_i$具有以下关系:

$$
\sin(\theta_t)=\frac{n_1}{n_2}\sin(\theta_i).\tag{9.1}
$$

这种折射方程称为斯涅尔定律(Snell's law)。它用于全局折射效应,将在第14.5.2节中进一步讨论。

图9.9 撞击平面的光波分离折射率n1和n2。图的左侧示出了入射波从右上方进入的侧视图。红色波段的强度表示波相。表面下方的波的间隔与比率(n1/n2)成比例地变化,在这种情况下为0.5。相位沿表面排列,因此间距的变化会弯曲(折射)透射波方向。三角形结构显示了Snell定律的推导。为清楚起见,图的右上方分别显示了反射波。它具有与入射波相同的波间距,因此其方向与表面法线具有相同的角度。该图的右下方显示了波方向矢量。

虽然折射通常与透明材料(如玻璃和水晶)有关,但它也会发生在不透明物体的表面。 当不透明物体发生折射时,光在物体内部经历散射和吸收。 光与物体的介质相互作用,就像图9.8中的各种液体杯一样。 在金属的情况下,内部包含许多自由电子(未与分子结合的电子),它可以“吸收”折射的光能并将其重定向到反射波中。这就是金属具有高吸收性和高反射率的原因。

我们讨论过的表面折射现象——反射和折射——需要在小于单一波长的距离内发生折射率的突然变化。折射率的更渐进的变化不会使光分裂,而是使其路径弯曲,以折射中发生的不连续弯曲的连续模拟。当空气密度因温度而变化时,通常可以看到这种效果,例如海市蜃楼和热变形。见图9.10。

图9.10

即使是具有明确边界的物体,如果它浸没在具有相同折射率的物质中,也将没有可见表面。在没有折射率变化的情况下,不会发生反射和折射。 图9.11就是一个例子。

图9.11

到目前为止,我们一直关注物质在表面两侧的影响。我们现在将讨论影响表面外观的另一个重要因素:几何。严格来说,完全平坦的平面是不可能的。每个表面都有某种不规则性,即使只有构成表面的单个原子。然而,远小于波长的表面不规则性对光没有影响,并且比波长大得多的表面不规则性有效地使表面倾斜而不影响其局部平坦度。 只有尺寸在1-100波长范围内的不规则性会导致表面的表现与平面不同,这种现象称为衍射,将在第9.11节中进一步讨论。

在渲染中,我们通常使用几何光学,忽略诸如干涉和衍射之类的波效应。 这相当于假设所有表面不规则性都小于光波长或更大。 在几何光学中,光被建模为光线而不是波。 在光线与表面相交的点处,表面被局部地处理为平面。 图9.9右下角的图表可以看作是反射和折射的几何光学图片,与该图其他部分中呈现的波浪图片形成对比。 从这一点开始,我们将一直保持几何光学领域,直到第9.11节,该部分致力于基于波动光学的着色模型。

如前所述,比波长大得多的表面不规则性改变了表面的局部取向。当这些不规则表面太小以至于不能单独渲染时,也就是小于一个像素时,我们将它们称为微观几何。反射和折射的方向取决于表面法线。 微观几何学的效果是在表面上的不同点处改变该法线,从而改变反射和折射的光方向。

即使表面上的每个特定点仅在单个方向上反射光,每个像素也覆盖许多反射各个方向的光的表面点。外观由所有不同反射方向的聚合结果驱动。图9.12显示了两个表面的示例,这两个表面在宏观尺度上具有相似的形状,但显着不同的微观几何。

图9.12

对于渲染,我们不是明确地对微观几何进行建模,而是对其进行统计处理并将表面视为具有微观结构法线的随机分布。因此,我们将表面建模为在连续的方向扩散中反射(和折射)光。 这种扩散的宽度,以及因此反射和折射细节的模糊性,取决于微观几何法向量的统计方差,换句话说,表面微尺度粗糙度。见图9.13。

图9.13

9.1.4 Subsurface Scattering(次表面散射)

折射光继续与物体的内部体积相互作用。 如前所述,金属反射大部分入射光并迅速吸收其余部分。相反,非金属表现出各种各样的散射和吸收行为,这与图9.8中的液体杯中所见的类似。具有低散射和吸收的材料是透明的,将任何折射光透射通过整个物体。 第5.5节讨论了在没有折射的情况下渲染这种材料的简单方法,第14.5.2节将详细介绍折射。 在本章中,我们将重点关注不透明物体,其中透射光经历多次散射和吸收事件,直到最后一些物体从表面重新发射回来。 见图9.14。

这种次表面散射光以离入射点不同的距离离开表面。入口 - 出口距离的分布取决于材料中散射粒子的密度和性质。 这些距离与阴影比例(像素的大小或阴影样本之间的距离)之间的关系很重要。如果入口 - 出口距离与阴影比例相比较小,则可以假设它们实际上为零以用于着色目的。这允许次表面散射与表面反射结合到局部着色模型中,在一点处的出射光仅取决于同一点处的入射光。 然而,由于次表面散射光具有与表面反射光明显不同的外观,因此将它们分成单独的阴影术是方便的。 镜面反射(specular)表示表面反射,漫反射(diffuse)表示局部次表面散射。

值得注意的是,局部和全局次表面散射技术可以模拟完全相同的物理现象。每种情况的最佳选择不仅取决于材料特性,还取决于观察规模。例如,当渲染儿童玩塑料玩具的场景时,可能需要全局技术来准确渲染儿童的皮肤,并且局部漫射阴影模型足以满足玩具的需要。这是因为皮肤中的散射距离比塑料中的散射距离要大得多。然而,如果相机距离足够远,则皮肤散射距离将小于像素,并且局部阴影模型对于儿童和玩具都是准确的。相反,在极端特写镜头中,塑料会表现出明显的非局部次表面散射,并且需要全局技术来准确地渲染玩具。

9.2 The Camera(相机)

如8.1.1节所述,在渲染中我们计算从着色表面点到摄像机位置的辐射亮度。这模拟了成像系统的简化模型,例如胶片相机,数码相机或人眼。

这种系统包含一个由许多离散小传感器组成的传感器表面。比如眼睛中的视杆细胞和视锥细胞,数码相机中的光电二极管或膜中的染料颗粒。这些传感器中的每一个都检测其表面上的辐照度值并产生颜色信号。辐照度传感器本身不能产生图像,因为它们平均来自所有进入方向的光线。出于这个原因,完整的成像系统包括具有单个小孔(开口)的防光外壳,该小孔限制光可以进入和撞击传感器的方向。放置在光圈处的透镜聚焦光,使得每个传感器仅从一小组进入方向接收光。外壳,光圈和镜头具有使传感器具有方向特定性的综合效果。它们在一个小区域和一小组进入方向上平均光线。而不是像我们在8.1.1节中看到的那样测量平均辐射照度来量化来自所有方向的光流的表面密度,这些传感器测量的平均辐射度量化单个光线的亮度和颜色。

从历史上看,渲染模拟了一种特别简单的成像传感器,称为针孔相机,如图9.16顶部所示。 针孔照相机在理想情况下具有极小的光圈,零尺寸的数学点和无透镜。 点孔径限制传感器表面上的每个点以收集单个光线,其中离散传感器收集窄锥光线,其基部覆盖传感器表面并且其顶点位于孔径处。 渲染系统模拟针孔摄像机的方式略有不同(但相当),如图9.16中间部分所示。 针孔孔的位置由点c表示,通常称为“相机位置”或“眼睛位置”。 这一点也是透视变换的投影中心(见第4.7.2节)。

图9.16

渲染时,每个着色样本对应于单个光线,因此对应于传感器表面上的采样点。抗锯齿过程(第5.4节)可以解释为重建在每个离散传感器表面上收集的信号。然而,由于渲染不受物理传感器的限制,我们可以更一般地处理该过程,因为从离散样本重建连续图像信号。

虽然已经构建了实际的针孔摄像机,但它们对于实际使用的大多数摄像机以及人眼而言都是不良模型。使用镜头的成像系统的模型显示在图9.16的底部。包括允许使用更大孔径的透镜,这极大地增加了成像系统收集的光量。但是,它还会导致相机具有有限的景深(第12.4节),模糊太近或太远的物体。

除了限制景深外,镜头还具有额外的效果。每个传感器位置都会接收一束光线,即使对于完美聚焦的点也是如此。 每个着色样本代表单个观察光线的理想化模型有时会引入数学奇点,数值不稳定性或视觉混叠。在渲染图像时牢记物理模型可以帮助我们识别和解决这些问题。

9.3 The BRDF(BRDF)

最终,基于物理的渲染归结为计算沿着一组视线进入相机的辐射。使用第8.1.1节中介绍的入射辐射的符号,对于给定的视图射线,我们需要计算的量是$L_i(\boldsymbol{c},\boldsymbol{-v})$,其中c是摄像机位置,-v是沿着视线的方向。由于两种符号约定,我们使用-v。首先,$L_i()$中的方向向量总是指向远离给定点,在这种情况下摄像机位置是给定点。其次,视图矢量v始终指向相机。

在渲染中,场景通常被建模为在它们之间具有介质的对象的集合(单词“介质media”实际上来自拉丁词,用于“在中间”或“在中间”)。通常所讨论的介质是适量的相对清洁的空气,其不会显着影响光线的辐射,因此可以忽略,用于渲染。有时光线可能穿过介质,通过吸收或散射明显影响其辐射。这种介质被称为参与介质(participating media),因为它们参与了灯光在场景中的传输。 第14章将详细介绍参与介质。在本章中,我们假设没有参与介质,因此进入摄像机的辐射率等于离开最近物体表面朝向摄像机方向的辐射率:

$$
L_i(\boldsymbol{c},\boldsymbol{-v})=L_o(\boldsymbol{p},\boldsymbol{v})\tag{9.2}
$$

其中p是视线与最近物体表面的交点。

按照公式9.2,我们的新目标是计算$L_o(\boldsymbol{p},\boldsymbol{v})$。此计算是第5.1节中讨论的着色模型计算的基于物理的版本。有时辐射是由表面直接发出的。更常见的是,离开表面的辐射源自其他地方,并通过第9.1节中描述的物理相互作用由表面反射到视线中。在本章中,我们不考虑透明度(第5.5节和第14.5.2节)和全局次表面散射(第14.6节)。换句话说,我们专注于局部反射现象,它将光线重新导向当前着色点之外。这些现象包括表面反射以及局部次表面散射,并且仅取决于入射光方向l和出射视图方向v。局部反射率由双向反射分布函数(bidirectional reflectance distribution function ,BRDF)量化,表示为$f(\boldsymbol{l},\boldsymbol{v})$。

在其原始推导中,BRDF被定义为均匀表面。也就是说,假设BRDF在表面上是相同的。但是,现实世界(以及渲染场景中)的物体很少在其表面上具有均匀的材料属性。甚至由单一材质(例如,由银制成的雕像)组成的物体也将具有划痕,失去光泽的斑点,污点和其他变化,这些变化导致其视觉特性从一个表面点改变到下一个表面点。从技术上讲,基于空间位置捕获BRDF变化的函数称为空间变化的BRDF(spatially varying,SVBRDF)或空间BRDF(spatial,SBRDF)。然而,这种情况在实践中如此普遍,以至于经常使用简称BRDF并且隐含地假设它取决于表面位置。

传入和传出方向均具有两个自由度。 经常使用的参数化涉及两个角度:相对于表面法线n的高度θ和关于n的方位角(水平旋转)。在一般情况下,BRDF是四个标量变量的函数。各向同性BRDF是一个重要的特殊情况。当输入和输出方向围绕表面法线旋转时,这种BRDF保持不变,保持它们之间的相对角度。图9.17显示了两种情况下使用的变量。各向同性BRDF是三个标量变量的函数,因为只需要光和摄像机旋转之间的单个角度$\phi$。 这意味着如果将均匀的各向同性材料放置在转盘上并旋转,则在给定固定光和相机的情况下,对于所有旋转角度看起来都是相同的。

图9.17

由于我们忽略了荧光和磷光等现象,我们可以假设给定波长的入射光在相同波长下反射。反射的光量可以基于波长而变化,其可以以两种方式之一建模。要么将波长视为BRDF的附加输入变量,要么将BRDF视为返回光谱分布值。 虽然第一种方法有时用于离线渲染,但在实时渲染中总是使用第二种方法。由于实时渲染器将光谱分布表示为RGB三元组,因此这仅表示BRDF返回RGB值。

为了计算$L_o(\boldsymbol{p},\boldsymbol{v})$,我们将BRDF合并到反射率方程(reflectance equation)中:

$$
L_o(\boldsymbol{p},\boldsymbol{v})=\int_{\boldsymbol{l}\in\Omega}f(\boldsymbol{l},\boldsymbol{v})L_i(\boldsymbol{p},\boldsymbol{l})(\boldsymbol{n}\cdot\boldsymbol{l})d\boldsymbol{l}.\tag{9.3}
$$

积分符号上的$\boldsymbol{l}\in\Omega$下标表示对位于表面上方的单位半球中的l个矢量执行积分(以表面法线n为中心)。请注意,l在进入方向的半球上连续扫过,这不是一个特定的“光源方向”。这个想法是任何进入的方向都可以(并且通常会)有一些与之相关的辐射。我们使用dl来表示l周围的微分立体角(立体角在8.1.1节中讨论过)。

总之,反射率方程表明,出射辐射率等于入射辐射率的积分(对所有在$\Omega$中的$\boldsymbol{l}$)乘以BRDF乘以n和l之间的点积。

为简洁起见,对于本章的其余部分,我们将省略$L_i(),L_o()$中的表面点p,则反射方程为:

$$
L_o(\boldsymbol{v})=\int_{\boldsymbol{l}\in\Omega}f(\boldsymbol{l},\boldsymbol{v})L_i(\boldsymbol{l})(\boldsymbol{n}\cdot\boldsymbol{l})d\boldsymbol{l}.\tag{9.4}
$$

当计算反射率方程时,通常使用球面坐标φ和θ来参数化半球。对于该参数化,微分立体角$d\boldsymbol{l}$等于$\sinθ_idθ_id\phi_i$。使用此参数化,可以导出公式9.4的双积分形式,它使用球面坐标(回想起$(\boldsymbol{n}\cdot\boldsymbol{l})=\cos\theta_i$):

$$
L_o(\theta_o,\phi_o)=\int_{\phi_i=o}^{2\pi}\int_{\theta_i=0}^{\pi/2}f(\theta_i,\phi_i,\theta_o,\phi_o)L_i(\theta_i,\phi_i)\cos\theta_i\sin\theta_id\theta_id\phi_i.\tag{9.5}
$$

角度$\theta_i$,$\phi_i$,$\theta_o$和$\phi_o$如图9.17所示。

在某些情况下,使用略微不同的参数化可以更方便,使用仰角的余弦值$\mu_i=\cos\theta_i$和$\mu_o=cosθ_o$作为变量而不是角度$\theta_i$和$\theta_o$本身。对于该参数化,微分立体角$d\boldsymbol{l}$ 等于$d\mu_id\phi_i$。使用$(\mu,\phi)$参数化产生以下积分形式:

$$
L_o(\mu_o,\phi_o)=\int_{\phi_i=o}^{2\pi}\int_{\mu_i=0}^1f(\mu_i,\phi_i,\mu_o,\phi_o)L_i(\mu_i,\phi_i)\mu_id\mu_id\phi_i.\tag{9.6}
$$

仅在光和视图方向都在表面上方的情况下才定义BRDF。通过将BRDF乘以零或者不首先评估BRDF的这些方向,可以避免光方向在表面下的情况。但是,表面下的视图方向呢,换句话说,点积n·v是负的?从理论上讲,这种情况永远不会发生。表面将背离相机,因此是不可见的。然而,在实时应用中常见的插值顶点法线和法线贴图可以在实践中产生这样的情况。通过将n·v钳位到0或使用其绝对值,可以避免对表面下的视图方向评估BRDF,但是这两种方法都可能导致伪影。 Frostbite引擎使用$(\boldsymbol{n}\cdot\boldsymbol{v})$的绝对值加上一个小数字(0.00001)来避免除以零。另一种可能的方法是“soft clamp”,随着n和v之间的角度增加超过90°,它逐渐变为零。

物理定律对任何BRDF都施加了两个约束。 第一个约束是亥姆霍兹互易性(Helmholtz reciprocity),这意味着可以切换输入和输出角度,并且函数值将是相同的:

$$
f(\boldsymbol{l},\boldsymbol{v})=f(\boldsymbol{v},\boldsymbol{l})\tag{9.7}
$$

在实践中,渲染中使用的BRDF经常违反亥姆霍兹互易性而并没有明显的失真,除了特别需要互易性的离线渲染算法,例如双向路径追踪。 但是,在确定BRDF是否物理合理时,它是一种有用的工具。

第二个限制是能量守恒,输出能量不能大于输入能量(不包括发光表面,这是作为特殊情况处理的)。离线渲染算法(如路径跟踪)需要节能以确保收敛。对于实时渲染,不需要精确的节能,但近似的节能非常重要。使用明显违反能量守恒的BRDF渲染的表面太亮,因此可能看起来不切实际。

定向半球反射率(directional-hemispherical reflectance)$R(\boldsymbol{l})$是与BRDF有关的函数。 它可以用来衡量BRDF保存能量的程度。尽管名称有些令人生畏,但定向半球反射是一个简单的概念。它测量来自给定方向的光量,该光线完全反射到半球表面法线周围的任何向外方向。基本上,它测量给定进入方向的能量损失。此函数的输入是传入方向向量$\boldsymbol{l}$,其定义如下所示:

$$
R(\boldsymbol{l})=\int_{\boldsymbol{v}\in\Omega}f(\boldsymbol{l},\boldsymbol{v})(\boldsymbol{n}\cdot\boldsymbol{v})d\boldsymbol{v}\tag{9.8}
$$

注意,这里v,与反射率方程中的l一样,扫过整个半球并且不代表单一的观察方向。

类似但在某种意义上相反的功能,半球方向反射率(hemispherical-directional reflectance)$R(\boldsymbol{v})$可以类似地定义:

$$
R(\boldsymbol{v})=\int_{\boldsymbol{l}\in\Omega}f(\boldsymbol{l},\boldsymbol{v})(\boldsymbol{n}\cdot\boldsymbol{l})d\boldsymbol{l}\tag{9.9}
$$

如果BRDF的参数是可以互换的,则半球方向反射率和方向半球反射率相等,并且可以使用相同的函数来计算任一个。在可互换使用的情况下,定向反照率(Directional albedo)可用作两种反射率的总称。

由于能量守恒,方向半球反射率$R(\boldsymbol{l})$的值必须始终在[0, 1]。 反射率值0表示所有入射光被吸收或以其他方式丢失的情况。如果所有光都被反射,则反射率将为1,大多数情况下,它将介于这两个值之间。与BRDF一样,$R(l)$的值随波长而变化,因此它表示为RGB矢量用于渲染目的。 由于每个组件(红色,绿色和蓝色)被限制在区间[0, 1]之间,可以简单的认为$R(\boldsymbol{l})$的值为一个颜色。请注意,此限制不适用于BRDF的值。作为分布函数,如果BRDF描述的分布非常不均匀,则BRDF可以在某些方向(例如突出显示的中心)具有任意高的值。 BRDF能量守恒的必要条件是对于l的所有可能值,$R(\boldsymbol{l})$不大于1。

最简单的BRDF是Lambertian,它对应于第5.2节中简要讨论的Lambertian着色模型。 Lambertian BRDF具有恒定值。 区分Lambertian着色的众所周知的(n·l)因子不是BRDF的一部分,而是公式9.4的一部分。尽管简单,Lambertian BRDF通常用于实时渲染以表示局部次表面散射(尽管它被更准确的模型所取代,如第9.9节所述)。 朗伯表面的方向半球反射率也是常数。 对于$f(\boldsymbol{l},\boldsymbol{v})$的常数值,计算公式9.8,得到以下作为BRDF函数的方向半球反射率值:

$$
R(\boldsymbol{l})=\pi f(\boldsymbol{l},\boldsymbol{v})\tag{9.10}
$$

Lambertian BRDF的恒定反射率值通常被称为漫反射色彩$c_{\text{diff}}$或反照率$\rho$。在本章中,为了强调与次表面散射的联系,我们将这个量称为次表面反照率(subsurface albedo)$\rho_{ss}$。 第9.9.1节详细讨论了次表面反照率。公式9.10中的BRDF给出以下结果:

$$
f(\boldsymbol{l},\boldsymbol{v})=\frac{\rho_{ss}}{\pi}.\tag{9.11}
$$

1/π是由于在半球上积分余弦产生π值引起的,这些因素常见于BRDF。

理解BRDF的一种方法是在输入方向保持不变的情况下将其可视化,见图9.18。对于给定的入射光方向,将显示所有传出方向的BRDF值。交叉点周围的球形部分是漫射分量,因为输出辐射在任何方向上反射具有相同的概率。椭圆形片是镜面波瓣(specular lobe)。当然,这些波瓣在入射光的反射方向上,波瓣的厚度对应于反射的模糊性。 通过互易原理,这些相同的可视化也可以被认为是每个不同的入射光方向对单个输出方向有多大贡献。

图9.18示例BRDF。来自每个图右侧的绿色实线是入射光方向,绿色和白色虚线是理想的反射方向。在第一行中,左图显示了Lambertian BRDF(一个简单的半球)。中图显示Blinn-Phong突出显示增加了Lambertian术语。 右图显示Cook-Torrance BRDF。 请注意反射高光在反射方向上的强度不是很强。在底行,左图显示了Ward的各向异性模型的特写。在这种情况下,效果是使镜面反射倾斜。中图显示了Hapke/Lommel-Seeliger“月球表面(lunar surface)”BRDF,它具有强烈的逆向反射。右图显示了Lommel-Seeliger散射,其中多尘的表面将光散射到掠射角。 (图片由Szymon Rusinkiewicz提供,来自他的“bv”BRDF浏览器。)

9.4 Illumination(照明)

反射率方程(方程式9.4)中的$L_i(\boldsymbol{l})$(入射辐射)项表示从场景的其他部分照射到阴影表面点上的光。全局照明算法通过模拟光如何在整个场景中传播和反射来计算$L_i(\boldsymbol{l})$。这些算法使用渲染方程,其反射方程是一种特殊情况。全局照明将在第11章中讨论。在本章和下一章中,我们将重点放在局部照明上,它使用反射方程在每个表面点局部计算着色。在局部照明算法中,$L_i(\boldsymbol{l})$是给出的并且不需要计算。

在写实的场景中,$L_i(\boldsymbol{l})$包括来自所有方向的非零辐射,无论是直接从光源发射还是从其他表面反射。与5.2节中讨论的平行光和点源光不同,真实世界的光源是覆盖非零立体角的区域光源。在本章中,我们使用限制形式的$L_i(\boldsymbol{l})$,仅由平行光和点源光组成,为第10章留下更多的一般照明环境。这种限制允许更集中的讨论。

虽然平行光和点源光是非物理抽象,但它们可以作为物理光源的近似来导出。 这样的推导很重要,因为它使我们能够将这些灯合并到基于物理的渲染框架中,并确保我们理解所涉及的错误。

我们采用一个小的远距离区域光并将$\boldsymbol{l}_c$定义为指向其中心的向量。我们还将光的颜色定义为从白色朗伯表面朝向光$\boldsymbol{n=l_c}$的反射辐射。这是为了创作的直观定义,因为光的颜色直接对应于其视觉效果。

根据这些定义,可以导出定向光作为将区域光的大小缩小到零同时保持$c_{light}$值的极限情况。在这种情况下,反射系数公式(公式9.4)中的积分简化为单个BRDF,计算成本显着降低:

$$
L_o(\boldsymbol{v})=\pi f(\boldsymbol{l}_c,\boldsymbol{v})\boldsymbol{c}_{light}\boldsymbol{n}\cdot\boldsymbol{l}_c)\tag{9.12}
$$

点积$(\boldsymbol{n}\cdot\boldsymbol{l})$通常clamping到0,作为从表面下的灯光中跳过贡献的便捷方法:

$$
L_o(\boldsymbol{v})=\pi f(\boldsymbol{l}_c,\boldsymbol{v})\boldsymbol{c}_{light}(\boldsymbol{n}\cdot\boldsymbol{l}_c)^+.\tag{9.13}
$$

请注意第1.2节中介绍的+的表示法,它表示负值被clamping到0。

点光源可以类似地对待。 唯一的区别是区域光不需要远离,并且光线作为到光的距离的倒数平方而下降,如公式5.11中所示。 在多个光源的情况下,多次计算公式9.12并将结果相加:

$$
L_o(\boldsymbol{v})=\pi\sum^n_{i=1}f(\boldsymbol{l}_{c_i},\boldsymbol{v})\boldsymbol{c}_{light_{i}}(\boldsymbol{n}\cdot\boldsymbol{l}_{c_i})^+,\tag{9.14}
$$

其中$\boldsymbol{l}_{c_i}$和$\boldsymbol{c}_{light_{i}}$分别是第i个光的方向和颜色。请注意与公式5.6的相似之处。

公式9.14中的π因子抵消了经常出现在BRDF中的1/π因子(例如,公式9.11)。此抵消将除法运算移出着色器,并使着色方程更易于阅读。但是,在从学术论文中调整BRDF以用于实时着色方程时必须小心。通常,BRDF在使用前需要乘以π。

9.5 Fresnel Reflectance(菲涅尔反射)

在9.1节中,我们讨论了高层次的光物质相互作用。 在9.3节中,我们介绍了用数学表达这些相互作用的基本机制:BRDF和反射方程。 现在我们已经准备好开始深入研究特定现象,量化它们,以便它们可以用于着色模型。 我们将从在9.1.3节中初次讨论过的平面反射开始。

物体的表面是周围介质(通常是空气)和物体物质之间的界面。 光与两种物质之间的平面界面的相互作用遵循由Augustin-Jean Fresnel(1788-1827)开发的菲涅耳方程。菲涅耳方程需要遵循几何光学假设的平面界面。换句话说,假设表面在1个光波长和100个波长之间没有任何不规则性。小于该范围的不规则性对光没有影响,并且较大的不规则性有效地使表面倾斜但不影响其局部平坦度。

入射在平坦表面上的光分成反射部分和折射部分。反射光的方向(由矢量$\boldsymbol{r}_i$表示)与表面法线n形成相同的角度($\theta_i$)作为进入方向$\boldsymbol{l}$。反射向量 $\boldsymbol{r}_i$可以从n和l计算:

$$
\boldsymbol{r}_i=2(\boldsymbol{n}\cdot\boldsymbol{l})\boldsymbol{n}-\boldsymbol{l}.\tag{9.15}
$$

见图9.19。反射的光量(作为入射光的一部分)由菲涅耳反射率(Fresnel reflectance)F描述,其取决于入射角$θ_i$。

图9.19

如第9.1.3节所述,反射和折射受平面两侧两种物质折射率的影响。我们将继续使用该讨论中的符号。值$n_1$ 是交界面上面物质的折射率,即入射和反射光传播的地方,$n_2$ 是交界面下物质的折射率,即折射光传播的地方。

菲涅耳方程描述了F对$\theta_i$,$n_1$和 $n_2$ 的依赖性。 我们将描述它们的重要特征,而不是呈现有些复杂的方程本身。

9.5.1 External Reflection(外反射)

External Reflection是n1 <n2的情况。 换句话说,光源自折射率较低的表面一侧。 大多数情况下,这一面含有空气,折射率约为1.003。 为简单起见,我们假设n1 = 1。 从物体到空气的相反过渡称为内反射(internal reflection),稍后将在9.5.3节中讨论。

对于给定的物质,菲涅耳方程可以解释为定义反射率函数$F(\theta_i)$,仅取决于入射光角度。原则上,$F(\theta_i)$ 的值在可见光谱上连续变化。出于渲染目的,其值被视为RGB向量。函数$F(\theta_i)$具有以下特征:

  • 当$\theta_i=0°$ 时,光垂直于表面$(l=n)$,$F(\theta_i) $具有作为物质属性的值。该值$F_0$可以被认为是物质的特征镜面颜色。$\theta_i= 0°$时的情况称为法向入射(normal incidence)。
  • 当$\theta_i$ 增加并且光以越来越多的掠射角照射到表面时,$F(\theta_i) $的值将趋于增加,在$\theta_i= 90°$时所有频率值达到值1(白色)。

图9.20显示了几种物质的$F(\theta_i)$ 函数,它以几种不同的方式显示。曲线是高度非线性的,它们几乎没有变化,直到$\theta_i = 75°$左右,然后很快变为1。从$F_0$ 到1的增加大多是无变化的,尽管有些物质在达到白色之前(例如图9.20中的铝)略有下降 。

图9.20

在镜面反射的情况下,出射角或视角与入射角相同。这意味着与$\theta_i$ 接近90°的入射光对眼镜来说也同样处于掠射角。因此,反射率的增加主要见于物体的边缘。此外,从相机的角度来看,表面上反射率增加最强的部分会缩短,因此它们占据的像素数量相对较少。为了显示菲涅耳曲线与其视觉突出度成比例的不同部分,图9.22中的菲涅耳反射率图和彩条以及图9.20的下半部分相对于$sin(\theta_i)$而不是直接针对$\theta_i$ 绘制。 图9.21说明了为什么$sin(\theta_i)$是一个适当的轴选择。

图9.21

从这一点来看,我们通常会使用符号$F(\boldsymbol{n},\boldsymbol{l})$代替$F(\theta_i)$作为菲涅耳函数,以强调所涉及的向量。回想一下$\theta_i$ 是矢量n和l之间的角度。当菲涅耳函数作为BRDF的一部分并入时,通常用不同的矢量代替表面法线n。详细信息请参见第9.8节。

掠射角度下反射率的增加通常被称为呈现出菲涅耳效应(在其他领域,该术语具有与无线电波传输有关的不同含义)。 您可以通过简短的实验看到菲涅耳效应。 拿一部智能手机,坐在明亮的区域,如电脑显示器。 不打开它,首先将手机靠近胸部,向下看,然后稍微倾斜,使其屏幕反射显示器。 手机屏幕上的显示器应该反射较弱。 这是因为玻璃的垂直入射反射率非常低。 现在将智能手机抬起,使其大致位于您的眼睛和显示器之间,并再次调整屏幕角度以反映显示器。 现在,手机屏幕上显示器的反射几乎与显示器本身一样明亮。

除了它们的复杂性之外,菲涅耳方程还具有其他属性,使得它们在渲染中的直接使用变得困难。 它们需要在可见光谱上采样的折射率值,并且这些值可以是复数。图9.20中的曲线表明基于特征镜面反射颜色$F_0$ 的更简单的方法。Schlick给出了菲涅耳反射率的近似值:

$$
F(\boldsymbol{n},\boldsymbol{l})\approx F_0+(1-F_0)(1-(\boldsymbol{n\cdot l})^+)^5.\tag{9.16}
$$

此功能是白色和$F_0$ 之间的RGB插值。尽管如此简单,但近似值是相当准确的。

图9.22包含了几种与Schlick曲线不同的物质,在“变为白色”之前显示出明显的“凹陷”。实际上,选择底行中的物质是因为它们在很大程度上偏离了Schlick近似。即使对于这些物质也是如此。物质产生的误差是非常微妙的,如图中每个图底部的彩条所示。在极少数情况下,精确捕捉这些材料的行为很重要,可以使用Gulbrandsen给出的替代近似值这种近似可以实现与金属的完整菲涅耳方程的紧密匹配,尽管它比Schlick的计算成本更高。更简单的选择是修改Schlick的近似值以允许将最终项提高到5以外的幂(如公式9.18所示)这将改变90°过渡到白色的“锐度”,这可能导致更接近的匹配。拉加德总结了菲涅耳方程和它们的几个近似值。

使用Schlick近似时,$F_0$ 是控制菲涅耳反射率的唯一参数。这很方便,因为F0在[0,1]中有一个明确定义的有效值范围。易于使用标准颜色选择界面进行设置,并且可以使用为颜色设计的纹理格式进行纹理化。此外,F0的参考值可用于许多真实材料。 折射率也可用于计算$F_0$。通常假设$n_1 = 1$,近似于空气的折射率,并使用n而不是$n_2$来表示物体的折射率。 这种简化给出了以下等式:

$$
F_0=(\frac{n-1}{n+1})^2\tag{9.17}
$$

如果使用(复杂)结果的大小,该等式甚至对于复值折射率(例如金属的折射率)也起作用。 在折射率在可见光谱上显着变化的情况下,计算$F_0$的精确RGB值需要首先在密集的波长采样下计算$F_0$ ,然后使用第8.1.3节中描述的方法将得到的光谱矢量转换为RGB值。

在一些应用中,使用了更一般的Schlick近似形式:

$$
F(\boldsymbol{n},\boldsymbol{l})\approx F_0+(F_{90}-F_0)(1-(\boldsymbol{n\cdot l})^+)^{\frac1p}\tag{9.18}
$$

这样可以控制菲涅耳曲线在90°处的颜色,以及“清晰度”。使用这种更通用的形式通常是为了增加艺术控制,但它也可以在某些情况下帮助匹配实现物理效果。如上所述,修改幂可以使某些材质更合适。另外,将$F_{90}$设置为白色以外的颜色可以帮助匹配Fresnel方程未能很好描述的材质,例如表面由小于波长的细小灰尘覆盖。

9.5.2 Typical Fresnel Reflectance Values(典型的菲涅尔反射值)

就其光学性质而言,物质分为三个主要类别。有电介质(dielectrics,绝缘体);金属(导体);和半导体(介于电介质和金属之间)。

Fresnel Reflectance Values for Dielectrics (电介质的菲涅尔反射率)

日常生活中遇到的大多数材料是电介质,玻璃,皮肤,木材,头发,皮革,塑料,石材和混凝土等等。水也是电介质。最后可能是令人惊讶的,因为在日常生活中已知水导电,但这种导电性是由于各种杂质造成的。电介质具有相当低的$F_0$值,通常为0.06或更低。在垂直入射时的这种低反射率使得菲涅耳效应对于电介质尤其可见。电介质的光学性质在可见光谱上很少变化很大,导致无色反射率值。几种常见电介质的$F_0$值如表9.1所示。这些值是标量而不是RGB,因为RGB通道对于这些材料没有显着差异。为方便起见,表9.1包括线性值以及使用sRGB传递函数编码的8位值(通常应用程序在纹理绘制中使用的形式)。

表9.1

其他电介质的$F_0$ 值可以通过查看表中的类似物质来推断。 对于未知的电介质,0.04是合理的默认值,与大多数常见材料相差不远。

表9.2

一旦光被传输到电介质中,它可以进一步散射或吸收。 第9.9节将更详细地讨论此过程的模型。 如果材料是透明的,那么光将持续直到它从内部离开物体表面,这将在第9.5.3节中详述。

Fresnel Reflectance Values for Metals 金属的菲涅耳反射值

金属的$F_0$ 几乎总是0.5或更高。一些金属具有在可见光谱范围内变化的光学性质,导致有色反射率值。 几种金属的F0值如表9.2所示。

与表9.1类似,表9.2具有线性值以及用于纹理化的8位sRGB编码值。 然而,这里我们给出RGB值,因为许多金属都有菲涅耳反射率的颜色。这些RGB值使用sRGB(和Rec.709)的原色和白点定义。 黄金有一个不寻常的$F_0$ 值。它是着色中最强烈的,红色通道值略高于1(它比sRGB / Rec.709色域超出了一点店)和特别低的蓝色通道值(表9.2中唯一的值明显低于0.5)。它也是最亮的金属之一,从表中的位置可以看出,它按照增加亮度的顺序排序。黄金的明亮和强烈的颜色反射可能有助于其历史上独特的文化和经济意义。

回想一下,金属会立即吸收任何透射光,因此它们不会出现任何次表面散射或透明度。金属的所有可见颜色都来自$F_0$ 。

Fresnel Reflectance Values for Semiconductors 半导体的菲涅尔反射值

表9.3

正如人们所预料的那样,半导体在最亮的电介质和最暗的金属之间具有$F_0$值,如表9.3所示。在实践中很少需要渲染这样的物质,因为大多数渲染的场景都没有充满晶体硅块。出于实际目的,应避免$F_0$ 值在0.2和0.45之间的范围,除非您故意尝试模拟异国情调或不切实际的材质。

Fresnel Reflectance Values in Water

在我们对外部反射的讨论中,我们假设渲染表面被空气包围。 如果不是,则反射率将改变,因为它取决于界面两侧的折射率之间的比率。 如果我们不能再假设$n_1 = 1$,那么我们需要将公式9.17中的n替换为相对折射率,$n_1/n_2$。 这产生以下更通用的等式:

$$
F_0=(\frac{n_1-n_2}{n_1+n_2})^2.\tag{9.19}
$$

可能最常遇到的$n_1\neq1$的情况,是渲染水下场景时。由于水的折射率比空气的折射率高约1.33倍,因此$F_0$ 的值在水下是不同的。对于电介质而言,这种效应比对金属更强,如表9.4所示。

表9.4
Parameterizing Fresnel Values (参数化菲涅尔值)

经常使用的参数化结合了镜面反射颜色$F_0$ 和漫反射颜色$ρ_{ss}$(漫反射颜色将在第9.9节中进一步讨论)。这种参数化利用了观察到金属没有漫反射颜色,并且电介质具有一组有限的$F_0$ 可能值,它包括RGB表面颜色$c_{surf}$和标量参数m,称为"metallic“或"metalness"。如果m = 1,则将$F_0$设置为$c_{surf}$并将$ρ_{ss}$设置为黑色。如果$m=0$,则将$F_0$ 设置为介电值(常数或由附加参数控制),并将$ρ_{ss}$设置为$c_{surf}$。

由布朗大学首先使"metalness"作为参数使用的早期着色模型的一部分出现,其当前形式的参数化首先由皮克斯用于电影Wall-E。对于迪士尼使用的着色模型 ,用于Wreck-It Ralph的迪士尼动画电影,Burley添加了一个额外的标量“镜面”参数来控制介质$F_0$ 在有限的范围内。这种形式的参数化用于虚幻引擎,Frostbite引擎使用稍微不同的形式,电介质的$F_0$ 值可能范围更大。游戏“使命召唤:无限战争”使用一种变体,将这些金属度和镜面反射参数打包成单个值,以节省内存。

对于那些使用此金属度参数化而不是直接使用$F_0$ 和$ρ_{ss}$ 的渲染应用程序,动机包括用户便利性和保存纹理或G缓冲区存储。在游戏“使命召唤:无限战争”中,此参数化以不寻常的方式使用。 艺术家为$F_0$ 和$ρ_{ss}$ 绘制纹理,它们作为压缩方法自动转换为金属度参数化。

一些实时应用使用的另一种参数化技巧利用了这样的事实:除了特殊抗反射涂层之外,没有材质具有低于0.02的$F_0 $值。该技巧用于抑制表示空腔或空隙的表面区域中的镜面高光。不使用单独的镜面遮挡纹理,使用低于0.02的$F_0$ 值来“关闭”菲涅耳边缘增亮。这种技术最初由Schüler提出,用于Unreal和Frostbite引擎。

9.5.3 Internal Reflection(内反射)

尽管在渲染中更经常遇到外部反射,但内部反射有时也很重要。 当n1> n2时发生内部反射。换句话说,当光在透明物体内部行进并“从内部”遇到物体表面时,会发生内部反射。见图9.23。

图9.23

斯内尔定律(Snell's law)表明,对于内反射,$sinθ_t>sinθ_i$。 由于这些值都在0°和90°之间,因此这种关系也意味着$θ_t>θ_i$,如图9.23所示。在外部反射的情况下,情况恰恰相反,将此行为与第302页的图9.9进行比较。这种差异是理解内部和外部反射如何不同的关键。 在外部反射中,sinθ的有效(较小)值存在于0和1之间的sinθi的每个可能值。对于内部反射也是如此。 对于$θ_i$大于临界角(critical angle)θc的值,Snell定律意味着$sinθ_t> 1$,这是不可能的。现实中发生的事情是没有$θ_t$。 当$θ_i>θ_c$时,不发生透射,并且所有入射光都被反射。 这种现象称为全内反射(total internal reflection)。

在可以切换输入和传输矢量并且反射率保持相同的意义上,菲涅耳方程是对称的。结合Snell定律,这种对称性意味着内反射的$F(θ_i)$曲线将类似于外部反射曲线的"压缩"版本。两种情况下$F_0$的值相同,在θc而不是在90°时的内部反射曲线达到完美反射率。如图9.24所示,这也表明,在内部反射的情况下,平均反射率更高。例如,这就是为什么在水下看到的气泡具有高反射性,银色的外观。

图9.24

内部反射仅发生在电介质中,因为金属和半导体可以快速吸收在其内部传播的任何光。由于电介质具有实数折射率,因此从折射率或$F_0$ 计算临界角非常简单:

$$
\sin\theta_c=\frac{n_2}{n_1}=\frac{1-\sqrt{F_o}}{1+\sqrt{F_0}}.\tag{9.20}
$$

公式9.16中所示的Schlick近似对于外部反射是正确的。通过将透射角$θ_t$代入$θ_i$ ,它可以用于内反射。如果已经计算了传输方向向量t(例如,用于渲染折射,参见第14.5.2节),则可以使用它来找到$θ_t$ 。 否则Snell定律可用于从$θ_i$计算$θ_t$ ,但这是昂贵的并且需要折射率,可能是不可用的。

9.6 Microgeometry(微观几何学)

正如我们之前在第9.1.3节中所讨论的那样,远小于像素的表面不规则性无法明确地建模,因此BRDF会在统计上模拟其聚合效应。现在我们继续研究几何光学领域,它假设这些不规则性要么小于光波长(因此对光的行为没有影响),要么大得多。“波光学领域”中的不规则性(大小约为1-100波长)的影响将在第9.11节中讨论。

每个可见表面点包含许多微表面法线,它们反射不同方向的反射光。由于单个微平面的方向有些随机,因此将它们建模为统计分布是有意义的。对于大多数表面,微观几何表面法线的分布是连续的,在宏观表面法线处具有强峰。 这种分布的“紧密度”由表面粗糙度决定。表面越粗糙,“微观几何法线”将越多。

增加微尺度粗糙度的可见效果是反射的环境细节的更大模糊。在小而明亮的光源的情况下,这种模糊导致更宽和更暗的镜面高光。来自较粗糙表面的那些较暗,因为光能被扩散到更宽的方向锥。这种现象可以在图9.12中的照片中看到。

图9.25显示了可见的反射率是如何从各个微尺度表面细节的聚合反射得到的。该系列图像显示由单个光照射的曲面,其中凸起的比例稳定地减小,直到在最后一个图像中凸起比单个像素小得多。许多小亮点中的统计模式最终成为所得聚合亮点形状的细节。例如,周边的单个凹凸高光的相对稀疏性成为远离其中心的聚合高光的相对暗度。

对于大多数表面,微尺度表面法线的分布是各向同性的,这意味着它是旋转对称的,缺乏任何固有的方向性。其他表面具有各向异性的微米级结构。这样的表面具有各向异性的表面法线分布,导致反射和高光的方向模糊。见图9.26。

图9.26

一些表面具有高度结构化的微观几何学,导致各种微尺度正态分布和表面外观。 面料是一个常见的例子,天鹅绒和绸缎的独特外观是由于它们的微观几何结构。织物模型将在第9.10节中讨论。

图9.27

虽然多个表面法线是微观几何学对反射率的主要影响,但其他影响也很重要。阴影是指通过微尺度表面细节遮挡光源,如图9.27左侧所示。在图的中心处显示掩蔽,其中一些面相对于摄像机被隐藏。

如果微观几何高度与表面法线之间存在相关性,则阴影和遮蔽可以有效地改变正态分布。例如,想象一下通过风化或其他过程使凸起部分平滑的表面,并且下部保持粗糙。在掠射角度时,表面的下部将趋向于被遮蔽或遮盖,从而产生有效的更光滑的表面。见图9.28。

图9.28

对于所有表面类型,表面不规则的可见尺寸随着与法线的入射角$θ_i$ 的增加而减小。在非常掠射的角度,这种效果可以减少观察到的不规则尺寸比光的波长短,使它们“消失”。这两种效果与菲涅耳效应相结合,当观察和照明角度接近90°时,使表面看起来很高度反光。

微尺度表面细节遮挡的光线不会消失。它可能反映在其他微观几何学上。在它到达眼睛之前,光可以以这种方式经历多次反弹。这种互反射显示在图9.27的右侧。由于在每次反弹时光被菲涅耳反射率衰减,因此在电介质中互相反射趋于微妙。在金属中,多次反射是任何可见漫反射的来源,因为金属缺乏次表面散射。彩色金属的多次反射比初级反射更深,因为它们是光与表面多次相互作用的结果。

到目前为止,我们已经讨论了微观几何学对镜面反射率的影响,即表面反射率。 在某些情况下,微尺度表面细节也会影响次表面反射率。如果微观几何不规则性大于次表面散射距离,则阴影和遮蔽可以引起逆向反射效应,其中光优先被反射回入射方向。出现这种效果是因为当观看和照明方向差别很大时,阴影和遮蔽会遮挡被照亮的区域。见图9.29。逆向反射倾向于使粗糙表面具有平坦的外观。 见图9.30。

图9.29

图9.30

9.7 Microfacet Theory(微面理论)

许多BRDF模型基于微观几何学对反射率的影响的数学分析,称为微平面理论。 该工具最初由光学界的研究人员开发。它于1977年由Blinn引入计算机图形学,1981年由Cook和Torrance引入。该理论基于微观几何的建模,作为微平面(microfacets)的集合。

这些微小面中的每一个都是平坦的,具有单个微平面法线m。微平面根据micro-BRDF $f_μ(\boldsymbol{1}, \boldsymbol{v}, \boldsymbol{m})$单独反射光,所有微平面的组合反射率相加得到整个表面的BRDF。通常的选择是每个microfacet都是一个完美的菲涅耳镜,产生一个镜面微平面BRDF,用于建模表面反射。但是,其他选择也是可能的。漫射微BRDF已被用于创建若干局部次表面散射模型。衍射微BRDF用于创建结合几何和波光学效应的着色模型。

microfacet模型的一个重要特性是microfacet法线m的统计分布。此分布由曲面的正态分布函数或(normal distribution function)NDF定义。一些参考文献使用术语“(distribution of normals)法线分布”来避免与正态分布混淆。我们将使用$D(\boldsymbol{m})$来指代方程中的NDF。

NDF $D(\boldsymbol{m})$是微观几何表面面积上的微平面表面法线的统计分布。将$D(\boldsymbol{m})$积分在整个微平面法线上,得到微表面的面积。更有用的是,积分$D(\boldsymbol{m})(\boldsymbol{n·m})$,$D(\boldsymbol{m})$投影到宏观表面平面上,按照惯例给出宏观曲面贴片的面积等于1,如图9.31左侧所示。换句话说,投影$D(\boldsymbol{m})(\boldsymbol{n·m})$被归一化:

$$
\int_{\boldsymbol{m}\in\Theta}D(\boldsymbol{m})(\boldsymbol{n·m})d\boldsymbol{m}=1\tag{9.21}
$$

积分在整个球体上,在这里用Θ表示,不像本章中的先前球形积分,它仅集成在以n为中心的半球上,用Ω表示。这种表示法在大多数图形出版物中使用,但有些参考文献使用Ω来表示完整的球体。实际上,图形中使用的大多数微结构模型都是高度场,这意味着对于Ω外的所有方向,$D(\boldsymbol{m})=0$。但是,公式9.21也适用于非高度场微观结构。

更一般地,微表面的投影和宏观表面在垂直于视图方向v的平面上的投影是相等的:

$$
\int_{\boldsymbol{m}\in\Theta}D(\boldsymbol{m})(\boldsymbol{n·m})d\boldsymbol{m}=\boldsymbol{v\cdot n}.\tag{9.22}
$$

公式9.21和9.22中的点积不会被钳制为0。图9.31的右侧显示了原因。公式9.21和9.22强加了函数$D(\boldsymbol{m})$必须服从的约束是有效的NDF。

直觉上,NDF就像是微平面法线的直方图。它使用微平面法线更可能指向的方向上作为高度值。大多数表面都具有在宏观表面法线n处显示出强峰值的NDF。第9.8.1节将介绍几种用于渲染的NDF模型。

再看一下图9.31的右侧。尽管存在许多具有重叠投影的微平面,但最终用于渲染我们仅关注可见微平面,即在每个重叠集中最接近相机的微平面。这一事实表明了将投影的微平面区域与投影的宏观几何区域相关联的另一种方法:可见微平面的投影面积之和等于宏观表面的投影面积。我们可以通过定义掩蔽函数(masking function)$G_1(\boldsymbol{m},\boldsymbol{v})$来数学表达,它给出了沿着视图向量v可见的具有正常m的微平面的分数。$G_1(\boldsymbol{m,v})D(\boldsymbol{m})(\boldsymbol{v\cdot m})^+dm$的积分在球体上方然后给出投影到垂直于v的平面上的宏观表面区域:

$$
\int_{\boldsymbol{m}\in\Theta}G_1(\boldsymbol{m,v})D(\boldsymbol{m})(\boldsymbol{v·m})^+d\boldsymbol{m}=\boldsymbol{v\cdot n}.\tag{9.23}
$$

如图9.32所示。与公式9.22不同,公式9.23中的点积被钳制为零。背面微平面不可见,因此在这种情况下不计算它们。乘积$G_1(\boldsymbol{n·m})D(\boldsymbol{m})$ 是可见法线的分布(distribution of visible normals)。

图9.32

公式9.23对$G_1(m, v)$施加约束,但不能唯一地决定它。存在满足给定微平面正态分布$D(m)$的约束的无限函数。 这是因为$D(m)$ 没有完全指定微表面。 它告诉我们有多少微平面具有指向某些方向的法线,而不是它们如何排列。

尽管多年来已经提出了各种$G_1$函数,但是在Heitz的优秀论文中,至少在现在已经解决了使用哪种函数的困境。 Heitz讨论了Smith掩蔽函数,该函数最初是为高斯正态分布导出的,后来推广到任意NDF。Heitz表明,出于文献中提出的掩蔽函数,只有两个,Smith函数和Torrance-Sparrow“V腔”函数服从公式9.23,且在数学上是有效的。他进一步表明,Smith函数与随机微表面的行为比TorranceSparrow函数更接近。Heitz还证明了Smith掩蔽函数是唯一可能的函数,它既遵循公式9.23又具有正常掩蔽独立性的方便性。这意味着只要m不是背面,即只要$m·v≥0$,$G_1(m,v)$的值就不依赖于m的方向。Smith $G_1$ 函数具有以下形式:

$$
G_1(\boldsymbol{m},\boldsymbol{v})=\frac{\chi^+(\boldsymbol{m\cdot v})}{1+\Lambda(\boldsymbol{v})},\tag{9.24}
$$

其中$\chi^+(x)$是正特征函数(characteristic function):

$$
\chi^+(x)=
\begin{cases}
1,;where;x\gt0,\\
0,;where;x\le0.
\end{cases}\tag{9.25}
$$

每个NDF的Λ(lambda)函数不同。在Walter和Heitz等人的出版物中描述了导出给定NDF的Λ的过程。

Smith masking function确实有一些缺点。从理论的角度来看,它的要求与实际表面的结构不一致,甚至可能在物理上不可能实现。从实际的角度来看,虽然它对于随机表面非常准确,但是对于在法线方向和遮蔽之间具有更强依赖性的表面,例如图9.28中所示的表面,其预期精度会降低,特别是如果表面具有一些重复结构(和大多数面料一样)。 然而,在找到更好的替代方案之前,它是大多数渲染应用程序的最佳选择。

给定微观几何描述,包括微BRDF$f_μ(l, v, m)$,正态分布函数$D(m)$ 和掩蔽函数$G_1(m,v)$ ,可以导出整个宏观表面BRDF:

$$
f(\boldsymbol{l},\boldsymbol{v})=\int_{\boldsymbol{m}\in\Omega}f_μ(\boldsymbol{l, v, m})G_2(\boldsymbol{l,v,m})D(\boldsymbol{m})\boldsymbol{\frac{(m\cdot l)^+}{\vert n\cdot l \vert}\frac{(m\cdot v)^+}{\vert n\cdot v \vert}}d\boldsymbol{m}.\tag{9.26}
$$

该积分位于以n为中心的半球Ω上,以避免从表面下收集光贡献。 公式9.26使用联合屏蔽阴影函数(joint masking-shadowing function)$G_2(l, v, m)$代替屏蔽函数 $G_1(m, v)$ 。该函数从$G_1$ 导出,给出了从两个方向可见的具有正常m的微平面的分数:视图向量v和光向量l。通过包含$G_2$函数,公式9.26使BRDF能够考虑屏蔽和阴影,但不考虑微平面之间的互反射(参见第329页的图9.27)。缺少微平面互反射是由公式9.26得出的所有BRDF共有的限制。这样的BRDF有点太暗了。在第9.8.2和9.9节中,我们将讨论为解决此限制而提出的一些方法。

Heitz讨论了$G_2$ 函数的几个版本。最简单的是可分离的形式,其中使用$G_1$ 分别评估掩蔽和阴影并相乘:

$$
G_2(\boldsymbol{l,v,m})=G_1(\boldsymbol{v,m})G_1(\boldsymbol{l,m})\tag{9.27}
$$

这种形式相当于假设遮蔽和阴影是不相关的事件。实际上是不对的,并且假设使用这种形式的$G_2$ 导致BRDF过度变暗。

作为一个极端的例子,考虑视图和光线方向相同的情况。在这种情况下,$G_2$ 应该等于$G_1$ ,因为没有任何可见小平面被遮蔽,但是公式9.27中的$G_2$ 将等于 $G^2_1$。

如果微表面是高度场,这通常是渲染中使用的微表面模型的情况,那么每当v和l之间的相对方位角φ等于0°时,$G_2(l,v, m)$应该等于$min(G_1(v, m),G_1(l, m))$。有关φ的说明,请参见图9.17。这种关系提出了一种通用的方法来解释可以与任何$G_1$ 函数一起使用的屏蔽和阴影之间的相关性:

$$
G_2(\boldsymbol{l,v,m})=\lambda(\phi)G_1(\boldsymbol{v,m})G_1(\boldsymbol{l,m})+(1-\lambda(\phi))min(G_1(\boldsymbol{v,m}),G_1(\boldsymbol{l,m})),\tag{9.28}
$$

其中$λ(\phi)$是随角度φ增加而从0增加到1的某个函数。Ashikhmin等人,建议高斯标准偏差为15°(~0.26弧度):

$$
\lambda{(\phi)}=1-e^{-7.3\phi^2}.\tag{9.29}
$$

van Ginneken等人提出了不同的λ函数:

$$
\lambda(\phi)=\frac{4.41\phi}{4.41\phi+1}.\tag{9.30}
$$

无论光和视图方向的相对对准,还有另一个原因是在给定表面点处的掩蔽和阴影是相关的。两者都与点相对于表面其余部分的高度有关。对于较低点,掩蔽的概率增加,并且遮蔽的概率也增加。如果使用Smith掩蔽函数,则可以通过Smith height-correlated masking-shadowing function精确地解释此相关性:

$$
G_2(\boldsymbol{l,v,m})=\frac{\chi^+(\boldsymbol{m\cdot v})\chi^+(\boldsymbol{m\cdot l})}{1+\Lambda(\boldsymbol{v})+\Lambda(\boldsymbol{l})}.\tag{9.31}
$$

Heitz还描述了一种结合方向和高度相关性的Smith $G_2$ 形式:

$$
G_2(\boldsymbol{l,v,m})=\frac{\chi^+(\boldsymbol{m\cdot v})\chi^+(\boldsymbol{m\cdot l})}{1+max(\Lambda(\boldsymbol{v}),\Lambda(\boldsymbol{l}))+\lambda(\boldsymbol{v,l})min(\Lambda(\boldsymbol{v}),\Lambda(\boldsymbol{l}))},\tag{9.32}
$$

其中函数$λ(\boldsymbol{v},\boldsymbol{l})$可以是经验函数,例如公式9.29和9.30中的函数,或者特定于给定NDF得到的函数。

在这些替代方案中,Heitz推荐了Smith函数的高度相关形式(公式9.31),因为它与不相关的形式具有相似的成本和更高的精度。这种形式在实践中使用最广泛,尽管一些从业者使用可分离的形式(公式9.27)。

一般的微平面BRDF(公式9.26)不直接用于渲染。在给定微BRDF $f_μ$的特定选择的情况下,它用于导出闭合形式的解(精确或近似)。此类派生的第一个示例将在下一节中显示。

9.8 BRDF Models for Surface Reflection(表面反射的BRDF模型)

除了极少数例外,基于物理渲染的镜面BRDF公式都来自于微观理论。在镜面反射的情况下,每个微平面都是非常光滑的菲涅耳镜。回想一下,这样的镜子在单个反射方向上反射每个入射光线。这意味着每个小平面的微BRDF $f_μ(l,v,m)$等于零,除非v平行于l的反射。对于给定的l和v向量,这种配置等同于微平面法线m与指向l和v之间正好中间的向量对齐的情况。该向量是半向量h。见图9.33。它是通过添加v和l并将结果标准化来计算的:

$$
\boldsymbol{h}=\frac{\boldsymbol{l+v}}{\Vert\boldsymbol{l+v}\Vert}.\tag{9.33}
$$

图9.33

当从公式9.26导出镜面微平面模型时,菲涅耳镜微BRDF $f_μ(l,v,m)=0$对于所有$m\neq h$都很方便,因为它将积分简化成在$m=h$时的一个整合函数。这样做会产生镜面BRDF公式:

$$
f_{spec}(\boldsymbol{l,v})=\frac{F(\boldsymbol{h,l})G_2(\boldsymbol{l,v,h})D(\boldsymbol{h})}{4\vert\boldsymbol{n\cdot l}\vert\vert\boldsymbol{n\cdot v}\vert}\tag{9.34}
$$

关于推导的细节可以在Walter等人,Heitz和Hammon的出版物中找到。 Hammon还展示了一种通过计算n·h和l·h来优化BRDF实现的方法,而无需计算向量h本身。

图9.34

我们在公式9.34中使用符号$f_{spec}$作为BRDF项,表示它只模拟表面(镜面)反射。 在完整的BRDF中,它可能会与模拟次表面(漫反射)着色的附加术语配对。 为了对公式9.34提供一些直观感受,考虑只有那些碰巧使其法线与半矢量(m = h)对齐的微平面才能正确定向,以将来自l的光反射到v中。见图9.34。因此,反射光的量取决于法线等于h的微平面的浓度。该值由$D(h)$给出,这是从光和视图方向可见的那些微平面的分数,其等于$G_2(l,v,h)$,并且由这些微平面中的每一个反射的光的部分 ,由$F(h, l)$指定。在菲涅耳函数的计算中,矢量h代替表面法线,例如,当计算公式9.16中的Schlick近似时。

在掩蔽阴影函数中使用半矢量允许较小的简化。由于所涉及的角度永远不会大于90°,因此可以去除公式9.24,9.31和9.32中的$χ^+$项。

9.8.1 Normal Distribution Functions(法线分布函数)

法线分布函数对渲染表面的外观有显着影响。在微平面法线球体上绘制的NDF的形状决定了反射光锥(镜面波瓣)的宽度和形状,反过来又决定了镜面高光的大小和形状。NDF影响表面粗糙度的整体感知,以及更微妙的视觉方面,例如高光是否具有明显的边缘或被雾霾包围。

然而,镜面波瓣不是NDF形状的简单副本。 根据表面曲率和视角,它会因高光形状被或多或少地扭曲。对于在掠射角处观察的平坦表面,这种扭曲特别强烈,如图9.35所示。Ngan等人,分析了这种扭曲背后的原因。

图9.35,左侧的图像使用非物理Phong反射模型渲染。 该模型的镜面波瓣围绕反射矢量旋转对称。这种BRDF经常在计算机图形学的早期使用。中心的图像使用基于物理的microfacet BRDF进行渲染。左上角和中间显示以掠射角点亮的平面。左上角显示不正确的圆形突出显示,而中心显示微平面BRDF上的特征突出显示伸长。该中心视图与现实相符,如右图所示。高亮度形状的差异在较低的两个渲染图像中显示的球体上更加微妙,因为在这种情况下,表面曲率是高光形状的主要因素。(照片由Elan Ruskin提供。)
Isotropic Normal Distribution Functions 各向同性的法线分布函数

渲染中使用的大多数NDF关于宏观表面法线n是各向同性的。在这种情况下,NDF只是一个单变量函数,n与微平均法线m之间的角度$θ_m$。理想情况下,NDF可以写成$cosθ_m$的表达式,可以有效地计算为n和m的点积。

Beckmann NDF是由光学界开发的第一批微面模型中使用的正态分布。它至今仍在该社区中广泛使用。它也是Cook-Torrance BRDF选择的NDF。归一化的Beckmann分布具有以下形式:

$$
D(\boldsymbol{m})=\frac{\chi^+(\boldsymbol{n\cdot m})}{\pi\alpha^2_b(\boldsymbol{n\cdot m})^4}\exp(\frac{(\boldsymbol{n\cdot m})^2-1}{\alpha^2_b(\boldsymbol{n\cdot m})^2}).\tag{9.35}
$$

对于指向宏观表面下的所有微平面法线,$\chi^+(\boldsymbol{n\cdot m})$确保NDF的值为0。这个属性告诉我们,这个NDF,就像我们将在本节讨论的所有其他NDF一样,描述了一个高度显微表面。$α_b$参数控制表面粗糙度。它与微观几何表面的均方根(RMS)斜率成比例,因此$α_b= 0$表示完全光滑的表面。

为了得到Beckmann NDF的Smith $G_2$函数,我们需要相应的$Λ$函数,插入公式9.24(如果使用$G_2$的可分离形式),9.31(对于高度相关形式),或9.32(对于方向和高度) 。

Beckmann NDF是形状不变的(shape-invariant),它简化了$Λ$的推导。如Heitz所定义的,如果其粗糙度参数的效果等于缩放(拉伸)微表面,则各向同性NDF是形状不变的。形状不变的NDF可以用以下形式编写:

$$
D(\boldsymbol{m})=\frac{\chi^+(\boldsymbol{n\cdot m})}{\pi\alpha^2_b(\boldsymbol{n\cdot m})^4}g(\frac{\sqrt{1-(\boldsymbol{n\cdot m})^2}}{\alpha(\boldsymbol{n\cdot m})}),\tag{9.36}
$$

其中g代表任意的单变量函数。 对于任意各向同性NDF,$Λ$函数取决于两个变量。第一个是粗糙度α,第二个是计算$Λ$的入射角矢量(v或l)。然而,对于形状不变的NDF,$Λ$函数仅取决于变量a:

$$
a=\frac{\boldsymbol{n\cdot s}}{\alpha\sqrt{1-(\boldsymbol{n\cdot s})^2}},\tag{9.37}
$$

其中s是表示v或l的向量。在这种情况下$Λ$仅依赖于一个变量的事实便于实现。单变量函数可以更容易地拟合近似曲线,并且可以在一维数组中制表。

Beckmann NDF的$Λ$函数是:

$$
\Lambda(a)=\frac{erf(a)-1}{2}+\frac1{2a\sqrt{\pi}}\exp(-a^2).\tag{9.38}
$$

公式9.38的计算成本很高,因为它包括误差函数erf。因此,通常使用近似值:

$$
\Lambda(a)\approx
\begin{cases}
\frac{1-1.259a+0.396a^2}{3.535a+2.181a^2},&where;a\lt1.6,\\
0,&where;a\ge1.6.
\end{cases}\tag{9.39}
$$

我们将讨论的下一个NDF是Blinn-Phong NDF。它在过去被广泛用于计算机图形学,但最近它已很大程度上被取代了。Blinn-Phong NDF仍然用于计算非常宝贵的情况(例如,在移动硬件上),因为计算成本比本节讨论的其他NDF便宜。

Blinn-Phong NDF由Blinn推导出来,作为(基于非物理的)Phong着色模型的修改:

$$
D(\boldsymbol{m})=\chi^+(\boldsymbol{n\cdot m})\frac{\alpha_p+2}{2\pi}(\boldsymbol{n\cdot m})^{\alpha_p}.\tag{9.40}
$$

幂$α_p$是Phong NDF的粗糙度参数。高值表示光滑表面,低值表示粗糙表面。对于非常光滑的表面,$α_p$ 的值可以任意高,完美的镜面需要$α_p=\infty $。通过将$α_p$ 设置为0,可以实现最大随机表面(均匀NDF, uniform NDF)。$α_p$ 参数不便于直接操作它的视觉感受非常不均匀。对于小的$α_p$ 值,小的数值变化具有大的视觉效果,但是可以在没有太多视觉影响的情况下显着改变大的值。出于这个原因,$α_p$通常通过非线性映射从用户操纵的参数导出。例如,$α_p= m^s$,其中s是0和1之间的参数值,m是给定应用中$α_p$ 的上限。这种映射被几个游戏使用,包括使命召唤:黑色行动,其中m被设置为值8192。

当BRDF参数的行为在感知上不均匀时,这种“接口映射”通常很有用。这些映射用于通过滑块或在纹理中绘制来设置参数。

Blinn-Phong NDF不是形状不变的,并且其$Λ$函数不存在分析形式。沃尔特等人。建议将贝克曼$Λ$函数与$α_p=2α_b^{-2}-2$参数等价结合使用。

在同一篇1977年的论文中,Blinn将Phong着色函数改编成了微型NDF,他提出了另外两个NDF。在这三个分布中,Blinn推荐了一个由Trowbridge和Reitz派生的分布。这一建议没有受到广泛关注,但30年后,Trowbridge-Reitz 分布被Walter等人独立重新发现,并将它命名为GGX distribution。这一次,种子扎根了。几年之内,GGX分布开始在电影和游戏行业中传播采用,而今天它可能是两者中最常用的分布。Blinn的建议似乎已经提前了30年,尽管“Trowbridge-Reitz distribution”在技术上是正确的名称,但我们在本书中使用了GGX名称,因为它已经确立。

GGX distribution是:

$$
D(\boldsymbol{m})=\frac{\chi^+(\boldsymbol{n\cdot m})\alpha_g^2}{\pi(1+(\boldsymbol{n\cdot m})^2(\alpha^2_g-1))^2}.\tag{9.41}
$$

由$α_g$参数提供的粗糙度控制类似于由Beckmann $α_b$ 参数提供的粗糙度控制。在迪士尼标准着色模型中,Burley将粗糙度控制以$α_g= r^2$暴露给用户,其中r是0到1之间的用户界面粗糙度参数值。将r作为滑块值公开意味着效果以更线性的方式变化。大多数使用GGX 分布的应用程序都采用了这种映射。

GGX分布是形状不变的,其Λ函数相对简单:

$$
\Lambda(a)=\frac{-1+\sqrt{1+\frac{1}{a^2}}}{2}.\tag{9.42}
$$

变量a仅作为$a^2$出现在公式9.42中的事实很方便,因为可以避免公式9.37中的平方根。

由于GGX distribution和Smith masking-shadowing function的普及,人们一直致力于优化两者的组合。Lagarde观察到用于GGX的高度相关的Smith $G_2$ (公式9.31)具有与镜面微平面BRDF的分母组合时抵消的项(公式9.34)。因此可以简化组合公式:

$$
\frac{G_2(\boldsymbol{l,v})}{4\vert\boldsymbol{n\cdot l\vert\vert}\boldsymbol{n\cdot v\vert}}\Longrightarrow\frac{0.5}{\mu_o\sqrt{\alpha^2+\mu_i(\mu_i-\alpha^2\mu_i)}+\mu_i\sqrt{\alpha^2+\mu_o(\mu_o-\alpha^2\mu_o)}}.\tag{9.43}
$$

为简洁起见,该等式使用变量替换$μ_i=(\boldsymbol{n·l})^+; μ_o=(\boldsymbol{n·v})^+$。Karis为GGX提出了一个近似形式的Smith G1函数:

$$
G_1(\boldsymbol{s})\approx\frac{2(\boldsymbol{n\cdot s})}{(\boldsymbol{n\cdot s})(2-\alpha)+\alpha},\tag{9.44}
$$

其中s可以用l或v替换。Hammon表明这种近似形式的$G_1$ 导致了由高度相关的Smith G2函数和镜面微平面BRDF分母组成的组合项的有效近似:

$$
\frac{G_2(\boldsymbol{l,v})}{4\vert\boldsymbol{n\cdot l\vert\vert}\boldsymbol{n\cdot v\vert}}\approx\frac{0.5}{lerp(2\vert\boldsymbol{n\cdot l}\vert\vert\boldsymbol{n\cdot v}\vert,\vert\boldsymbol{n\cdot l}\vert+\vert\boldsymbol{n\cdot v}\vert,\alpha)},\tag{9.45}
$$

它使用线性插值算子,$lerp(x, y, s)= x(1-s)+ ys$。

当比较图9.36中的GGX和Beckmann分布时,很明显两者具有根本不同的形状。GGX比Beckmann具有更窄的峰值,以及围绕这些峰值的更长的"尾巴"。在图的底部的渲染图像中,我们可以看到GGX的较长尾部在高光的核心周围产生雾霾或发光的外观。

许多真实世界的材质显示出类似的朦胧亮点,尾巴通常比GGX分布更长。见图9.37。这种认识一直是GGX分布日益普及的重要因素,同时也在不断寻找能够更准确地拟合测量材料的新分布。

图9.37

Burley提出了广义的Trowbridge-Reitz(GTR)NDF,其目标是允许更多地控制NDF的形状,特别是分布的尾部:

$$
D(\boldsymbol{m})=\frac{k(\alpha,r)}{\pi(1+(\boldsymbol{n\cdot m})^2(\alpha_g^2-1))^\gamma}.\tag{9.46}
$$

γ参数控制尾部形状。当γ= 2时,GTR与GGX相同。随着γ的值减小,分布的尾部变得更长,并且随着它的增加,它们变得更短。在高γ值时,GTR分布类似于Beckmann。$k(α,γ)$项是归一化因子,我们在一个单独的方程中给出,因为它比其他NDF更复杂:

$$
k(\alpha,\gamma)=
\begin{cases}
\frac{(\gamma-1)(\alpha^2-1)}{(1-(\alpha^2)^{(1-\gamma)})},&where;\gamma\ne1;and;\alpha\ne1,\\
\frac{\alpha^2-1}{\ln(\alpha^2)},&where;\gamma=1;and;\alpha\ne1,\\
1,&where;\alpha=1.
\end{cases}\tag{9.47}
$$

GTR分布不是形状不变的,这使得找到其Smith G2掩蔽阴影函数变得复杂。NDF出版后花了三年时间才发布了$G_2$ 的解决方案。这个$G_2$ 解决方案非常复杂,有一些针对某些$γ$值的解析解表(对于中间值,必须使用插值)。GTR的另一个问题是参数α和γ以非直观的方式影响感知的粗糙度和"光韵"。

学生的t分布(Student’s t-distribution, STD)和指数幂分布(exponential power distribution, EPD)NDF包括形状控制参数。与GTR相比,这些函数在其粗糙度参数方面是形状不变的。在撰写本文时,这些是新发布的,因此尚不清楚它们是否会在应用程序中使用。

不是增加NDF的复杂性,更好地匹配测量材料的替代解决方案是使用多个镜面波瓣。库克和托兰斯提出了这个想法。它是由Ngan进行的实验测试,他发现对于许多材料来说,添加第二个波瓣确实可以显着提高贴合度。皮克斯的PxrSurface材质有一个“粗糙的”波瓣用于此目的(与主镜面波瓣相连)。附加波瓣是一个完整的镜面微平面BRDF,包含所有相关参数和术语。Imageworks使用更多手术方法,使用两个GGX NDF混合,这些NDF作为扩展NDF暴露给用户,而不是整个单独的镜面BRDF公式。在这种情况下,所需的唯一附加参数是第二个粗糙度值和混合量。

Anisotropic Normal Distribution Functions(各向异性的法线分布函数)

虽然大多数材质具有各向同性表面统计数据,但有些材料的微观结构具有显着的各向异性,这会显着影响其外观,例如图9.26。为了准确地渲染这些材质,我们需要BRDF,还有各向异性的NDF。

与各向同性NDF不同,不能仅用角度$θ_m$ 来计算各向异性NDF。需要其他方向信息。在一般情况下,需要将微平面法线$\boldsymbol{m}$变换为分别由法线,切线和双切线矢量$\boldsymbol{n,t}$和$\boldsymbol{b}$定义的局部框架或切线空间。请参见图6.32。实际上,此转换通常表示为三个单独的点积:$\boldsymbol{m·n}$,$\boldsymbol{m·t}$和$\boldsymbol{m·b}$。

将法线贴图与各向异性BRDF组合时,重要的是要确保法线贴图对切线和副切线矢量同样起作用。此过程通常通过将modified Gram-Schmidt应用于扰动法线n然后插值顶点切线和副切线向量$t_0$ 和 $b_0$(以下假设n已经标准化)来完成:

$$
\begin{aligned}\boldsymbol{t'}=\boldsymbol{t}_0-(\boldsymbol{t_0\cdot\boldsymbol{n}})\boldsymbol{n}&\Longrightarrow\boldsymbol{t}=\frac{\boldsymbol{t'}}{\Vert\boldsymbol{t'}\Vert},\\
\left.\begin{array}
\boldsymbol{\boldsymbol{b}}'=\boldsymbol{b_0-(b_0\cdot n)n},\\
\boldsymbol{b''=b'-(b'\cdot t)t}\\
\end{array}
\right\rbrace
&\Longrightarrow\boldsymbol{b=\frac{b''}{\Vert\boldsymbol{b''}\Vert}}.
\end{aligned}\tag{9.48}
$$

或者,在第一行之后,可以通过取n和t的叉积来创建正交b向量。

对于诸如拉丝金属或卷发之类的效果,需要对切线方向进行逐像素修改,通常由切线图(tangent map)提供。此贴图是存储每像素切线的纹理,类似于法线贴图存储每像素法线的方式。切线图最常将切线矢量的二维投影存储在垂直于法线的平面上。此表示适用于纹理过滤,可以像普通贴图一样进行压缩。某些应用程序存储标量旋转量,用于围绕n旋转切向量。虽然这种表示更紧凑,但它容易出现纹理过滤失真,其中旋转角度从360°到0°环绕。

创建各向异性NDF的常用方法是概括现有的各向同性NDF。所使用的一般方法可以应用于任何形状不变的各向同性NDF,这是形状不变的NDF是优选的另一个原因。回想一下,各向同性形状不变的NDF可以用以下形式编写:

$$
D(\boldsymbol{m})=\frac{\chi^+(\boldsymbol{n\cdot m})}{\alpha^2(\boldsymbol{n\cdot m})^4}g\left(\frac{\sqrt{1-(\boldsymbol{n\cdot m})^2}}{\alpha(\boldsymbol{n\cdot m})}\right),\tag{9.49}
$$

g表示NDF形状的一维函数。各向异性版本是

$$
D(\boldsymbol{m})=\frac{\chi^+(\boldsymbol{n\cdot m})}{\alpha_x\alpha_y(\boldsymbol{n\cdot m})^4}g\left(\frac{\sqrt{\frac{(\boldsymbol{t\cdot m})^2}{\alpha_x^2}+\frac{(\boldsymbol{b\cdot m})^2}{\alpha_y^2}}}{(\boldsymbol{n\cdot m})}\right),\tag{9.50}
$$

参数$α_x$和$α_y$分别表示沿t和b方向的粗糙度。如果$α_x=α_y$,则公式9.50缩减回各向同性形式。

各向异性NDF的G2掩蔽阴影函数与各向同性NDF相同,除了变量a(传递到Λ函数)的计算方式不同:

$$
a=\frac{\boldsymbol{n\cdot s}}{\sqrt{\alpha^2_x(\boldsymbol{t\cdot s})^2+\alpha_y^2(\boldsymbol{b\cdot s})^2}},\tag{9.51}
$$

其中(如公式9.37所示)s代表v或l。

使用这种方法,可以为Beckmann NDF推导出各向异性版本:

$$
D(\boldsymbol{m})=\frac{\chi^+(\boldsymbol{n\cdot m})}{\pi\alpha_x\alpha_y(\boldsymbol{n\cdot m})^4}exp\left(-\frac{\frac{(\boldsymbol{t\cdot m})^2}{\alpha_x^2}+\frac{(\boldsymbol{b\cdot m})^2}{\alpha_y^2}}{(\boldsymbol{n\cdot m})^2}\right),\tag{9.52}
$$
和GGX NDF:

$$
D(\boldsymbol{m})=\frac{\chi^+(\boldsymbol{n\cdot m})}{\pi\alpha_x\alpha_y(\frac{(\boldsymbol{t\cdot m})^2}{\alpha_x^2}+\frac{(\boldsymbol{b\cdot m})^2}{\alpha_y^2}+(\boldsymbol{n\cdot m})^2)^2}.\tag{9.53}
$$

两者都如图9.38所示。

图9.38

虽然参数化各向异性NDF的最直接的方法是使用各向同性粗糙度参数化两次,一次用于$α_x$ ,一次用于$α_y$ ,有时使用其他参数化。 在迪士尼原理着色模型中,各向同性粗糙度参数r与第二标量参数$k_{aniso}$组合,范围为[0,1]。因此,从这些参数计算$α_x$ 和$α_y$ 值:

$$
\begin{align}
k_{aspect}&=\sqrt{1-0.9k_{aniso}},\\
\alpha_x&=\frac{r^2}{k_{aspect}},\\
\alpha_y&=r^2k_{aspect}.
\end{align}\tag{9.54}
$$

0.9因子将纵横比限制为10:1。

Imageworks使用不同的参数化,允许任意程度的各向异性:

$$
\alpha_x=r^2(1+k_{aniso}),\\
\alpha_y=r^2(1-k_{aniso}).\tag{9.55}
$$

9.8.2 Multiple-Bounce Surface Reflection(多次反射的表面反射)

如前面第9.7节所述,微平面BRDF框架不能解释从微表面多次反射(“反弹”)的光。这种简化会导致一些能量损失和过度变暗,特别是对于粗糙金属。

Imageworks使用的一种技术结合了以前工作中的元素来创建一个可以添加到BRDF的公式,以模拟多次反射表面反射:

$$
f_{ms}(\boldsymbol{l,v})=\frac{\overline{F}\overline{R_{sF1}}}{\pi(1-\overline{R_{sF1}})(1-\overline{F}(1-\overline{R_{sF1}}))}(1-R_{sF1}(\boldsymbol{l}))(1-R_{sF1}(\boldsymbol{v})),\tag{9.56}
$$

其中$R_{sF1}$是$f_{sF1}$的方向反照率(9.3节),它是将$F_0$ 设置为1的镜面BRDF项。函数$R_{sF1}$取决于粗糙度α和仰角θ。它相对平滑,因此可以在数值上预先计算(使用公式9.8或9.9)并存储在小的二维纹理中。Imageworks发现32×32分辨率就足够了。

函数$\overline{R_{sF1}}$是半球上$R_{sF1}$的余弦加权平均值。它仅依赖于α,因此可以存储在一维纹理中,或者可以将廉价的曲线拟合到数据中。 由于$R_{sF1}$关于n旋转对称,因此可以用一维积分计算$R_{sF1}$。 我们使用变量μ=cosθ(参见公式9.6):

$$
\begin{align}
\overline{R_{sF1}}&=\frac{\int_{s\in\Omega}R_{sF1}(s)(\boldsymbol{n\cdot s})ds}{\int_{s\in\Omega}R_{sF1}(\mu)\mu d\mu}=\frac1\pi\int_{\phi=0}^{2\pi}\int_{\mu=0}^{1}R_{sF1}(\mu)\mu d\mu d\phi \\
&=2\int^1_{\mu=0}R_{sF1}(\mu)\mu d\mu.
\end{align}\tag{9.57}
$$

最后,F是菲涅耳项的余弦加权平均值,以相同的方式计算:

$$
\overline{F}=2\int^1_{\mu=0}F(\mu)\mu d\mu.\tag{9.58}
$$

在广义Schlick形式(公式9.18)用于F的情况下,Imageworks为公式9.58提供了封闭形式的解决方案:

$$
\overline{F}=\frac{2p^2F_{90}+(3p+1)F_0}{2p^2+3p+1}.\tag{9.59}
$$

图9.39 在所有行中,表面的粗糙度从左到右增加。 前两行显示金色材质。 第一行是在没有Imageworks多次反弹项的情况下渲染的,第二行是使用多次反弹项渲染的。 对于较粗糙的球体,差异最明显。 接下来的两行显示黑色介电材料。 第三行渲染时没有多次反弹项,第四行应用了多次反弹项。 这里的差异更微妙,因为镜面反射率要低得多。 (图片由Christopher Kulla提供。)

如果使用原始Schlick近似(公式9.16),则解决方案简化为:

$$
\overline{F}=\frac{20}{21}F_0+\frac1{21}.\tag{9.60}
$$

在各向异性的情况下,Imageworks使用$α_x$ 和$α_y$ 之间的中间粗糙度来计算$f_{ms}$。这种近似避免了增加$R_{sF1}$查找表的维度的需要,并且它引入的错误很小。Imageworks多次反射镜面反射术语的结果如图9.39所示。

9.9 BRDF Models for Subsurface Scattering(次表面散射的BRDF模型)

在上一节中,我们讨论了表面或镜面反射。在本节中,我们将讨论问题的另一面,即在表面下折射的光会发生什么。正如我们在9.1.4节中讨论的那样,这种光经过一些散射和吸收的组合,其中一部分从原始表面重新发射回来。 我们将在这里关注不透明电介质中局部次表面散射或漫反射表面响应的BRDF模型。 金属是无关紧要的,因为它们没有任何明显的次表面光相互作用。 第14章将介绍透明或具有全局次表面散射的电介质材质。

我们开始讨论漫反射模型,其中有关于漫反射颜色属性的部分以及此颜色在真实世界材质中可能具有的值。 在下面的小节中,我们将解释表面粗糙度对漫反射着色的影响,以及选择是否对给定材料使用光滑表面或粗糙表面着色模型的标准。 最后两个小节专门讨论光滑表面和粗糙表面模型本身。

9.9.1 Subsurface Albedo(次表面反照率)

不透明电介质的次表面反照率$ρ_{ss}$是从表面逸出的光的能量与进入材料内部的光的能量之间的比率。 ρss的值在0(所有光被吸收)和1(没有光被吸收)之间并且可以取决于波长,因此ρss被建模为用于渲染的RGB矢量。 对于创作,ρss通常被称为表面的漫反射颜色,正常入射菲涅耳反射率$F_0$ 通常被称为镜面反射颜色。次表面反照率与第14.1节中讨论的散射反照率密切相关。

由于电介质传输大部分入射光而不是在表面反射它,因此次表面反照率$ρ_{ss}$通常更亮,因此在视觉上比镜面颜色$F_0$ 更重要。由于它是由与内部的镜面反射不同的物理过程产生的,而不是表面上的菲涅耳反射率$ρ_{ss}$通常具有与$F_0$ 不同的光谱分布(因此RGB颜色)。 例如,有色塑料由透明的透明基材组成,其内部嵌有颜料颗粒。 镜面反射的光将是未着色的,而漫反射的光将被颜料颗粒的吸收着色;例如,红色塑料球显示出白色高光。

次表面反照率可以被认为是“吸收和散射之间的竞争”,它会在有机会被散射回物体之前被吸收吗?这就是为什么液体上的泡沫比液体本身更亮,发泡过程不会改变液体的吸收率,但是添加大量的气液界面会大大增加散射量,这会导致大部分入射光在被吸收之前被散射,从而导致液体吸收。高次表面反照率和明亮的外观。新雪是反照率高的物质的另一个例子。雪粒和空气之间的界面有相当大的散射,但吸收很少,导致次表面反照率在可见光谱中为0.8或更高,白色油漆略少于0.7。日常生活中遇到的许多物质,如混凝土,石头和土壤,平均在0.15到0.4之间。煤是一种拥有极低的次表面反照率材质的例子,接近0.0。

许多材质在湿润时变暗的过程与液体泡沫实例相反。如果材质是多孔的,水会渗透到以前充满空气的空间中。电介质材质的折射率更接近水而不是空气。这种相对折射率的降低减少了材质内部的散射,并且光在离开材质之前行进了更长的距离(平均)。这种变化导致更多的光被吸收,并且次表面反照率变得更暗。

当从真实世界的表面获取$ρ_{ss}$的点值或纹理时,重要的是分离出镜面反射。这种提取可以通过仔细使用受控照明和偏振滤光器来完成。 为了获得准确的颜色,还应进行校准。

并非每个RGB三元组代表$ρ_{ss}$的合理(或甚至物理上可能)值。反射光谱比发射光谱功率分布更受限制:对于任何波长,它们永远不会超过1,并且它们通常非常光滑。这些限制定义了颜色空间中的体积,其中包含$ρ_{ss}$的所有合理的RGB值。即使是相对较小的sRGB色域也包含此体积以外的颜色,因此在设置$ρ_{ss}$的值时必须小心,以避免指定不自然饱和和明亮的颜色。除了降低真实感外,在预先计算全局照明时,这些颜色会导致过亮的二次反射(见第11.5.1节)。 孟等人的2015年论文是这个主题的一个很好的参考。

9.9.2 Scale of Subsurface Scattering and Roughness(次表面散射和粗糙度的比例)

用于局部次表面散射的一些BRDF模型考虑了表面粗糙度,通常使用具有漫射微BRDF $f_μ$ 的微平面理论,而有些则不然。使用哪种模型不仅仅取决于表面有多粗糙,尽管这是一种常见的误解。正确的决定因素涉及表面不规则性和次表面散射距离的相对大小。

见图9.40。如果微观几何不规则性大于次表面散射距离(图的左上角),那么次表面散射将表现出与微观几何相关的效果,例如逆向反射(第331页的图9.29)。对于这样的表面,应该使用粗糙表面漫射模型。如上所述,此类模型通常基于微平面理论,其中次表面散射被处理为每个微平面的局部,因此仅影响微BRDF $f_μ$ 。

图9.40 三个表面具有相似的NDF,但微观几何尺度与次表面散射距离之间的关系不同。在左上方,次表面散射距离小于表面不规则性。在右上方,散射距离大于表面不规则性。下图显示了具有多个尺度粗糙度的微表面。红色虚线表示仅包含大于次表面散射距离的微结构的有效表面。

如果散射距离都大于不规则性(图9.40的右上角),那么表面应该被认为是平坦的,以便对次表面散射进行建模,并且不会发生诸如逆向反射的现象。次表面散射不是微平面的局部散射,不能通过微平面理论建模。在这种情况下,应使用光滑表面漫反射模型。

在表面具有比散射距离更大和比粗糙度更小的中间情况下,应该使用粗糙表面漫射模型,但是具有仅包括大于散射距离的不规则性的有效表面。漫反射和镜面反射都可以用微平面理论建模,但每个都具有不同的粗糙度值。镜面术语将使用基于实际表面粗糙度的值,并且漫反射公式将使用较低的值,基于有效表面的粗糙度。

观察的规模也与此有关,因为它决定了“微观几何”的定义。例如,月球经常被引用作为应该使用粗糙表面漫射模型的情况,因为它表现出显着的逆向反射。当我们看到 来自地球的月亮,观察的规模是这样的,即使是一个5英尺的巨石也是“微观几何学”。因此,我们观察到诸如逆向反射的粗糙表面漫射效应就不足为奇了。

9.9.3 Smooth-Surface Subsurface Models(光滑表面的次表面模型)

在这里,我们将讨论光滑次表面模型。这些适用于表面不规则性小于次表面散射距离的材料建模。漫射阴影不直接受这些材料中表面粗糙度的影响。如果漫反射和镜面反射项是耦合的(本节中的某些模型就是这种情况),那么表面粗糙度可能会间接影响漫反射着色。

如9.3节所述,实时渲染应用程序通常使用朗伯项来模拟局部次表面散射。在这种情况下,BRDF项是$ρ_{ss}$ over π:

$$
f_{diff}(\boldsymbol{l,v})=\frac{\rho_{ss}}{\pi}.\tag{9.61}
$$

Lambertian模型没有考虑到在表面反射的光不能用于次表面散射的事实。为了改进该模型,应该在表面(镜面)和次表面(漫反射)反射项之间进行能量权衡。菲涅耳效应意味着这种表面 - 次表面能量权衡随入射光角度θi而变化。 随着入射角越来越大,漫反射率随着镜面反射率的增加而降低。 解释这种平衡的一种基本方法是将漫反射项乘以一个减去镜面反射项的菲涅耳部分。 如果镜面术语是平面镜子,则得到的漫反射公式是:

$$
f_{diff}(\boldsymbol{l,v})=(1-F(\boldsymbol{n,l}))\frac{\rho_{ss}}{\pi}.\tag{9.62}
$$

如果镜面项是一个microfacet BRDF,那么得到的散射公式是:

$$
f_{diff}(\boldsymbol{l,v})=(1-F(\boldsymbol{h,l}))\frac{\rho_{ss}}{\pi}\tag{9.63}
$$

公式9.62和9.63导致出射光的均匀分布,因为BRDF值不依赖于输出方向v。这种行为有一定意义,因为光在重新发射之前通常会经历多次散射事件,因此它的输出方向将是随机的。但是,有两个原因可以怀疑出射光的分布不均匀。首先,由于公式9.62中的漫反射BRDF项随入射方向而变化,因此亥姆霍兹互易意味着它必须通过输出方向改变。其次,光线必须在出路时经历折射,这将对出射光施加一些方向性偏好。

Shirley等人提出了平面耦合漫射项,解决了菲涅耳效应和表面 - 次表面反射率的权衡,同时支持节能和亥姆霍兹互易性。推导假设Schlick近似(公式9.16)用于菲涅耳反射:

$$
f_{diff}(\boldsymbol{l,v})=\frac{21}{20\pi}(1-F_0)\rho_{ss}(1-(1-(\boldsymbol{n\cdot l})^+)^5)(1-
(1-(\boldsymbol{n\cdot v})^+)^5)\tag{9.64}
$$

公式9.64仅适用于镜面反射率是完美菲涅耳镜的表面。Ashikhmin和Shirley提出了一个可用于计算倒数,节能扩散项以与任何镜面项耦合的广义版本,并由Kelemen和Szirmay-Kalos进一步完善:

$$
f_{diff}(\boldsymbol{l,v})=\rho_{ss}\frac{(1-R_{spec}(\boldsymbol{l}))(1-R_{spec}(\boldsymbol{v}))}{\pi(1-\overline{R_{spec}})}.\tag{9.65}
$$

在这里,$R_{spec}$是镜面反射项的定向反照率(第9.3节),$\overline{R_{spec}}$是半球上的余弦加权平均值。可以使用公式9.8或9.9预先计算值$R_{spec}$并将其存储在查找表中。 $\overline{R_{spec}}$的计算方法与我们之前遇到的一个计算平均值的方式相似:$\overline{R_{sF1}}$ (公式9.57)。

公式9.65中的形式与公式9.56有一些明显的相似之处,这并不奇怪,因为Imageworks多次反弹镜面项源自Kelemen-Szirmay-Kalos耦合漫反射项。但是,有一个重要的区别。在这里,我们使用$R_{spec}$代替$R_{sF1}$,$R_{spec}$是包括菲涅耳在内的全镜面BRDF项的方向反照率,如果使用的话,还使用多次反射镜面项$f_{ms}$。这种差异增加了$R_{spec}$的查找表的维度,因为它不仅取决于粗糙度α和仰角θ,而且还取决于菲涅耳反射率。

在Imageworks实现的Kelemen-Szirmay-Kalos耦合漫射项中,使用了三维查找表,折射率为第三轴。他们发现在积分中包含多次反弹项使得$R_{spec}$比$R_{sF1}$更平滑,因此16×16×16表就足够了。图9.41显示了结果。

如果BRDF使用Schlick Fresnel近似并且不包括多次反射镜面项,那么$F_0$ 的值可以从积分中计算出来。这样做允许我们为$R_{spec}$使用二维表,在每个条目中存储两个量,而不是三维表,如Karis所讨论的。或者,Lazarov提出了一个适用于$R_{spec}$ 的分析函数,类似地将 $F_0$ 从积分中分解出来以简化拟合函数。

卡里斯和拉扎罗夫都使用镜面方向反照率$R_{spec}$用于与基于图像的照明相关的不同目的。有关该技术的更多详细信息,请参见第10.5.2节。如果两种技术都在同一个应用程序中实现,则可以对两者使用相同的表查找,从而提高效率。

这些模型是通过考虑表面(镜面)和次表面(漫反射)术语之间能量守恒的含义而开发的。其他模型是从物理原理开发出来的。其中许多模型依赖于Subrahmanyan Chandrasekhar(1910-1995)的工作,他开发了一种半无限,各向同性散射体积的BRDF模型。 如Kulla和Conty所证明的,如果平均自由路径足够短,则该BRDF模型是任意形状的散射体积的完美匹配。 Chandrasekhar BRDF可以在他的书中找到,尽管使用熟悉的渲染符号的更易于访问的形式可以在Dupuy等人的论文的方程中找到。

图9.41 第一行和第三行显示添加了朗伯的镜面公式。第二行和第四行显示与Kelemen-Szirmay-Kalos耦合漫射项一起使用的相同镜面公式。顶部两行的粗糙度值低于底部两行。在每行中,粗糙度从左到右增加。

由于它不包括折射,Chandrasekhar BRDF可用于仅建模索引匹配的表面。这些是两侧折射率相同的表面,如图9.11所示。要对非索引匹配的曲面进行建模,必须修改BRDF以考虑光线进入和离开曲面的折射。 这一修改是Hanrahan和Krueger以及Wolff的工作重点。

9.9.4 Rough-Surface Subsurface Models(粗糙表面次表面模型)

作为迪士尼原则着色模型的一部分,Burley包含一个漫反射BRDF术语,旨在包括粗糙度效果和匹配测量过的材质:

$$
f_{diff}(\boldsymbol{l,v})=\chi^+(\boldsymbol{n\cdot l})\chi^+(\boldsymbol{n\cdot v})\frac{\rho_{ss}}{\pi}((1-k_{ss})f_d+1.25k_{ss}f_{ss}),\tag{9.66}
$$

其中:

$$
\begin{align}
f_d&=(1+(F_{D90}-1)(1-\boldsymbol{n\cdot l})^5)(1+(F_{D90}-1)(1-\boldsymbol{n\cdot v})^5),\\
F_{D90}&=0.5+2\sqrt{\alpha}(\boldsymbol{h\cdot l})^2,\\
f_{ss}&=(\frac1{(\boldsymbol{n\cdot l})(\boldsymbol{n\cdot v})}-0.5)F_{ss}+0.5,\\
F_{ss}&=(1+(F_{SS90}-1))(1-\boldsymbol{n\cdot l})^5)(1+(F_{SS90}-1)(1-\boldsymbol{n\cdot v})^5),\\
F_{SS90}&=\sqrt\alpha(\boldsymbol{h\cdot l})^2,
\end{align}\tag{9.67}
$$

α是镜面粗糙度。 在各向异性的情况下,使用$α_x$ 和$α_y$ 之间的中间值。这个等式通常被称为迪斯尼漫射模型。

次表面项$f_{ss}$的灵感来自Hanrahan-Krueger BRDF,旨在作为远距离物体全球次表面散射的廉价替代品。漫反射模型基于用户控制的参数$k_{ss}$在$f_{ss}$和$f_d$粗糙漫反射项之间进行混合。

迪士尼漫反射模型已被用于电影和游戏(虽然没有次表面项)。完整的迪士尼漫射BRDF还包括一个光泽项,主要用于建模面料,但也有助于弥补由于缺乏多次反弹镜面项而导致的能量损失。迪士尼光泽项将在第9.10节中讨论。 几年后,Burley提出了一个更新的模型,旨在与全局次表面散射渲染技术相结合。

由于迪士尼漫反射模型使用与镜面BRDF项相同的粗糙度,因此可能难以对某些材质进行建模。见图9.40。但是,使用单独的漫反射粗糙度值将是一个微不足道的修改。

大多数其他粗糙表面漫射BRDF已经使用微平面理论开发,具有NDF $D$,micro-BRDF $f_μ$ 和masking-shadowing function $G_2$ 各种不同选择。这些模型中最着名的是Oren和Nayar提出的。Oren-Nayar BRDF使用Lambertian micro-BRDF,球形高斯NDF和Torrance-Sparrow“V-cavity”掩蔽阴影函数。完整形式的BRDF模拟一次二次弹跳。Oren和Nayar在他们的论文中还包括一个简化的“定性”模型。 多年来已经提出了对Oren-Nayar模型的一些改进,包括优化,调整以使“定性”模型更接近完整模型而不增加其成本,并将微BRDF改变为更准确的光滑表面漫反射模型。

Oren-Nayar模型假设一个微观曲面具有完全不同的正态分布和遮蔽阴影函数,而不是当前镜面模型中使用的那些。 使用各向同性GGX NDF和高度相关的Smith掩蔽阴影函数导出两个漫射微平面模型。 Gotanda的第一个模型是数值积分一般微平面方程(公式9.26)的结果,使用公式9.64中的镜面耦合漫反射项作为微观BRDF。然后将分析函数拟合到数值积分数据中。Gotanda的BRDF没有考虑构面之间的相互反射,拟合函数相对复杂。

使用相同的NDF,masking-shadowing function和micro-BRDF作为Gotanda,Hammon以数字方式模拟BRDF,包括互反射。他表明,相互反射对于这种微平面配置很重要,代表了粗糙表面总反射率的一半。然而,第二次反弹几乎包含所有缺失的能量,因此Hammon使用来自两次反弹模拟的数据。此外,可能因为添加了互反射来平滑数据,Hammon能够为模拟结果拟合一个相当简单的函数:

$$
f_{diff}(\boldsymbol{l,v})=\chi^+(\boldsymbol{n\cdot l})\chi^+(\boldsymbol{n\cdot v})\frac{\rho_{ss}}{\pi}((1-\alpha_g)f_{smooth}+\alpha_gf_{rough}+\rho_{ss}f_{multi}),\tag{9.68}
$$

其中:

$$
\begin{align}
f_{smooth}&=\frac{21}{20}(1-F_0)(1-(1-\boldsymbol{n\cdot l})^5)(1-(1-\boldsymbol{n\cdot v})^5),\\
f_{rough}&=k_{facing}(0.9-0.4k_{facing})(\frac{0.5+\boldsymbol{n\cdot h}}{\boldsymbol{n\cdot h}}),\\
k_{facing}&=0.5+0.5(\boldsymbol{l\cdot v}),\\
f_{multi}&=0.3641\alpha_g,
\end{align}\tag{9.69}
$$

$α_g$ 是GGX镜面粗糙度。为清楚起见,此处的公式与Hammon的ppt略有不同。注意,$f_{smooth}$是来自公式9.64的耦合漫射BRDF,没有$ρ_{ss}/π$因子,因为它在公式9.68中相乘。Hammon讨论了“混合”BRDF,它可替代其他平滑表面漫射BRDF,以提高性能或改善与旧模型下创作的资产的兼容性。

总体而言,Hammon的漫射BRDF价格低廉且基于合理的理论原理,尽管他没有显示与测量数据的比较。需要注意的是,表面不规则性大于散射距离的假设是BRDF推导的基础,这可能会限制它可以精确建模的材料类型。见图9.40。

公式9.61中显示的简单朗伯项仍由许多实时渲染应用程序实现。除了兰伯特公式的低计算成本之外,与其他漫反射模型相比,它更容易使用间接和烘焙照明,并且它与更复杂的模型之间的视觉差异通常是微妙的。然而,对照片写实主义的不断追求推动了更准确模型的使用。

9.10 BRDF Models for Cloth(布料的BRDF模型)

图9.42。使用为游戏Uncharted 4构建的布料系统的材料。左上方球体具有标准BRDF,其具有GGX microfacet镜面和朗伯漫反射。 上部中间球体使用织物BRDF。每个其他球体增加了不同类型的每像素变化,从左到右,从上到下:织物编织细节,织物老化,不完美细节和小皱纹。(UNCHARTED 4 A Thief's End c / TM 2016 SIE。由Naughty Dog LLC创建和开发。)

布料往往具有与其他类型材质不同的微观几何学。取决于织物类型,它可具有高度重复的编织微结构,从表面垂直突出的圆柱(螺纹)。因此,布料表面具有特征性的外观,通常需要专门的着色模型,例如各向异性镜面高光,粗糙散射(光线通过突出的半透明织物引起的明亮边缘效应),甚至是视线方向的色移(当不同颜色穿过织物时由细线引起的)。

除了BRDF之外,大多数织物都具有高频空间变化,这也是创造令人信服的布料外观的关键。 见图9.42。

布料BRDF模型分为三大类:从观察中创建的经验模型,基于微观理论的模型和微圆柱模型。我们将从每个类别中了解一些值得注意的例子。

9.10.1 Empirical Cloth Models(经验布料模型)

在Uncharted 2游戏中,布料表面使用以下漫反射BRDF术语:

$$
f_{diff}(\boldsymbol{l,v})=\frac{\rho_{ss}}{\pi}(k_{rim}((\boldsymbol{v\cdot n})^+)^{\alpha_{rim}}+k_{inner}(1-(\boldsymbol{v\cdot n})^+)^{\alpha_{inner}}+k_{diff}),\tag{9.70}
$$

其中$k_{rim}$,$k_{inner}$和$k_{diff}$是边缘照明术语的用户控制的缩放因子,分别是使前向(内)表面和朗伯术语变亮的术语。 此外,$α_{rim}$和$α_{inner}$控制边缘和内部项的衰减。此行为是非物理的,因为有几个与视图相关的效果,但没有一个依赖于光的方向。

相比之下,Uncharted 4中的布料使用微平面或微圆柱模型,取决于镜面类型的布料类型(详见以下两节)和漫反射公式的“包裹照明”经验次表面散射近似:

$$
f_{diff}(\boldsymbol{l,v})(\boldsymbol{n\cdot l})^+\Rightarrow\frac{\rho_{ss}}{\pi}(\boldsymbol{c}_{scatter}+(\boldsymbol{n\cdot l})^+)^{\mp}\frac{(\boldsymbol{n\cdot l}+w)^\mp}{1+w}.\tag{9.71}
$$

这里我们使用1.2节中引入的$(x)^\mp$符号,表示0和1之间的clamping。$f_{diff}\boldsymbol{(l, v)(n·l)^+}\Rightarrow\dots$ 表示此模型影响照明 以及BRDF。 箭头右侧的术语取代了左侧的术语。 用户指定的参数$c_{scatter}$是散射颜色,值w(范围[0,1])控制包裹照明的宽度。

对于布料造型,迪士尼使用他们的散射BRDF项(第9.9.4节),并在模型粗糙散射中添加了光泽项:

$$
f_{sheen}(\boldsymbol{l,v})=k_{sheen}\boldsymbol{c}_{sheen}(1-(\boldsymbol{h\cdot l})^+)^5,\tag{9.72}
$$

其中$k_{sheen}$是一个调节光泽项强度的用户参数。光泽颜色$c_{sheen}$是白色和$ρ_{ss}$的亮度归一化值之间的混合(由另一个用户参数控制)。换句话说,$ρ_{ss}$除以其亮度以隔离其色调和饱和度。

9.10.2 Microfacet Cloth Models(基于微面的布料模型)

Ashikhmin等。提出使用倒置高斯NDF来模拟天鹅绒。该NDF在随后的工作中略有修改,其还提出了用于一般建模材料的微平面BRDF的变体形式,没有masking-shadowing项和修改的分母。

游戏The Order: 1886中使用的布料BRDF 将修改后的microfacet BRDF和来自Ashikhmin和Premoze后期报告的天鹅绒NDF的广义形式与来自公式9.63的扩散项组合在一起。广义天鹅绒NDF是

$$
D(\boldsymbol{m})=\frac{\chi^+(\boldsymbol{n\cdot m})}{\pi(1+k_{amp}\alpha^2)}
\left(
1+\frac{k_{amp}exp(\frac{(\boldsymbol{n\cdot m})^2}{\alpha^2((\boldsymbol{n\cdot m})^2-1)})}{(1-(\boldsymbol{n\cdot m})^2)^2}
\right),\tag{9.73}
$$

其中α控制反向高斯的宽度,而$k_{amp}$控制其幅度。完整的布料BRDF是

$$
f(\boldsymbol{l,v})=(1-F(\boldsymbol{h,l}))\frac{\rho_{ss}}{\pi}+\frac{F(\boldsymbol{h,l})D(\boldsymbol{h})}{4(\boldsymbol{n\cdot l}+\boldsymbol{n\cdot v}-(\boldsymbol{n\cdot l})(\boldsymbol{n\cdot v}))}.\tag{9.74}
$$

这种BRDF的一种变体被用于游戏Uncharted 4中,用于粗糙的织物,如羊毛和棉。

Imageworks使用不同的反向NDF作为可以添加到任何BRDF的光泽项:

$$
D(\boldsymbol{m})=\frac{\chi^+(\boldsymbol{n\cdot m})(2+\frac1\alpha)(1-(\boldsymbol{n\cdot m})^2)^{\frac1{2\alpha}}}{2\pi}.\tag{9.75}
$$

尽管此NDF的Smith掩蔽阴影函数没有封闭形式的解决方案,但Imageworks能够使用分析函数逼近数值解。 Estevez和Kulla讨论了masking-shadowing function和光泽项与BRDF其余部分之间能量守恒的详细信息。有关使用Imageworks光泽项渲染的一些示例,请参见图9.43。

图9.43

到目前为止,我们看到的每种布料都限于特定类型的织物。下一节中讨论的模型试图以更一般的方式对布料进行建模。

9.10.3 Micro-Cylinder Cloth Models(微圆柱布料模型)

用于布料的微型圆柱体模型与用于头发的模型非常相似,因此第14.7.2节中对头发模型的讨论可以提供额外的背景。这些模型背后的想法是假设表面覆盖有一维线。Kajiya和Kay为此案例开发了一个简单的BRDF模型,由Banks提供了坚实的理论基础。它被称为Kajiya-Kay BRDF或Banks BRDF。该概念基于以下观察:由一维线组成的表面在任何给定位置处具有无限数量的法线,由垂直于该位置处的切向量t的法线平面限定。 虽然从这个框架开发了许多较新的微型气缸模型,但由于其简单性,原始的Kajiya-Kay型号仍然有一些用途。例如,在Uncharted 4游戏中,Kajiya-Kay BRDF用于如丝绸和天鹅绒般闪亮的面料的镜面项。

Dreamworks使用相对简单且可由艺术家控制的微圆柱模型用于织物。纹理可用于改变粗糙度,颜色和线的方向,这可以指出表面平面,用于模制天鹅绒和类似的织物。可以为经线和纬线设置不同的参数,以模拟复杂的变色织物,例如闪光的绸缎。为了节能,该模型被标准化。

Sadeghi等。 提出了一种基于织物样品和单个螺纹测量的微气缸模型。 该模型还考虑了线程间的线程间屏蔽和阴影。

在某些情况下,实际的头发BSDF型号(第14.7节)用于布料。RenderMan的PxrSurface材质有一个“模糊”的波瓣,使用Marschner等人的头发模型中的R项(第14.7节)。由Wu和Yuksel在实时布料渲染系统中实现的一个模型来自头发,迪士尼用于动画电影。

9.11 Wave Optics BRDF Models(波光学的BRDF模型)

我们在最后几节中讨论的模型依赖于几何光学,它将光视为在光线而不是波中传播。 如第303页所述,几何光学是基于任何表面不规则性小于波长或大于约100个波长的假设。

真实世界的表面并不那么乐观。它们往往在所有尺度上都有不规则性,包括1-100波长范围。 我们指的是具有纳米尺度等尺寸的不规则性,以区别于前面部分讨论的微观几何不规则性,这些不规则性太小而不能单独渲染但大于100个光波长。 纳米几何学对反射率的影响不能通过几何光学来建模。 这些效果取决于光的波动性质,并且需要波动光学(也称为物理光学)来对它们进行建模。

厚度接近光波长的表面层或膜也产生与光的波性相关的光学现象。

在本节中,我们将讨论波动光学现象,如衍射和薄膜干涉,讨论在现实中渲染看似相对平凡的材质时,会产生的令人惊讶的重要性。

9.11.1 Diffraction Models(衍射模型)

图9.44

纳米尺度的测量会引起称为衍射(diffraction)的现象。为了解释它,我们利用了惠更斯—菲涅耳原理(Huygens-Fresnel principle),该原理指出波阵面(wavefront,具有相同波相的点集)的每个点都可以被视为新球面波的来源。见图9.44。当波遇到障碍时,惠更斯 - 菲涅耳原理表明它们会在拐角处稍微弯曲,这是衍射的一个例子。几何光学无法预测这种现象。在光入射到平面表面的情况下,几何光学确实可以正确地预测光将在单个方向上反射。也就是说,菲涅耳 - 惠更斯原理提供了额外的见解。它表明,表面上的球面波恰好恰好形成反射波阵面,通过相消干涉消除了所有其他方向的波。当我们观察具有纳米不规则性的表面时,这种洞察力变得重要。由于表面点的高度不同,表面上的球面波不再整齐排列。见图9.45。

图9.45 在左侧,我们看到平面波前入射到具有粗糙纳米尺度的表面。 在中心,我们看到根据菲涅耳 - 惠更斯原理在表面上形成的球面波。 在右边,我们看到在发生相长干涉和相消干涉之后,一些产生的波(红色)形成平面反射波。 剩余部分(紫色)被衍射,不同量的光在每个方向上传播,这取决于波长。

如图所示,光线在不同方向上散射。它的一部分被镜面反射,即,在反射方向上累加到平面波前。剩余的光以取向于纳米几何的某些性质的方向图衍射出来。镜面反射和衍射光之间的划分取决于纳米几何形状凸起的高度,或者更确切地说,取决于高度分布的变化。衍射光在镜面反射方向上的角度扩展取决于纳米几何形状凸起相对于光波长的宽度。有点违反直觉,更广泛的不规则导致更小的传播。如果不规则性大于100个光波长,则衍射光和镜面反射光之间的角度很小,可以忽略不计。尺寸减小的不规则性导致衍射光的更广泛扩散,直到不规则性变得小于光波长,此时不发生衍射。

在具有周期性纳米尺度的表面中,衍射最清晰可见,因为重复图案通过相长干涉增强衍射光,从而产生彩色彩虹色。 在CD和DVD光盘以及某些昆虫中可以观察到这种现象。 虽然衍射也发生在非周期性表面,但多年来计算机图形界已经假设其效果很轻微。 出于这个原因,除了一些例外,计算机图形文献多年来一直忽略衍射。

然而,Holzschuch和Pacanowski最近对测量材料的分析表明,许多材料中存在显着的衍射效应,并且可以解释用当前模型拟合这些材料的困难。同一作者的后续工作引入了一个结合了微平面和衍射理论的模型,通过使用一般的微平面BRDF(公式9.26)和微观BRDF来解释衍射。与此同时,Toisoul和Ghosh提出了捕获由周期性纳米几何测量产生的虹彩衍射效应的方法,以及用点光源和基于图像的照明实时渲染它们的方法。

9.11.2 Models for Thin-Film Interference(薄膜干涉模型)

薄膜干涉是当从薄的电介质层的顶部和底部反射的光路彼此干涉时发生的波光学现象。见图9.46。

图9.46

取决于波长和路径长度差之间的关系,不同波长的光或者相长干涉或相消干涉。由于路径长度差随角度变化,因此不同波长在相长干涉和相消干涉之间转换,最终结果是一个色彩斑斓的色移。

为了使这种效果发生薄膜需要很薄的原因与相干长度的概念有关。该长度是光波的副本可以移位并且仍然与原始波相干干涉的最大距离。该长度与光的带宽(bandwidth)成反比,光的带宽是其光谱功率分布(SPD)延伸的波长范围。激光具有极窄的带宽,具有极长的相干长度。可能是英里级别的,取决于激光的类型。这种关系是有意义的,因为被许多波长移位的简单正弦波仍将与原始波相干地干涉。如果激光是真正的单色,它将具有无限的相干长度,但实际上激光具有非零带宽。相反,具有极宽带宽的光将具有混沌波形。有意义的是,这种波形的副本需要在它停止与原始相干干涉之前仅移位一小段距离。

理论上,理想的白光是所有波长的混合物,其相干长度为零。然而,出于可见光光学的目的,人类视觉系统(仅在400-700nm范围内感测光)的带宽决定了相干长度,其约为1微米。因此,在大多数情况下,问题“胶片在它不再引起可见干涉之前有多厚?”的答案是“大约1微米”。

与衍射相似,多年来,薄膜干涉被认为是仅在肥皂泡和油渍等表面上发生的特殊情况效应。 然而,Akin指出,薄膜干涉确实为许多日常表面带来了微妙的色彩,并展示了如何模拟这种效果可以增加真实感。见图9.47。 他的文章引起了对基于物理的薄膜干涉的兴趣程度的显着增加,包括RenderMan的PxrSurface和Imageworks着色模型在内的各种着色模型都支持这种效果。

适用于实时渲染的薄膜干涉技术已经存在了一段时间。Smits和Meyer提出了一种有效的方法来解释一阶和二阶光路之间的薄膜干扰。他们观察到所得到的颜色主要是路径长度差的函数,其可以根据膜厚度,视角和折射率有效地计算。它们的实现需要具有RGB颜色的一维查找表。可以使用密集光谱采样计算表格的内容,并将其转换为RGB颜色作为预处理,这使得该技术非常快。在游戏“使命召唤:无限战争”中,不同的快速薄膜近似被用作分层材质系统的一部分。这些技术不能模拟薄膜中的多次反射光以及其他物理现象。Belcour和Barla提出了一种更准确,计算成本更高的技术,但仍以实时实施为目标。

9.12 Layered Materials(分层材质)

在现实生活中,材料通常彼此叠加。表面可能被灰尘,水,冰或雪覆盖;出于装饰或保护的原因,它可能涂有漆或其他涂层;;或者它可以有多层作为其基本结构的一部分,例如许多生物材料。

最简单且最具视觉意义的分层情况之一是透明涂层,其是在一些不同材料的基底上的光滑透明层。一个例子是粗糙木材表面上的光滑涂层。迪士尼原则着色模型包括一个明确的公式,虚幻引擎,RenderMan的PxrSurface材质,以及Dreamworks Animation和Imageworks使用的着色模型也是。

透明涂层的最显着的视觉结果是由透明涂层和下面的基底反射的光产生的双重反射。当衬底是金属时,这种第二次反射最为显着,因为介电透明涂层和衬底的折射率之间的差异最大。当衬底是电介质时,其折射率接近透明涂层的折射率,导致第二次反射相对较弱。此效果类似于水下材料,如表9.4所示。

透明涂层也可以着色。 从物理角度来看,这种着色是吸收的结果。 根据比尔—朗伯定律(第14.1.2节),吸收的光量取决于光穿过透明涂层的路径长度。该路径长度取决于视图和光的角度,以及材料的折射率。更简单的清单实现(例如迪士尼原则模型和虚幻引擎中的实现)不会对此视图依赖进行建模。其他人也这样做,例如PxrSurface和Imageworks和Dreamworks着色模型中的实现。Imageworks模型还允许连接任意数量的不同类型的层。

在一般情况下,不同的层可以具有不同的表面法线。 一些例子包括在平坦路面上行驶的水流,在颠簸土壤顶部的平滑冰块,或覆盖纸板箱的皱纹塑料包裹。 电影业使用的大多数分层模型支持每层单独的法线。 这种做法在实时应用程序中并不常见,尽管虚幻引擎的clear-coat作为可选功能的实现支持它。

游戏“使命召唤:无限战争”使用了一种特别值得注意的分层材料系统。它允许用户合成任意数量的材质图层。它支持层之间的折射,散射和基于路径长度的吸收,以及每层不同的表面法线。结合高效的实施,该系统可实现前所未有的复杂实时材料,尤其是对于以60Hz运行的游戏而言令人印象深刻。见图9.48。

图9.48

9.13 Blending and Filtering Materials(混合和过滤材质)

图9.49

材料混合是组合多种材料的特性(即BRDF参数)的过程。 例如,为了模拟一块带锈斑的金属板,我们可以绘制一个掩模纹理来控制锈斑位置,并用它来混合锈蚀的材料特性(镜面颜色$F_0$ ,漫反射颜色$ρ_{ss}$和粗糙度α)。金属,混合的每种材料也可以在空间上变化,参数存储在纹理中。混合可以作为预处理来完成,以创建新的纹理,通常称为“烘焙”,或者在着色器中即时实现。虽然表面法线n在技术上不是BRDF参数,但其空间变化对于外观很重要,因此材料混合通常还包括法线贴图混合。

为了理解为什么会出现这些伪像以及如何解决它们,请回想一下NDF是子像素表面结构的统计描述。当相机和表面之间的距离增加时,先前覆盖多个像素的表面结构可以减小到子像素大小,从凹凸图的范围移动到NDF的领域。这种转换与mipmap链密切相关,mipmap链将纹理细节的减少封装到子像素大小。

考虑对象的外观(如图9.49中左侧的圆柱体)进行建模以进行渲染。 外观建模总是假定一定的观察范围。 宏观(大规模)几何体被建模为三角形,中尺度(中等尺度)几何体被建模为纹理,并且小于单个像素的微观尺度几何体通过BRDF建模。

给定图像中显示的比例,将圆柱体建模为平滑网格(宏观尺度)并用法线贴图(中尺度)表示凸起是合适的。 选择具有固定粗糙度$α_b$ 的Beckmann NDF来模拟微尺度法线分布。这种组合表示在此尺度下很好地模拟了汽缸外观。但是,当观察规模发生变化时会发生什么?

图9.50 如图9.49所示的表面的一部分。顶行显示法线分布(红色显示的平均法线)和隐含的微观几何。 底行显示了将四个NDF平均为一个的三种方法,如在mipmapping中所做的那样。 左边是地面实况(平均正态分布),中心分别显示平均(正常)和方差(粗糙度)的平均结果,右边显示匹配到平均NDF的NDF波瓣。

研究图9.50。顶部的黑框图显示了表面的一小部分,由四个法线贴图纹理覆盖。 假设我们以一定比例渲染表面,使得每个法线贴图纹素平均被一个像素覆盖。对于每个纹素,正态(即分布的平均值或平均值)显示为红色箭头,由Beckmann NDF包围,以黑色显示。法线和NDF隐式指定基础表面结构,如横截面所示。中间的大驼峰是法线贴图中的一个凸起,小摆动是微观表面结构。法线贴图中的每个纹素与粗糙度相结合,可以看作是收集纹素所覆盖的表面区域的法线分布。

现在假设相机已经从对象移动得更远,因此一个像素覆盖了所有四个法线贴图纹素。在该分辨率下表面的理想表示将精确地表示在每个像素覆盖的较大表面区域上收集的所有法线的分布。可以通过平均顶级mipmap的四个纹素中的NDF来找到此分布。左下图显示了这种理想的法线分布。如果用于渲染,该结果将最准确地表示在较低分辨率下表面的外观。

底部中心图显示了法线的单独平均值,每个分布的平均值和粗糙度的结果,粗糙度对应于每个的宽度。结果具有正确的平均法线(红色),但分布太窄。 此错误将导致表面显得过于平滑。 更糟糕的是,由于NDF非常狭窄,因此会以闪烁的高光形式引起混叠。

我们不能直接用Beckmann NDF表示理想的法线分布。但是,如果我们使用粗糙度图,贝克曼粗糙度$α_b$ 可以从纹素到纹素变化。想象一下,对于每个理想的NDF,我们发现定向贝克曼叶片在方向和总宽度上最接近。我们将贝克曼叶的中心方向存储在法线贴图中,并将粗糙度值存储在粗糙度图中。结果显示在右下角。 这个NDF更接近理想。 与简单的正常平均相比,圆柱体的外观可以更加忠实地表现出来,如图9.49所示。

为获得最佳结果,应将过滤操作(如mipmapping)应用于法线分布,而不是法线或粗糙度值。这样做意味着考虑NDF与法线之间关系的方式略有不同。通常,NDF定义在由法线贴图的每像素法线确定的局部切线空间中。然而,当在不同法线上过滤NDF时,将法线贴图和粗糙度贴图的组合定义为在底层几何表面的切线空间中定义倾斜的NDF(对于正常指向不平均的NDF)是更有用的。

早期尝试解决NDF过滤问题使用数值优化来将一个或多个NDF波瓣拟合到平均分布。这种方法存在鲁棒性和速度问题,并且今天使用不多。相反,当前使用的大多数技术通过计算法线分布的方差来工作。Toksvig巧妙地观察到,如果法线被平均而不是重新归一化,则平均法线的长度与正态分布的宽度成反比。也就是说,原始法线指向不同方向的越多,它们的平均值就越短。他提出了一种基于此正常长度修改NDF粗糙度参数的方法。用修正的粗糙度评估BRDF近似于滤波法线的扩散效应。

Toksvig的原始方程旨在与Blinn-Phong NDF一起使用:

$$
\alpha'_p=\frac{\Vert\overline{\boldsymbol{n}}\Vert\alpha_p}{\Vert\overline{\boldsymbol{n}}\Vert+\alpha_p(1-\Vert\overline{\boldsymbol{n}}\Vert)},\tag{9.76}
$$

其中$α_p$ 是原始粗糙度参数值,$α_p'$ 是修改值,$\Vert\overline{\boldsymbol{n}}\Vert$是平均法线的长度。该方程也可以与Beckmann NDF一起使用,通过应用等价等式$α_p=2α_b^{-2}-2$(来自Walter等人),因为两个NDF的形状非常接近。使用GGX的方法不那么简单,因为GGX和Blinn-Phong(或Beckmann)之间没有明确的等价。使用$α_b$ 的$α_b$ 等价在高光的中心给出相同的值,但高光外观是完全不同的。更令人不安的是,GGX分布的方差是不确定的,这使得这种基于方差的技术系列在与GGX一起使用时处于不稳定的理论基础上。尽管存在这些理论上的困难,但将公式9.76与GGX分布一起使用是相当普遍的,通常使用$α_p=2α_g^{-2}-2$。 这样做在实践中运作得相当好。

Toksvig的方法具有考虑GPU纹理过滤引入的正常方差的优点。它也适用于最简单的正常mipmapping方案,线性平均而不规范化。此功能对于动态生成的法线贴图尤其有用,例如水波纹,必须在运行时生成mipmap。 该方法不适用于静态法线贴图,因为它不能很好地适用于压缩法线贴图的主流方法。 这些压缩方法依赖于单位长度的正常情况。 由于Toksvig的方法依赖于平均法线变化的长度,因此与其一起使用的法线贴图可能必须保持未压缩。 即使这样,存储缩短的法线也会导致精度问题。

Olano和Baker的LEAN映射技术基于映射法线分布的协方差矩阵。与Toksvig的技术一样,它适用于GPU纹理过滤和线性mipmapping。它还支持各向异性法线分布。与Toksvig的方法类似,LEAN映射适用于动态生成的法线,但为了避免精度问题,与静态法线一起使用时需要大量存储。Hery等人独立开发了类似的技术。并在皮克斯的动画电影中使用,以渲染亚像素细节,如金属片和小划痕。LEAN映射的简单变体CLEAN映射需要较少的存储,代价是失去各向异性支持。LEADR映射扩展了LEAN映射,也考虑了位移映射的可见性效果。

实时应用程序中使用的大多数法线贴图都是静态的,而不是动态生成的。对于这样的映射,通常使用方差映射系列技术。在这些技术中,当生成法线贴图的mipmap链时,计算通过平均丢失的方差。希尔指出,Toksvig技术,LEAN映射和CLEAN映射的数学公式都可以用于以这种方式预先计算方差,这消除了这些技术在其原始形式中使用时的许多缺点。在某些情况下,预先计算的方差值存储在单独的方差纹理的mipmap链中。更常见的是,这些值用于修改现有粗糙度图的mipmap链。例如,这种方法用于游戏“使命召唤:黑色行动”中使用的方差图技术。通过将原始粗糙度值转换为方差值,将法线图中的方差相加,并将结果转换回粗糙度来计算修改的粗糙度值。对于游戏The Order:1886,Neubelt和Pettineo以类似的方式使用Han的技术。他们将法线贴图NDF与其BRDF镜面术语的NDF卷积,将结果转换为粗糙度,并将其存储在粗糙度图中。

为了以一些额外存储为代价来改善结果,可以在纹理空间x和y方向上计算方差并将其存储在各向异性粗糙度图中。 该技术本身仅限于轴对齐的各向异性,这在人造表面中是典型的,但在自然产生的表面中则较少。以存储一个或多个值为代价,也可以支持定向各向异性。

与原始形式的Toksvig,LEAN和CLEAN映射不同,方差映射技术不考虑GPU纹理过滤引入的方差。 为了弥补这一点,方差映射实现通常使用小滤波器将法线贴图的顶级mip卷积。当组合多个法线贴图(例如,细节法线贴图)时,需要注意正确地组合法线贴图的方差。

高曲率几何以及法线贴图可以引入法线方差。通过前面讨论的技术不能减轻由这种变化导致的伪像。存在一组不同的方法来解决几何法线方差。如果几何体上存在唯一的纹理贴图(通常是字符的情况,环境则不那么),那么几何曲率可以“烘焙”到粗糙度贴图中。曲率也可以使用像素着色器导数在运行中进行估算 如果正常缓冲区可用,则可以在渲染几何体时或在后处理过程中完成此估计。

到目前为止讨论的方法主要关注镜面响应,但正态方差也会影响漫反射。考虑法线方差对$\boldsymbol{n·l}$项的影响可以帮助提高漫反射和镜面反射的准确性,因为两者都在反射积分中乘以该因子。

方差映射技术将法线分布近似为平滑高斯波瓣。如果每个像素覆盖数十万个凸起,这是一个合理的近似值,因此它们都可以平滑地平均。然而,在许多情况下,许多像素仅覆盖几百或几千个凸起,这可能导致“硬质”外观。这方面的一个例子可以在图9.25中看到,这是一个图像序列,显示了一个球体,其中凸起的尺寸从图像到图像的尺寸减小。右下方的图像显示了当凸起足够小以平均成平滑高光时的结果,但左下和中下方的图像显示小于像素但不足以平滑平均的凸起。如果您要观察这些球体的动画渲染,那么嘈杂的高光会显示为从帧到帧闪烁的闪光。

如果我们绘制这样一个表面的NDF,它看起来就像图9.51中的左图。 随着球体的动画效果,h矢量在NDF上移动并越过亮区和暗区,从而产生“闪亮”的外观。如果我们在这个表面上使用方差映射技术,它将使用类似于图9.51右边的平滑NDF来有效地近似该NDF,从而失去了闪亮的细节。

图9.51

在电影工业中,这通常通过广泛的超级采样来解决,这在实时渲染应用中是不可行的,并且即使在离线渲染中也是不合需要的。 已经开发了几种技术来解决这个问题。 有些不适合实时使用,但可能为未来的研究提供了途径。 已经设计了两种用于实时实现的技术。 Wang和Bowles提出了一种技术,用于在Disney Infinity 3.0 游戏中渲染闪闪发光的雪。该技术旨在产生合理的闪亮外观,而不是模拟特定的NDF。 它适用于具有相对稀疏闪光的雪等材料。 Zirr和Kaplanyan的技术模拟了多尺度上的法线分布,在空间和时间上是稳定的,并且允许更多种类的外观。

我们没有空间来涵盖所有关于材料过滤的大量文献,因此我们将提到一些值得注意的参考资料。 Bruneton等。 提出了一种处理从几何到BRDF的海洋表面变化的技术,包括环境照明。Schilling讨论了一种类似方差映射的技术,该技术支持使用环境贴图进行各向异性着色。Bruneton和Neyret提供了该领域早期工作的全面概述。

Further Reading and Resources

McGuire的图形编码和Glassner的数字图像合成原理是本章所涉及的许多主题的良好参考。 Dutr'e的全局照明纲要的某些部分有点过时(特别是BRDF模型部分),但它是渲染数学(例如,球形和半球形积分)的良好参考。 Glassner和Dutr'e的参考资料均可在线免费获取。

对于想要更多地了解光与物质相互作用的读者,我们推荐Feynman无与伦比的讲座(可在线获取),这对我们在编写本章物理部分时的理解非常重要。其他有用的参考资料包括Fowles的现代光学介绍,这是一篇简短易懂的介绍性文本,以及Born和Wolf的光学原理,这是一本较重(比喻和字面)的书,提供了更深入的概述。Nassau的“物理学与化学”以极其彻底和细节的方式描述了物体颜色背后的物理现象。

(Chapter 9 End.)