Chapter 9 – Physically Based Shading 基于物理的着色

在本章节中,我们将学习基于物理的着色。在第一小节中,我们将先了解一些关于光线物理交互的知识,在第二至第四小节中,我们将了解这些物理因素是如何运用到着色过程的。在第五至第七小节中,我们将构建基于物理的着色模式。在第八至第十二小节中,我们将学习各种不同的材质类型所使用的着色模式。在最后一小节中,我们将学习材质与材质之间是如何融合的,以及如何避免锯齿,同时保留材质的外观表现。

9.1 光的物理属性

光线与材质,或者说与物体的交互构成了基于物理的着色。了解这些交互之后,我们能够对光的属性有一个基本的理解。

在物理光学中,光线被描述为一种电磁横波(transverse wave),波在电磁场内的振幅与其传播方向垂直。电场内的向量与磁场内的向量互相垂直,且两个向量的长度的比例是固定的。该比例等同于相速度(phase velocity),这一概念我们将在之后的小节中学习。

下图展示了一个简单的光波,它可能是世界上最简单的光波,其是一个完美的正弦函数。这个光波只有一个波长,有字母λ表示。在8.1中,我们已经看到了光的颜色与其波长有着紧密的联系。因此,单一波长的光又被称为单色光(monochromatic light)。但是现实世界中大多数光都是多色光并且包含了多种波长。

同时,上图中的光波是线性偏振的(linear polarized),也就是说,光波的电场与磁场在一条线上发生振幅。相反,在本书中,我们将学习非偏振(unpolarized)光,其电场与磁场的振幅方向将会是垂直与传播轴的各种方向。虽然,单色光,或者说线性偏振光非常简单,但由于任何光波都能由偏振光组成,所以我们还是需要学习其原理与表现。

如果基于某一时间段内去追踪光波上的一点(例如,振幅的峰值),我们可以看到其在空间内的移动速度是恒定的,这就是光波的相速度(phase velocity)。对于在真空中传播的光波,我们将其相速度记为c,大约为300000千米每秒。

光波会携带能量。而该能量流的密度等同于电场与磁场的振幅。在本书中,我们更关注电场,因为其能多地影响了光的视觉属性。在渲染中,我们主要使用能量流在一段时间内的平均值,其与波的振幅的平方成正比。而平均的能量流密度记为irradiance(辐照度),一般用字母E表示。辐照度与光的关系,我们已经在第八章中学习了。

光波的组合是线性的,也就是说,总的光波是每一组光波的和。但是,irradiance却与振幅的平方成正比,这是不是一个悖论呢?例如,对于irradiance来说,两个相同的光波是不是能够表示为“1+1=4”?同时,由于irradiance表示能量流,如果上述等式成立,会不会有悖于能量守恒定律?对于这两个问题,我们的回答是,有时能表示为1+1=4。同时该等式并不违背能量守恒定律。

我们举一个简单的例子:n个 单色光波,它们完全相同,只是处于不同的阶段。这些光波的振幅都是a。正如我们在上文提到的,每一个光波的irradiance E1与a2成正比,或者说E1=ka2,k是一个常量。

下图展示了三种情况。左侧的图片中,所有的波都拥有相同的结构(或者说,相,phase),且互相增强振幅。结合后的波的irradiance是单个波的irradiance的n2倍。这种情况被称为constructive interference(相长干涉)。中间的图片中,每一组波的phase都互相抵消。结合后的波,振幅为0,irradiance为0。这种情况被称为destructive interference(相消干涉)

无论是constructive interference还是destructive interference,都属于特殊的coherent addition(相干叠加),每一个波的波峰和波谷都以统一的方式排列。根据波与波之间phase的不同组合,n个相同的波进行相干叠加之后,波的irradiance可能是单一波的irradiance的0倍或者n2倍。

但是,大多数情况下,多个波进行相干叠加时,它们的phase是随机分布的。也就是上图中右侧的情况。在这种情况下,结合后的波的振幅为n0.5a,也就是说其irradiance为单一波的n倍。可能大家会觉得,

那么这意味着相消干涉与相长干涉都符合能量守恒定律?其实,上图并不完整,其只表现了多个波在某一点的交互。由于波在空间中传播,每一个位置上各个phase相互关系是不同的。也就是说,某一位置可能会发生相长干涉,但在另一个位置可能会发生相消干涉,因此总的能量永远是守恒的。

当电荷(electric charge)在物体中产生振幅,光波会被射出。而产生振幅的部分能量(热能,电能,化学能)将转换为光能,而光能将被物体辐射出。在渲染中,这一类物体将被作为光源。在光波被射出之后,其在空间中不断穿行直到其与某些物质发生接触。带有振幅的电场将不断的对物质中的电荷进行推拉,使电荷产生震荡。同时震荡的电荷将射出新的光波,其会是的入射光波的能量以新的方向射出。这就是所谓的scattering(散射),也是大多数光学现象的基础。

散射的光波与原始的入射光波有着相同的频率。当原始的波包含多种频率的光时,每一种频率的光波将独立与物质发生交互。一种频率的光能量只会影响该频率下射出的光能量,除非在某些特殊情况,例如荧光和磷光,而在本书中我们并不会讨论这两种特殊情况。

一个独立的分子,其会以任何方向散射光波,但是各个方向上的光强将会不同。更多的光将在光波的传播轴上进行散射。波长较短的光,相较于波长较长的光,其散射效果更好。

在渲染中,我们所要面对的是大量的分子的集合体。当光与这一类分子集合体发生交互时,结果将于单一分子的交互不同。互相靠近的分子所散射的光波通常是互相干(mutually coherent),因此会表现出干扰。之后的小结中,我们将主要学习多个分子散射光的一些特殊情况。

9.1.1 Particles(粒子)

对于理想的气体(gas),分子之间并不会互相影响,因此它们的相对位置是完全随机且互不关联的。虽然这只是一个抽象概念,但这对于正常大气压强下的空气来说,是一个理想的参考模型。在这种情况下,从不同的分子中所散射的波的phase也会是不同的。结果就是,散射的波的能量增幅是线性的,如上文中右侧的图片所示。从n个分子所散射出的光能量的总和是从单个分子所散射出的光能量的n倍。

相反,如果分子之间的间距非常近并且簇拥在一个小于单一光波波长的区域内,那么这些分子所散射的光波将会发生constructive interference。这就会造成能量以平方的形式增长,如上文中左侧图片所示。因此,这一小个区域内n个分子所散射的光强将会是单个分子散射光强的n2倍,同时将会是理想的气体状态下n个分子所散射的光强的n倍。这意味着,如果每立方米内的分子密度是固定的,那么将分子进行压缩会显著地增加散射光的强度。如果我们能够保持区域内分子的密度不变,并将该区域不断扩大,这将会进一步增加散射光的强度,直到这一区域的直径接近一个光波波长。超过这一临界点之后,即使我们继续增加该区域的尺寸,也不能够增加散射光的强度。

这一过程解释了为何云和雾气能够散射强光。这两种现象都是由冷凝所造成的,所谓冷凝就是空气中的水分子不断压缩同时聚集更大体积的过程。这会大大增加光的散射,即使一定空间内水分子的密度并未变化。我们将在第十四章学习云朵的渲染。

当我们学习光的散射时,particle(粒子)同时被用来表示独立的分子与簇拥的分子群。簇拥的分子群,其直径如果小于光波的单个波长,那么能够造成constructive interference。对于particle来说,这一类散射被称为Rayleigh scattering,对于固体来说,这一类散射被称为Tyndall scattering

9.1.3 媒介

我们需要学习的另一个重要知识点是,光穿过一个均匀介质(homogeneous medium),所谓均匀介质,指的就是空间内均匀的分布了相同的分子。分子空间并不一定需要和水晶相同。液体,或者不完全透明的固体,在光学上也是均匀介质,只要它们只由一种分子组成且它们之间没有裂隙和气泡。

在均匀介质中,除了在入射的原始波的传播轴方向上的散射波,其他的散射波将形成destructive interference。所以,在原始波和所有的散射波相结合之后,最后的结果与原始波相同,除了其相速度(phase velocity)和振幅(某些情况下)。最后的波不会有任何散射的效果——因为散射波之间发生了destructive interference抵消。

原始波与新生成的波的向速度的比率定义了介质的一种光学属性,其被称为index of refraction(IOR,折射率),由字母n表示。有些介质具有吸收性。它们会将部分光能量转换为热能,这会导致波的振幅根据距离而减弱。这个衰减率被定义为attenuation index,由希腊字母κ表示。n和κ都会随着波长发生变化。这两个属性则表现了介质是如何影响某一波长下的光波,一般我们将会将这两个值组成一个复数n+iκ,将其称为complex index of refraction(复折射率)。折射率将微观层面(分子)的光的交互进行抽象化,使得我们能够将介质当作一个连续的空间范围,这无疑更便于计算与理解。

虽然波的相速的改变并不会直接影响外观表现,但是光速的改变将会影响外观(我们之后再来解释)。换句话说,光的吸收将会直接影响外观,它能够降低光的强度并且改变光的颜色(如果波长发生了变化)。下图展示了光的吸收的例子。

非均匀介质通常会被模拟为带有散射particle的均匀介质。均匀介质之所以能够造成destructive interference以抵消散射,是因为均匀介质内的分子是统一排列的。只要分子的分布发生变化,那么就会打破destructive interference,使得散射的光波能够继续传播。例如,在介质中存在其他类型的分子群簇拥,或者一个气泡,裂隙,甚至分子的密度变化。此时,介质将会以上一小节提到的particle进行散射,而散射的效果取决于分子群簇拥的尺寸。即使是上一小节中我们提到的气体物质,我们也可以用上述方法进行模拟。“散射的particle”是由分子的恒定运动所引起的短暂密度波动。这样的话,气体也能拥有折射率n,其能够便于我们理解气体的光学属性。下图展示了光的散射的一些例子。

上图从左至右分别为:水,带有几滴牛奶的水,含有10%牛奶的水,纯牛奶和乳白色的玻璃。牛奶的散射particle一般会大于光波的波长,所以其散射光几乎没有颜色,中间的图片带有一点点蓝色。乳白色玻璃中的散射particle小于可见光波的波长,因此其散射的蓝光更强。在最右侧的图片中,背景被分割成了两个部分,左侧部分,通过介质的光更明显,而右侧则是散射的光更明显。

散射性和吸收性都取决于物体的尺寸。如果一个介质较小,那么它产生的散射效果可能没有同一类型较大的介质那么明显。例如,在一个房间中观察一杯水的散射性或者房间内空气的吸收性,可能都不会特别明显。但是,如果我们将其延伸至外部环境,那么就会非常明显,如下图所示。

一般来说,一种介质的外观表现会被其散射性和吸收性所影响。如果介质的散射性越高,那么看上去就更不透明。

9.1.3 表面

从光学角度来说,一个物体的表面是一个二维平面,其将空间分割为折射率不同的两个部分。在渲染中,外部空间包括空气,其折射率大约为1.003,为了便于运算,我们会默认其等于1。而物体内部空间的折射率则取决于物体的材质。

当光波撞击到一个物体的表面时,两个因素会影响最后的外观表现:物体的材质以及表面的几何属性(例如,位置,角度)。首先我们只考虑物体的材质因素,并假设表面是一个完美的平面。同时,我们假设“外部”的折射率(光波的初始位置)为n1,而“内部”的折射率(光波在穿过物体表面之后会通过的空间)为n2

在之前的小节中我们已经看到,当光波接触到不同的材质或者说接触到不同密度的物体时会发生散射,例如,折射率。一个平面表面将不同的折射率分为两个部分,而光波以此发生散射。这一现象的条件是与电场向平行的平面必须是连续的。换句话说,电场矢量在平面表面的投影必须与表面的两侧相匹配。这也意味着:

1. 在表面上,任何散射的波必须位于入射波的phase,或者其180°之外。因此,在表面上,散射波的波峰与入射波的波峰或者波谷对齐。这将会限制散射波的传播方向,其只能进入表面或者退离表面。第一种就是transmitted wave(穿越波),而第二种是reflected wave(反射波)

2. 散射波与入射波有着相同的频率。在这里我们假设入射波为单一波长的波,但这一原理可以应用到跟为复杂的波,因为多波长的波可以由多个单一波长的波组成。

3. 当光波从一个介质移动到另一个介质时,其phase velocity(相速,也就是波通过截止的速度)将会基于折射率的比率(n1/n2)而改变。由于波的频率不变,波长也会基于该比率变化(n1/n2)。

最后的结果如下图所示。光波撞击到一个平面,该平面分割了折射率n1和n2。左侧的图片显示了,起始于左上角的入射光波撞击到平面。图中的红色部分表示波的phase。而在平面下方,波的波长根据比例(n1/n2)发生改变,在下图中为0.5。我们可以看到,平面上方与下方的波的phase是对齐的,因此我们就可以通过折射率的比例求出下方的波的传播方向。计算的方法如右下图片所示。

反射波与入射波与表面的法线向量有着相同的夹角θi。而表面下方的transmitted波的传播方向与反向法线向量的夹角为θt,其等式如下所示:

上述等式就是Snell’s law(斯涅尔定律)。在第十四章中,我们将在全局折射效果中使用该等式。

虽然折射这一概念一般与“清澈”的材质联系在一起,例如玻璃和水晶,但是折射也会发生在不透明的物体上。当折射发生在不透明的物体上时,光波将在物体的内部进行散射和吸收。如果光波碰撞到金属材质,由于金属的内部含有许多自由电子(并未与分子绑定),这些电子将会吸收光能量并且转换为反射波。这也就是为什么金属有着较高的吸收率也有着较高的反射率。

我们现在学习的物体表面的折射现象(折射与反射)的发生条件是两个空间的折射率发生极大的变化。如果折射率的变化较为平缓,那么并不会将光波分为两个部分,而只会影响光波的传播路径。这一效果大多现于因为温度的不同所造成的空气密度的改变,例如海市蜃楼和热气造成的画面扭曲。如下图所示。

如果一个物体位于另一个物体之中且两个物体拥有相同的折射率,那么我们并不能“看到”物体的表面。如果缺少了折射率的变化,反射与折射并不会发生。下图中,那些玻璃球颗粒与水有着相同的折射率。因此,在水面之上,这些玻璃球有着可见的表面(其折射率与空气的折射率不同)。在水下,由于玻璃球与水的折射率相同,其表面是模糊的,而我们能分辨其轮廓是因为玻璃球与水面有着不同的颜色。

到现在为止,我们都在谈论物体表面以下的材质与表面以上的材质对于光波的影响。现在我们将要学习另一个影响表面外观的因素:表面的几何属性。严格意义上来说,一个完美的平面是不存在的。每一个平面都有着其不规则性,即使该平面只由一个原子组成。

但是,如果表面的不规则性小于光波的波长,那么其不会影响光波。如果表面的不规则性远远大于光波的波长,那么其也不会影响表面的局部平整性。只有表面的不规则性的范围位于1-100个波长之间才会造成物体表面的光照现象有别于平面。在之后的小节中,我们将通过diffraction(衍射)来解释这一现象。

在渲染中,通常我们会使用几何光学(geometrical optics),其并不会考虑波与波之间的interference(干涉)以及diffraction(衍射)。也就是说我们假设物体表面的不规则性将小于一个光波的波长或者远远大于一个光波的波长。在几何光学中,光被模拟为射线而不是波。在光线与物体表面相交的点,物体表面将会被当作平面。在本章的第十一小节之前,我们将聚焦于几何光学,之后再学习wave optics(波动光学)的着色模型。

正如我们在上文提到的,如果表面的不规则性远远大于一个波长,那么意味着该不规则性会影响表面的朝向。当这些不规则性非常微小而不能被单独渲染或者绘制——换句话说,这些不规则性小于一个像素——而我们将其称之为microgeometry(微观几何)。光线的反射与折射取决于物体表面的法线向量。而微观几何的效果就是改变物体表面上不同位置上的点的法线向量,因此微观几何将改变折射光线与反射光线的方向。

虽然物体表面上某一个特定的点只会以一个方向反射光线,但是每一个像素将包含物体表面上的多个点,也就是说其会包含多个方向的反射光线。物体表面的外观表现将是一个像素点所包含的所有的这些点的反射光线的总和。下图展示了一种情况,两种表面在宏观层面有着相同的形状,但是在微观几何层面则有着巨大的差异。右侧的图片表示,两个物体在微观层面的法线向量。顶部的物体,其表面在微观层面是略微粗糙的。入射光线撞击到物体表面的点,反射光线聚集在一个较窄的范围内。因此,表面的反射有一点模糊。底部的物体,其表面更粗糙。物体表面上的点受到光线撞击之后,反射的光线聚集在一个更宽的范围,因此其表面的反射更模糊。

对于渲染来说,我们并不会精确模拟物体表面的微观几何,而是认为微观层面的法线向量在物体表面随机分布。结果就是我们将物体表面模拟为不断地以连续发散的方向反射(折射)光线。而发散的宽度,以及相应的反射与折射细节,则取决于微观几何中的法线向量的变换——换句话说,就是物体表面微观层面的roughness(粗糙度)。如下图所示,围观角度下的物体表面,将会以多个方向反射,折射光线。

9.1.4 Subsurface Scattering(表面下方散射)

折射的光线将继续与物体的内部空间发生交互。我们在之前提到,金属能够反射大多数入射光并且快速地反射剩下的光线。相反,非金属的材质则会有大量不同的散射与吸收效果,其类似于上图中的两个杯子。如果材质的散射率与吸收率较低,将偏向于透明,也就是说大多数折射光线会穿过整个物体。在第五章中,我们简单介绍了如何绘制这一类材质,在第十四章中我们将学习这一类材质的折射。在本章节中,我们将专注于不透明的物体,而这一类物体内部,光纤将经历多次散射与吸收,直到最后有一部分光线将重新散射出物体表面。如下图所示,折射光在穿过物体内部时会被吸收。在下图的例子中,大多数拥有较长波长的光被吸收,拥有较短波长的蓝光则散射出物体。此外,光线从物体内部的particle射出。最终,一些折射光从物体表面散射出,如下图的蓝色箭头所示。

上文中的subsurface散射光,将从不同的点射出。入射点到射出点的距离取决于物体的密度以及物体内部散射particle的属性。该距离与shading scale(一个像素的尺寸,或者两个着色采样点之间的距离)的关系是非常重要的。如果该距离相较于着色度量较小,那么其并不会影响我们的着色计算。这样的话,subsurface散射就能与反射一同归到物体的局部着色模式,也就是说某一点的射出光线只取决于同一个点上的入射光线。但是,由于subsurface散射光的外观表现与表面的反射光有着较大的差异,一般我们会将这两种光分为两个独立的着色等式。因此,specular term(镜面反射等式)模拟了物体表面的反射,而diffuse term(漫反射等式)模拟了local subsurface scattering(局部散射)

如果入射点与射出点的距离相较于shading scale来说较大,那么我们就需要使用特殊的渲染技术来表现出光线在某一点射入物体表面从另一个点射出的外观表现。该技术被称为global subsurface scattering,而我们将在第十四章中学习。而local与global subsurface scattering的区别如下图所示。左侧的图片中,我们使用了subsurface scattering来渲染材质。其中,黄色的圈与紫色的圈表示了两种不同的shading scale(采样尺寸)。很明显,黄色的圈意味着单个采样点所覆盖的区域大于subsurface scattering的距离。因此,入射点与射出点的距离可以忽略,我们只需要将subsurface scattering作为diffuse term即可,如右侧的图片所示。如果我们的camera更靠近物体表面,那个单个采样点所覆盖的区域将变小,如紫色的圈所示。此时,subsurface scattering的距离将大于采样点所覆盖的区域。这样我们就需要使用globa subsurface scattering来渲染采样点。

需要注意的是,local与globa subsurface技术模拟了几乎相同的物理场景。这两种技术的选择不但取决于材质属性也取决于我们观察物体表面的角度。例如,场景是一个孩子在玩塑料玩具,那么我们在渲染时则会使用global技术来绘制孩子的皮肤而使用local diffuse的着色模式来绘制玩具。这是因为现实世界中,皮肤的散射距离远远大于塑料。但是,如果camera距离够远,那么材质的散射距离将小于一个像素所覆盖的范围。此时,使用local着色模式渲染即可。相反,如果camera的距离足够近,那么对于塑料玩具,我们也应该使用global技术。

留下评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据