《Real-Time Rendering 4th Edition》读书笔记--简单粗糙翻译 第九章 基于物理的着色 Physically Based Shadering

写在前面的话:因为英语不好,所以看得慢,所以还不如索性按自己的理解简单粗糙翻译一遍,就当是自己的读书笔记了。不对之处甚多,以后理解深刻了,英语好了再回来修改。相信花在本书上的时间和精力是值得的。

———————————————————————————

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

                        ——Mirumo、John Constable

天地有大美而不言--光、影与角度让万物有灵且美。

 
本章将介绍基于物理的着色的各个方面。 9.1节描述光与物质相互作用的物理现象 9.2至9.4节将说明这些物理现象与着色过程的关联 9.5到9.7节专门讨论构建基于物理着色的模型 ,而 模型本身——涵盖了各种材质类型——将在9.8到9.12节中进行讨论 最后, 在9.13节中,描述了如何将材料混合在一起,并介绍了避免走样并保留表面外观的过滤方法
 
9.1 光的物理性(Physics of Light)
 
        在物理光学中,光被模拟成一种 电磁横波(electromagnetic transverse wave) ,其中 电场(electric) 磁场(magnetic) 垂直于其 振荡 传播方向。 这两个场的振荡是成对的。 磁场向量和电场向量相互垂直,它们的长度之比是固定的, 等于 相速度(phase velocity)
        图9.1中是一个简单的光波,一个完美的正弦函数。这波拥有单一波长(wavelength),用希腊字母λ表示。正如在8.1节中讲到的,感知到的光的颜色与其波长密切相关。因此,单波长的光被称为 单色光(monochromatic light) 。然而,在实际应用中遇到的大多数光波都是 多色的(polychromatic) ,包含许多不同的波长。jiji
         图9.1中的光波在另一个方面非常简单,它是 线性偏振的(linearly polarized) 这意味着对于空间中的一个固定点,磁场和电磁彼此 每一步都沿着一条线来回移动。 相反,在这本书中,我们关注的是 非偏振光(unpolarized light) ,这是更为普遍的。 在非偏振光中,场振荡均匀地分布在垂直于传播轴的所有方向上 尽管它们很简单,但理解单色线偏振波的行为是有用的,因为任何光波都可以分解成这样的波的组合。
         如果我们用给定的相位(例如,振幅峰值) 随时间 跟踪波上的一个点,我们将看到它以恒定的速度在空间中移动,这就是波的 相速度(phase velocity) 对于在真空中传播的光波,相速度是c,通常被称为光速,大约每秒300,000公里。
        
图 9.1 光,一个电磁横波。电场和磁场彼此垂直着沿着传播方向振荡传播。 图中所示的波是最简单的光波, 它既是单色(只有一个波长λ)和线性偏振( 电场和磁场各沿一条直线振荡)
 
         在第8.1.1节中, 对于可见光,单个波长的大小大约在400-700纳米的范围内 。为了让大家对这个长度有个直观的认识,它大约是一根蜘蛛丝的一半到三分之一的宽度,而蜘蛛丝本身还不到一根头发丝的五十分之一。参见图9.2。在光学中,讨论特征对于光波长的大小通常是有用的。 在这种情况下,我们会说,蜘蛛丝的线程的宽度大约是2λ-3λ(2-3个光波长),一根头发的宽度大约是100λ- 200λ。
图 9.2  左边的可见光波长是相对于一根蛛丝而言的,这条蛛丝的宽度略大于1微米。在右图中,一根相似的蜘蛛丝在人类的头发旁边。
 
       光波携带能量。能量流的密度等于电场和磁场大小的乘积,所以与电场大小的平方成正比 。我们主要关注电场,因为它对物质的影响比磁场大得多。在渲染中,我们关注的是 平均能量流(average energy flow) 随时间的变化,它与波振幅的 平方 成正比。这个平均能量流密度就是 辐照度(irradiance) ,用字母E表示。
 
        光波具有线性结合的性质。总波是各分量波的和。 然而,由于辐照度与振幅的平方成正比,这似乎会导致一个悖论。例如,对两个相等的波求和会不会导致辐照度出现“1 + 1 = 4”的情况?然而辐射度表示能量流,这不会违反能量守恒定律吗?这两个问题的答案分别是 “有时”和“不”。
         为了说明这一点,我们来看一个简单的例子:n个单色波的叠加,除了相位外都是相同的。每个n波的振幅是a,如前所述,每个波的辐照度E1与a的平方成正比,换句话说,E1 = k*a*a,其中k是常数系数
         图9.3展示了这个例子的三个示例场景。在左边,所有的波都以相同的相位排列,并且互相加强。 组合波的辐照度是单个波的n*n倍,是n个单波的辐照度之和的n倍。 这种情况称为 相长干涉(constructive interference)  而在中间图中 ,每一对波的相位是相反的,互相抵消。最终组合波具有零振幅和零辐照度。这就是 相消干涉(destructive interference)
         然而,大多数情况下,当波相加时,它们是相互 不相干的(incoherent) ,这意味着它们的相位是相对随机的。如图9.3右图所示。 在这种情况下,组合波的振幅为 √na, 单个波的辐照度线性增加到一个波的辐照度的n倍 ,正如人们所期望的那样。
图 9.3  n个具有相同频率、极化(偏振)和振幅的单色波叠加在一起的三个情况。 从左到右分别是:相长干涉、相消干涉和 非相干相加(incoherent addition) 在每一种情况下,组合波的振幅和辐照度相对于n个原始波都展示出来了。
 
         图9.3并没有显示完整的图像——它只显示了一个位置的波的相互作用。当波在空间中传播时,它们之间的相位关系从一个位置到另一个位置发生变化,如图9.4所示。 在某些位置,波的干涉是积极的,并且混合波的辐照度大于单个波的辐照度值的和。 在其他地方,它们会互相干扰,造成组合的辐照度降低。 这并不违反能量守恒定律,因为通过相长干涉得到的能量和通过相消干涉失去的能量总是相互抵消的。
图 9.4  单色波从具有相同频率的两个点源向外传播。 在空间的不同区域,波的干涉是有积极性的,也有消极性的。
 
         当物体中的电荷发生振荡时,就会发出光波。 引起振动的部分能量——热量、电能、化学能——被转换成光能,从物体辐射出去。 在渲染中,这些对象被当作光源
         光波发出后,它们在空间中传播,直到遇到一些可以相互作用的物质。 振荡的电场推动和拉动物质中的电荷,使它们依次振荡。振荡的电荷释放出新的光波,将部分入射光波的能量重新定向到新的方向。这种被称为 散射(scattering) 的反应是各种光学现象的基础。
         散射光波具有与原光波相同的频率。通常情况下,原始波包含多个频率的光,每一个单独与物质相互作用。一个频率的入射光能并不会对另一个频率的发射光能产生影响,除了一些特殊的——相对罕见的——情况,比如荧光和磷光,在本书中不会描述。
         一个孤立的分子向各个方向散射光,光强有一定的方向变化。更多的光向靠近发射轴的方向散射,包括向前和向后。分子作为散射体的有效性——在其附近的光波被完全散射的可能性——随着波长的不同而有很大的不同。短波长的光比长波长的光散射更有效。
         在绘制过程中,我们关心的是许多分子的集合。具有这种聚集物的轻相互作用不一定类似于孤立分子的相互作用。从附近的分子中散射出来的波通常是相互相干的,因此表现出干扰,因为它们来自同一入射波。
 
9.1.1 粒子(Particles)
 
       在理想气体中,分子之间不相互影响,因此它们的相对位置是完全随机和不相关的。虽然这是一个抽象概念,但它是一个正常大气压下的相当好的空气模型。在这种情况下,从不同分子散射的波之间的相位差是随机的,并且是不断变化的。因此,散射波是不相干的,它们的能量线性增加,如图9.3的右图所示。换句话说,从n个分子散射的总光能是从单个分子散射光的n倍。
         相反,如果分子被紧密地压缩成远小于一个波长的簇,那么每个簇中的散射光波就会处于同相并进行积极性的干涉。这使得散射波能量以二次方的方式叠加起来,如图9.3左图所示。 因此,从一小群n个分子散射出来的光的强度是单个分子散射光的n*n倍,是理想气体中相同数量分子散射光强度的n倍。这种关系意味着,对于每立方米固定密度的分子,将分子聚集成簇将显著增加散射光的强度。 使群簇变大,同时保持整体分子结构密度恒定, 会进一步增加散射光的强度,直到 群簇 直径计变得接近一个光波长。超过这一点, 群簇 规模的额外增加将不会进一步增加散射光强度。
         这个过程解释了 为什么云和雾会如此强烈地散射光线 。它们都是通过空气中的水分子聚集成越来越大的团块 凝结形成的 。这显著增加了光散射,即使水分子的总体密度没有改变。云渲染将在14.4.2节中讨论。
       在讨论光散射时, 粒子(particles) 一词既指单个分子,也指多分子簇。由于来自直径小于一个波长的多分子粒子的散射是来自孤立分子的散射的放大(通过相长干涉)版本,它表现出相同的分子变化和波长依赖性。这种类型的散射被称为大气粒子的 瑞利散射(Rayleigh scattering) 和嵌入固体中的粒子的 丁达尔散射(Tyndall scattering)
       当粒子的大小超过一个波长时,散射波在整个粒子上不再是同相的这一事实改变了散射的特性。散射越来越倾向于正向,而波长依赖关系减小,直到所有可见波长的光都均匀散射。这种类型的散射称为 米氏散射(Mie scattering) 。瑞利散射和米 散射在第14.1节中有更详细的介绍。
 
9.1.2 媒介(Media)
 
       另一个重要的例子是光在 均匀介质(homogeneous medium) 中传播,均匀介质是充满均匀间隔的相同分子的体积。分子间距不必像在晶体中那样是完全规则的。如果液体和非晶固体的成分是纯的(所有的分子都是一样的),并且没有空隙和气泡,那么它们在光学上是均匀的。
       在均匀介质中,散射波排列在一起,因此它们在除传播原方向以外的所有方向上都具有消极性干扰。当原始波与从单个分子散射出的所有波结合后,除了相速度和外,最终结果与原始波相同 (在某些情况下)振幅。最后的波不表现出任何散射——它被消极性干扰有效地抑制住了。
       原始波和新波的相速度之比决定了一种被称为 折射率(index of refraction,IOR, 或refractive index) 的光学性质,用字母n表示。有些介质具有 吸收性(absorptive) 。它们将部分光能转化为热能,使波的振幅随距离呈指数衰减。 衰减率由 衰减指数(attenuation index) 定义,衰减指数用希腊字母表示 κ(kappa)。n和κ通常随波长变化。这两个数字结合在一起,完全定义了介质如何影响给定波长的光, 他们经常合并成一个单一的复数n + iκ,称为 复折射率(complex index of refraction) 折射率将光相互作用的分子级细节抽象出来,使介质成为一个连续的体,这就简单得多了。
       当光的相速度不直接影响外观时,速度的变化稍后解释。另一方面,光吸收对视觉有直接的影响,因为它降低了光的强度,并且可以改变它的颜色 (波长变化) 。图9.5展示了一些光吸收的例子。
图 9.5   图中 四个容器内的液体具有不同的吸收特性。从左到右:清水,石榴汁水,茶和咖啡。
 
       非均匀介质通常可以通过在 均匀介质中 嵌入散射粒子模拟得到 在均匀介质中抑制散射的消极性干扰是由分子的均匀排列引起的,因此也就产生了散射波。分子分布的任何局部变化都会打破这种消息性干涉模式,使散射光波得以传播。这种局部变化可以是不同分子类型的群簇、气隙、气泡或密度变化。在任何情况下,它都将散射光,就像前面讨论的部分一样,散射特性同样依赖于群簇大小。 甚至气体也可以用这种方法来模拟。 “散射粒子”可以认为是由分子的恒定运动引起的瞬态密度波动 图9.6展示了一些光散射的例子。
图 9.6  从左到右:水,几滴牛奶的水,约10%牛奶的水,全脂牛奶,乳白色的玻璃。大多数牛奶的散射粒子都比可见光波长大,所以它的散射主要是无色的,在中间图像中有一个微弱的蓝色。乳白色玻璃中的散射粒子都小于可见光波长,因此散射的蓝光比红光强。由于背景的明暗分离,透射光在左边更明显,散射光在右边更明显。
 
       散射和吸收都是基于尺度的。在一个小场景中不产生任何可见散射的介质,在大尺度下可能有相当明显的散射。例如,当在房间里观察一杯水时,光在空气中的散射和在水中的吸收是不可见的。但是,在扩大环境中,这两种影响都很重要,如图9.7所示。
        
图 9.7  左图显示,在几米的距离外,水吸收光,尤其是红光,非常强。右图显示,即使在没有严重污染或大雾的情况下,数英里外的空气中也有明显的光线散射。
 
       一般情况下,一种介质的外观是由吸光和散射的某种组合引起的,如图9.8所示。散射的程度决定了云量,高散射造成不透明的外观。除了一些罕见的例外,如图9.6中的乳白色玻璃,固体和液体介质中的粒子往往大于一个波长,并会均匀地散射所有可见波长的光。因此,任何颜色的色调通常是由波长的吸收程度引起的。介质的亮度是这两种现象的结果。 特别是白色,它是高散射和低吸收相结合的结果。
图 9.8  对光的 吸收和散射的不同组合得出不同外观。
 
9.1.3 表面(Surfaces)
 
       从光学角度看,物体表面是分割具有不同折射率的物体的二维界面 。在典型的渲染情况下, 外部空间包含空气,折射率约为1.003 为简单起见, 通常假设为 1。内部的折射率取决于物体的构成物质。
       当光波击中一个表面时,该表面的两个方面对结果有重要影响:两边的物质和表面的几何形状。我们将从物质方面开始,假设最简单的表面几何,一个完美的平面。“外”表示折射率 (入射波的入射方向)记为n1,“内部”折射率( 波通过表面后会在哪里传播 )记为n2。
       分离不同折射率的平面是一种特殊的不连续性,它以特定的方式散射光。 边界条件要求平行于表面的电场分量是连续的。换句话说,电场矢量到平面的投影必须在平面的任意一边匹配。 这有几个含义:
         1、 在表面上,散射波的波峰必须与入射波的波峰或波谷一致。这就限制了散射波只能向两个可能的方向传播,一个是继续向表面传播,另一个是远离表面传播。第一种是 透射波(transmitted wave) ,第二种是 反射波(reflected wave)
         2、 散射波的频率必须与入射波相同。在这里假设的是一个单色波,但是我们讨论的原理可以应用于任何普通波,首先把它分解成各种单色成分。
        3、 当光波从一种介质传播到另一种介质时,相速度——即光波在介质中传播的速度——与相关的反射率(n1 / n2)成正比。由于频率是固定的,波长也成 (n1 /n2)  比例 地变化。
         最终结果如图9.9所示。 反射波和入射波方向 和表面法线 有相同的角θi。 透射波方向弯曲(折射)一个角度θt,和 θi 有以下关系:
这个折射方程被称为 斯涅尔定律(Snell' law) 。它用于全局折射效应
图 9.9  入射到平面上的光波,其折射率为n1和n2。左图显示了从左上方进来的入射波的侧视图。红色波段的强度表示波的相位。波在次表面的间距成 (n1/n2) 比例的改变,本例中是0.5。相位沿表面排列,因此间隔的变化使透射波的方向发生弯曲(折射)。三角形的构造说明了斯涅尔定律的由来。为了清晰,右上图单独展示了反射波。 它与入射波有相同的波间距,因此它的方向与表面法线有相同的角度。右下图展示了波的方向向量。
 
        虽然折射通常与透明材料有关,如玻璃和水晶,但它也发生在不透明物体的表面。当折射发生在不透明物体上时,光线在物体内部经历散射和吸收。 光与物体的介质相互作用,就像与 图9.8中 各种液体一样 。就金属而言,其内部含有许多自由电子( 电子 不与分子结合),这些电子“吸收”折射的光能,并将其重定向入反射波。这就是金属具有高吸收率和高反射率的原因。
         我们讨论过的表面折射现象——反射和折射——要求折射率发生突变,发生在小于一个波长的距离上 。折射率更平缓的变化不会使光分裂,而是使光的路径弯曲。当空气密度随温度变化时,如海市蜃楼和热变形, 通常可以看到这种效应。如图9.10所示。
图 9.10   由于折射率的逐渐变化引起 光路弯曲的一个例子 ,本例是因为温度变化引起的。
 
         如果一个物体沉浸在具有相同折射率的物质中,那么即使它有明确的边界,也不会有可见的表面 在没有折射率变化的情况下,反射和折射是不可能发生的 。图9.11就是一个例子。
图 9.11  这些装饰珠子的折射率和水一样。它们在 水面上有一个可见的表面是 由于它们的折射率与空气的折射率不同。而在水的下面,珠子表面两侧的折射率是相同的,所以表面是看不见的。珠子本身是可见的是因为它们对颜色的吸收。
 
         到目前为止,我们主要研究的是表面两侧物质的作用。 现在我们将讨论影响表面外观的另一个重要因素:几何。 严格地说,完全平坦的平面是不可能的。每个表面都有某种不规则性,即使只是组成表面的单个原子。 然而, 表面不规则性 比波长小得多,对光线没有影响,比波长大得多的表面不规则性有效地使表面倾斜,但不影响其局部平坦性。 只有波长在1-100范围内的不规则现象才会使表面表现出与平面不同的行为,这种现象称为 衍射(diffraction) ,我们将在9.11节中进一步讨论。
         在渲染中,我们通常使用 几何光学(geometrical optics) ,它忽略了波的影响,如干涉和衍射。 这相当于假设所有不规则表面都要么小于要么大于一个波长 。在几何光学中,光被模拟为射线而不是波。在光线与一个表面相交的点上,这个表面局部地被视为一个平面。图9.9右下角的示意图可以看作是反射和折射的几何光学图像,与图中其他部分的波形图像形成对比。
         正如我们前面提到的,表面的不规则性比波长大得多,改变了表面的局部方向。 当这些不规则性太小而无法单独呈现时——换句话说,比像素还小 ——我们将其称为 微几何(microgeometry) 。反射和折射的方向取决于表面法线。微几何的作用是改变表面上不同点的法线,从而改变反射和折射光线的方向。
         即使表面上的每个特定点只反射一个方向的光,每个像素也覆盖了许多向不同方向反射光线的表面点。 外观是由所有不同反射方向的聚合结果驱动的。图9.12展示了两个表面的例子,这两个表面在宏观尺度上具有相似的形状,但在微观几何上却有显著的不同。
图 9.12   左图中有 两个表面的照片,右边是它们对应的微观结构。上面的表面的 微观几何形状 稍微粗糙。入射光线照射在角度有些不同的表面点上,反射在一个狭窄的锥状方向上。可见效果是反射的轻微模糊。而下面的表面的 微观几何形状 更为粗糙。 入射光线击中的表面点的角度明显不同,反射光以一个宽锥状向外扩散,造成更模糊的反射。
 
         对于渲染,不是明确地建模微观几何,我们对待它的组织和表面有一个随机分布的微观结构的法线。因此,我们将表面建模为反射 (和折射 )在连续的方向扩展。这种扩展的宽度,以及反射和折射细节的模糊程度,取决于微几何法向量的统计方差——换句话说, 表面微观粗糙度(microscale roughness) 。如图9.13所示。
图 9.13  从宏观角度看,表面可以认为在多个方向上对光线进行反射和折射。
 
9.1.4  次表面散射(Subsurface Scattering)
 
       折射光会继续在物体的内部相互作用。 正如前面提到的, 金属反射大部分入射光,剩余的则被并迅速吸收掉 。相反, 非金属表现出各种各样的散射和吸收行为,和 图9.8中所示的液体杯相似。 低散射低吸收的材料是透明的,任何折射的光都能穿透整个物体。在5.5节中讨论了在没有折射的情况下绘制这些材料的简单方法,折射将在14.5.2节中详细介绍。在本章中,我们将关注不透明的物体,其中透射光经过多次散射和吸收,直到其中一些被重新发射回表面外。参见图9.14。
图 9.14  折射光线在材质中传播时会被吸收。在这个例子中, 吸收的 大部分的是较长的波长,留下的主要是短波长的蓝光。此外,它会在材质内粒子处发生散射。最终,一些折射的光线被散射出表面,就像从表面各个方向射出的蓝色箭头所示那样。
 
         这种 次表面散射(subsurface-scattered) 光的入射点与出表面的距离各不相同。进出距离的分布取决于材质中散射粒子的密度和性质。这些距离和 着色尺度(像素的大小,或者着色样本之间的距离) 之间的关系很重要。如果入口到出口的距离比着色尺度小,出于着色目的,可以假设它们是零。这样次表面散射与表面反射结合成一个局部着色模型, 认为 在某一点发出的光只依赖于同一点处的入射光。然而,由于次表面散射光与表面反射光有明显不同的外观,因此可以很容易将它们划分为单独的着色项。 高光项(specular term)模拟表面反射 漫反射项(diffuse term)模拟局部次表面散射(local subsurface scattering)
         如果入口到出口的距离比着色尺度大,那么就需要专门的渲染技术来捕捉光线从一个点进入表面然后从另一个点离开表面的视觉效果。这些 全局次表面散射(global subsurface scattering) 技术将在14.6节中详细介绍。局部和全局次表面散射的区别如图9.15所示。
图 9.15 左图中展示的是渲染中材质的次表面散射现象 。展示了两种不同的采样大小,黄色和紫色。大的黄色圆圈代表一个单一的着色样本,覆盖面积大于 次表面 散射距离。因此,这些距离可以被忽略,使得 次表面 散射可以作为局部着色模型中的漫反射项,如右图所示。如果我们靠近这个表面,着色的样本区域就会变小,如图中紫色的圆圈。 与着色样本覆盖的区域相比, 次表面 散射距离算大的。这时就需要全局技术从这些样本中生成逼真的图像。 
 
       需要 注意,局部和全局 次表面 散射技术模拟的是完全相同的物理现象。 每种情况的最佳选择不仅取决于材质的属性,而且还取决于观察的尺度。 例如,当渲染一个正在玩塑料玩具的孩子的场景时,可能需要全局技术来精确地渲染孩子的皮肤,而玩具只需要局部漫反射着色模型就足够了。这是因为皮肤的散射距离比塑料的要大得多。然而,如果相机距离足够远,皮肤散射距离将小于一个像素,局部着色模型对儿童和玩具来说都是准确的。 相反,在一个极端的特写镜头中,塑料有着明显的非局部 次表面 散射,玩具将需要全局技术来进行准确渲染。

9.2 摄像机(The Camera)

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

       这种系统包含一个传感器表面,由许多独立的小传感器组成的。像眼睛里的视杆细胞和视锥细胞,数码相机里的光电二极管,或者胶片上的染色颗粒。每个传感器检测其表面的辐照度值,然后生成一个颜色信号。辐照度传感器本身不能产生图像,因为它们平均了所有入射方向的光线。出于这个原因,一个完整的成像系统还需要包括一个带有一个小孔径(开口)的暗箱,它限制了光线进入和照射到传感器的方向。 置于光圈处的透镜使光线聚焦,因此每个传感器只接收来自一小组入射方向的光线。暗箱、孔径和透镜的综合作用使得传感器具有方向性(directionally specific)。 这些传感器测量的是平均辐射率,而不是测量平均辐照度——正如我们在8.1.1节中看到的,它量化了来自各个方向的光通量的表面密度,它量化了一束光的亮度和颜色。

        渲染模拟了一个特别简单的成像传感器,称为针孔相机,如图9.16的上图所示。针孔相机的光圈非常小——在理想情况下,一个零大小的数学点——没有透镜。点孔径限制传感器表面上的每个点只收集一束光线,离散传感器收集一条窄锥状光线,其基座覆盖传感器表面,其顶点位于孔径处。渲染系统以一种稍微不同(但相当)的方式模拟针孔相机,如图的9,16中间图所示。 针孔孔径的位置由点c表示,通常称为“摄像机位置”或“眼睛位置”。这一点也是透视转换的投影中心。

        渲染时,每个着色样本对应于一个射线,对应于传感器表面上的一个采样点。反走样的过程可以解释为在每个离散的传感器表面上重建收集的信号。然而,由于渲染不受物理传感器的限制,我们可以更一般地对待这个过程,从离散的样本重建出一个连续的图像信号。

        虽然已经构建出了针孔相机,但对于实际使用的大多数相机或人眼来说,它们都是糟糕的模型。使用透镜的成像系统模型如图9.16的下图所示。透镜允许使用更大的光圈,这会增加成像系统收集的光量。但是它也导致相机的景深有限的,物体太近或太远就会模糊。

图 9.16  每个相机模型都包含一组像素传感器。实心线将传感器从场景收集的光线绑定在一起。每个图中的嵌入图像表示的是由像素传感器上的单个样本点收集到的光线。上图是一个针孔相机,中间图是一个典型的带有相机点c的针孔相机的渲染系统模型,下图是一个带有镜头的更加真实的相机。聚焦在红球上,其他两个球在焦点之外。

 

        透镜除了限制景深之外还有一个额外的效果。即使是在完美聚焦的点上,每个传感器的位置接收到一组锥形的光线。理想的模型中,每个着色样本代表一个单一的观察光线,这有时会引入数学奇异点、数值不稳定性或视觉走样。记住在渲染图像时,物理模型有时可以帮助我们识别和解决这些问题。

9.3 双向反射分布函数(Bidirectional Reflectance Distribution Function,BRDF)

        最终,基于物理的渲染归结为计算沿一些视线进入相机的辐射率。 使用8.1.1节介绍的符号,对于给定的视图射线,我们需要计算Li(c,−v),其中c为摄像机位置,−v为沿视线的方向。 我们用-v表示,因为有两种表示法。首先,Li()中的方向向量总是指向远离给定点的地方,在本例中,这个点就是摄像机的位置。第二,视线向量v总是指向摄像机。

       本章我们假设没有参与介质存在,因此进入相机的辐射率等于沿着相机方向最近物体表面的辐射率:

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

       根据公式9.2,我们的新目标是计算Lo(p,v)。 本章我们不讨论透明度和全局次表面散射的情况。 换句话说,我们关注的是局部反射率现象。这些现象包括表面反射和局部次表面散射,仅依赖入射光方向 l 和出射光方向v。局部反射率量化为双向反射率分布函数(BRDF),记为f(l,v)。

       现实世界(以及渲染场景)中的对象的表面很少具有一致的材质属性。即使是由单一材料组成的物体,例如银质雕像,也会有划痕、污点、污渍和其他变化,导致其视觉属性从一个表面点到下一个表面点发生变化。 从技术上讲,捕捉基于空间位置的BRDF变化的函数称为空间变化BRDF函数 (spatially varying BRDF,SVBRDF)或空间BRDF (spatial BRDF,SBRDF)。然而,这种情况在实践中太过普遍,以至更短的术语BRDF经常被使用,并且隐含地假定取决于表面位置。

       一般情况下,BRDF是四个标量变量的函数,各向同性(isotropic)BRDFs(实际是物体表面BRDF函数模型的一个集合)是一种重要的特殊情况。当入射方向和出射方向围绕表面法线旋转时,这样的BRDFs保持不变,它们之间保持相同的相对角度。 如图9.17所示。 各向同性BRDFs是三个标量变量的函数, 因为只有一个在光线和相机之间的旋转角 φ是必要的。 这意味着,如果将均匀的各向同性材质放在转盘上并旋转,在给定一个固定的光线和摄像机的情况下,它在所有旋转角度下看起来都是一样的。

图 9.17  BRDF。方位角度φi和φo对于一个给定的切向量t。相对方位角φ,使用各向同性代替 φi和φo,并不需要参考切向量。

        因为我们忽略了荧光和磷光等现象,我们可以假设入射光反射后波长没有变化。反射光的数量可以根据波长变化,可以有两种方式建模。要么将波长作为BRDF的附加输入变量处理,要么将BRDF作为一个返回频谱分布的值。第一种方法有时用于离线渲染,而实时渲染则总是使用第二种方法。 由于实时渲染器将光谱分布表示为RGB三元组,这可以简单认为BRDF返回一个RGB值。

        为了计算lLo(p,v),我们将BRDF加入到反射率方程(reflectance equation)中:

l∈Ω下标的积分符号意味着平面上面的单位半球表面。我们用dl表示l周围的微分立体角

        为简洁起见,我们将省略Li()Lo()中的表面点p,反射率方程则为:

假设

则有:

        BRDF只在光线和视图方向都在表面以上的情况才有意义。 但是在曲面下的视图方向呢?换句话说,在点积n·v为负的情况下? 理论上,这种情况永远不会发生。 但在实际应用中可能会出现这种情况。 通过将n·v钳制到0或使用其绝对值,可以避免视图方向在次表面的BRDF,但这两种方法都可能导致伪影。

        物理定律对任何BRDF施加两个约束。第一个约束条件是基于赫尔姆霍兹互反律,即输入和输出角度可切换,函数值相同:

        在实践中,BRDFs在渲染中经常违反基于赫尔姆霍兹互反律,除非离线渲染算法特别需要互易性,例如双向路径跟踪。

        第二个约束是能量守恒——输出的能量不能大于输入的能量(不包括发光的表面,这是一种特殊情况)。离线渲染算法例如路径追踪要求能量守恒,确保收敛。 对于实时渲染,精确的能量守恒是不必要的,但是近似的能量守恒是重要的。用BRDF渲染的表面如果太亮,明显违背了能量守恒,看起来不现实。

         定向半球反射率(directional-hemispherical reflectance)R(l)是与BRDF相关的函数。 它可以用来测量BRDF的节能程度。 尽管它的名字有些令人生畏,但定向半球反射率是一个简单的概念。 它测量的是来自某个方向的光的反射量,半球表面法线周围的任何一个出射方向的数量。本质上,它测量的是给定输入方向的能量损失。该函数的输入是输入方向向量l,定义如下:

        类似,但在某种意义上功能相反,半球定向反射率(hemispherical-directional reflectance)R(v)的定义为:

如果BRDF是倒数的,则定向半球反射率和半球定向反射率相等,可以用相同的函数来计算。定向反射率(directional albedo)在这两种反射率互换使用的情况下可以作为一个综合术语。

       由于能量守恒,定向半球反射率R(l)的值必须始终在[0,1]范围内。反射值为0表示入射光全部被吸收或以其他方式损失。如果所有的光都被反射,反射率将是1。在大多数情况下,它会在这两个值之间。与BRDF一样,R(l)的值也随着波长的变化而变化,因此出于渲染的目的,它用一个RGB向量表示。由于每个组件(红色、绿色和蓝色)都被限制在[0,1]范围内,因此可以将R(l)的值看作一个简单的颜色值。 注意,此限制不适用于BRDF的值。作为一个分布函数,如果描述的分布高度不均匀,BRDF可以在某些方向上具有任意高的值。BRDF节能的要求是R(l)对于所有l的可能值都必须不大于1。

        尽管它很简单, Lambertian BRDF经常在实时绘制来表示局部次表面散射 (虽然它正在被更精确的模型所取代)。 Lambertian曲面的定向半球反射率也是一个常数。 f(l,v)为一个常数值时,对方程9.8的求值,得到了作为BRDF函数的定向半球反射率:

 Lambertian BRDF的恒定的反射率值传通常称为漫射颜色(diffuse color) Cdiff 或反射率(albedo) ρ。 在这一章中,为了强调与次表面散射的联系,我们将把这个量称为次表面反射率ρss。

因子1 /π是由于一个余弦因子在半球的积分值是π。因此这个因子经常出现在BRDFs中。

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

图 9.18  BRDFs的例子。每个图形右侧的绿色实线是入射光方向,绿色虚线和白色线为理想的反射方向。在上面一行中,左边的图是Lambertian BRDF(一个简单的半球)。中间图是在Lambertian BRDF的基础上添加了Blinn-Phong高光。右边的图展示的是Cook-Torrance BRDF。注意高光在反射方向不是最强的。在底部一行中,左图展示了Ward的各向异性模型的一个特写。 在这种情况下,镜面波瓣是倾斜的。中间的图展示了Hapke/Lommel-Seeliger “lunar surface” BRDF,具有较强的后向反射。右图是Lommel-Seeliger散射,即灰尘表面将光散射到掠射角。

9.4 光照(Illumination)

        反射率方程(方程9.4)中的Li(l)项表示从场景的其他部分射向着色表面点的光。全局光照算法通过模拟光在整个场景中的传播和反射来计算Li(l)。这些算法使用渲染方程(rendering equation),其中反射方程是一个特例。在局部光照算法中,给出算Li(l),并不需要计算。

       虽然时间和平行光是非物理抽象,但它们近似为物理光源。这样的推导是非常重要的,因为我们可以将这些光线合并到一个基于物理的渲染框架中,并且确信我们理解了其中的错误。

       取一个小的遥远的区域光,定义lc为指向其中心的向量。定义光的颜色Clight,即白色Lambertian表面朝向光的反射亮度(n = lc)。这是一个直观的对创作,因为光的颜色直接对应于它的视觉效果。

       有了这些定义,平行光可以看作为将区域光的大小缩小到零的极限情况,同时保持Clight的值。在这种情况下,反射率方程(方程9.4)中的积分被简化为一个单个的BRDF计算,大大降低了计算成本:

点积(n·l)通常被钳制为零,有:

注意第1.2节中介绍的x+符号,它表示负值被钳制为零。

        精准光源也可以同样处理。唯一的区别是,区域光不需要是远距离的,而Clight会随着距离平方反比而衰减,如公式5.11所示。在多个光源情况下,对公式9.12进行多次计算,计算结果求和:

       方程9.14的因子π抵消了BRDFs(如公式9.11)经常出现的因子1/π。这个抵消操作将除法操作移出了着色器,并使着色方程更易于阅读。然而,在将学术论文中的BRDFs应用于实时着色方程时,必须小心谨慎。通常,BRDF在使用前需要乘以π。

9.5 菲涅尔反射率(Fresnel Reflectance)

        物体的表面是周围介质(通常是空气)和物体材质之间的交界面。光与两种物质之间的平面的相互作用遵循由Augustin-Jean Fresnel提出的菲涅耳方程(Fresnel Equations)。菲涅耳方程要求平面界面遵循几何光学的假设。换句话说,表面被假定在1个波长和100个波长之间没有任何不规则的大小。比这个范围小的不规则大小对光线没有影响,比这个范围大的不规则大小也对光线无影响。 较大的不规则能有效地倾斜物体宏观表面,但不影响其局部平坦性。

        入射在平面上的光分为反射部分和折射部分。反射光的方向(由矢量ri表示)与表面法线的角度和表面法线n与入射光方向l相同的角度(θi)。我可以用n和l计算出反射向量ri:

如图9.19所示。 反射的光量(只有入射光线的一部分)可以由菲涅耳反射率(Fresnel reflectance)F表示,F取决于入射角θi。

.

图 9.19  在平面上的反射。光向量l在法线n周围发生反射,从而产生ri。首先,l投影到n上,我们得到了法线的一个缩放版本:(n·l)n。然后我们对l求负,加上两倍的投影向量得到反射向量。

        如第9.1.3节所述,反射和折射受平面两侧两种物质的反射指数影响。我们将继续使用9.1.3中用到的符号。数值n1为入射光和反射光传播的“界面上部分”的折射率,数值n2为折射光传播的“界面下”物质的折射率。

        菲涅耳方程描述的是F对θ,n1, n2的依赖。我们将描述这些方程的重要特征,而不是介绍它们本身,它们有些复杂。

9.5.1 外反射(External Reflection)

        外反射(External reflection)是指n1<n2。换句话说, 光线来源于折射率较低的那一面。通常,这一面是空气,折射率约为1.003。为了简单起见,我们假设n1 = 1。相反的转变,从物体到空气,被称为内部反射(internal reflection),稍后将在9.5.3节中讨论。

        对于一个给定的物质,菲涅耳方程可以理解为一个反射率函数F(θi),只依赖了入射光角度。原则上,F(θi)的值在可见光谱是连续变化的。出于渲染目的,它的值被当作一个RGB向量。函数F(θi)有以下特征:

        · 当θi = 0°,光线垂直于表面(l = n),F(θi)的值F0可以被认为是物质的特有的反射颜色。θi = 0°这种情况被称为法线入射(normal incidence)。

        · 随着θi的增加,光线射向表面的掠射角逐渐增加,F(θi)的贡献就会越明显,在θi= 90◦的时候达到1(白色)。

        图9.20展示了几种物质的F(θi)函数的可视化形式,。曲线是高度非线性的,它们几乎没有改变,直到我θ= 75◦左右,然后快速到1。从F0到1的增长大部分是单调的,尽管一些物质(如图9.20中的铝)在变白之前有轻微的下降。

图 9.20  涅耳反射率F用于三种物质的外反射:玻璃、铜和铝(从左到右)。最上面一行是F作为波长和入射角的函数的三维图。第二行展示的是每个入射角的F的光谱值转换为RGB,并展示了每个颜色通道的单独曲线。由于玻璃的菲涅耳反射率是无色的,所以玻璃的曲线重合。在第三行,R、G和B展示的是入射角的正弦值,解释了图9.21所示的透视收缩。 第三行中的条带使用相同的x轴,以颜色显示RGB值。

       在镜面反射中,出射角或视角的大小和入射角一样。 这意味着入射光线以掠射角到达表面——随着θi接近90°,同样会以掠射角抵达眼睛。 因此,反射率的增加主要体现在物体的边缘。此外,从相机的角度来看,表面反射率增加最强的部分透视收缩了,因此它们占据的像素个数相对较小。为了展示菲涅耳曲线不同部分比例的视觉感受,图9.22展示了菲涅耳反射图和颜色条纹。图9.20的下半部分使用的是Sin(θi)而不是直接对θi。图9.21说明了为什么sin(θi)是一个合适的选择。

图 9.21  斜着远离眼睛的表面是透视收缩的。根据v和n之间夹角的正弦值,投影面上的点的透视收缩是一致的(对于镜面反射来说,这与入射角相同)。因此,在图9.20和图9.22中,菲涅尔反射率与入射角的正弦值相对应。

图 9.22  Schlick的菲涅耳反射率近似值与来自六种物质的外反射的正确值进行比较。上排三种物质和图9.20中一样:玻璃、铜和铝(从左至右)。下排的三种物质分别是铬、铁和锌。每种物质都有一个RGB曲线图,实线表示完整的菲涅耳方程,虚线表示Schlick的近似。每条曲线下面的上面的颜色条展示的是完整菲涅耳方程的结果,而下面的颜色条展示的是Schlick近似的结果。

       从这一点,我们通常会使用符号F(n, l)而不是F(θi)表示菲涅耳函数,为了强调相关的向量。θi是向量n和l的夹角。

       在掠射角处反射率的增加通常在渲染书刊中被称为菲涅尔效应(Fresnel effect,在其他领域,这个术语在无线电波传输中有着不同的含义)。 你可以通过一个简单的实验看到菲涅耳效应。拿起智能手机,坐在一个明亮的区域,比如电脑显示器前。在不开机的情况下,首先将手机贴近胸部,低头看手机,并将手机稍微调整角度,让手机的屏幕反射到显示器上。手机屏幕上应该有一个显示器的相对微弱的反射。这是因为玻璃的法线入射反射率很低。 现在把智能手机举起来,让它大致在你的眼睛和显示器之间,然后再次调整它的屏幕角度来反射显示器。 这时候显示器在手机屏幕上的反射应该几乎和显示器本身一样亮。

        除了它们的复杂性,菲涅耳方程还有其他的特性,这使得在渲染中很难直接使用它们。它们需要在可见光谱上采样折射率值,这些值可能是复数。图9.20中的曲线暗示了一种基于特征的高光颜色f0的简单方法。Schlick给出了菲涅耳反射率的近似值:

这个函数是在白色和F0之间进行RGB插值。尽管很简单,但还是相当准确的。

       当使用Schlick近似时,F0是控制菲涅耳反射率的唯一参数。这很方便,因为F0有一个良好的有效值范围,[0,1],使用标准的颜色选择接口很容易进行设置,还可以使用为颜色设计的纹理格式进行纹理化。此外,F0的参考值可用于许多实际材料中。折射率也可以用来计算F0。它通常假设n1 = 1,对空气折射率的近似值,用n代替n2来表示物体的折射率。这种简化给出了以下方程:

这个方程甚至适用于复数折射率(如金属折射率)。折射率在可见光谱上有显著变化的时候,精确计算F0的RGB值首先要求计算F0需在波长的密集处进行采样,然后使用8.1.3节中描述的方法将得到的光谱向量转换为RGB值。

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

这规定了颜色需要控制在90◦菲涅尔曲线的颜色范围内,“锐度”同样如此。这种更一般的形式的使用通常是为了增加更多的艺术控制,但在某些情况下,它也可以帮助匹配物理现实。正如上面所说的,修改功率可以使某些材质变得更为适合。此外,将F90设置为白色以外的颜色可以帮助匹配菲涅耳方程不能很好描述的材质,比如表面覆盖着细微尘埃和单个波长大小的颗粒。

9.5.2 常用的菲涅尔反射率(Typical Fresnel Reflectance Values)

        就其光学性质而言,物质可分为三大类。有电介质(dielectric),它是绝缘体;金属是导体;半导体,它的性质介于介电介质和金属之间。

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

        日常生活中遇到的大多数材质都是电介质——玻璃、皮肤、木头、头发、皮革、塑料、石头和混凝土等。水也是电介质,但日常生活中人们知道水是导电的,这种导电是由于水中掺杂了各种杂质。电介质的F0值相当低的——通常为0.06或更低。这种低反射率在垂直入射时使得电介质的菲涅尔效应尤其明显。电介质的光学性质在可见光谱上很少有很大的变化,这导致反射值是无色的。几种常用介质的F0值如表9.1所示。这些值是标量,而不是RGB,因为对于这些材质,RGB通道没有显著差异。为了方便起见,表9.1包括线性值和用sRGB传递函数编码的8位值(这种格式通常在纹理渲染应用程序中使用)。

表 9.1  来自各种电介质的外反射的F0值。每个值都给出了一个线性数字、一个纹理值(非线性编码的8位无符号整数)和一个颜色样本。如果给定一个值范围,那么颜色样本就位于该范围的中。回想一下高光色。例如,宝石通常有鲜艳的颜色,但这些颜色是由于物质内部的吸收而产生的,与它们的菲涅耳反射率无关。

       其他电介质的F0值可以从表中类似的物质中推断出来。对于未知电介质,0.04是一个合理的默认值,与大多数常见材质相差不大。

       光一旦进入电介质,就可能被进一步散射或吸收。

金属的菲涅尔反射率(Fresnel Reflectance Values for Metals)

       金属的F0值很高——几乎总是大于或等于0.5。有些金属的光学性质在可见光谱范围内变化很大,从而产生有色反射率值。几种金属的F0值如表9.2所示。

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

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

表 9.2  不同金属(和一种合金)的外反射的F0值,按亮度增加进行排序。黄金的实际红色值稍微超出了sRGB的范围。所有值都是经过钳制后的值。

半导体的菲涅尔反射率(Fresnel Reflectance Values For Semiconductors)

        正如我们所料,半导体的F0值介于最亮的电介质和最暗的金属之间,如表9.3所示。实际中很少需要渲染这些物质,因为大多数渲染场景并没有散落的晶体硅块。在实际应用中,应该避免F0值在0.2和0.45的范围之间,除非您有意尝试一些异域的或者不写实的材质。

表 9.3  表示半导体(晶体硅)与亮电介质(金刚石)和暗金属(钛)的F0值之间的比较。

水的菲涅尔反射率(Fresnel Reflectance Values in Water)

        在讨论外反射率时,我们假设渲染表面被空气包围。如果不是这样呢,反射率就会改变,因为它取决于界面两侧物质的折射率的比值。如果我们不能再假设n1=1,那么我们需要把方程9.17中的n换成对应的折射率之比,n1 / n2。这产生了以下更一般的方程:

最常遇到n1不等于1的情况可能是在渲染水下场景的时候。由于水的折射率大约是空气折射率的1.33倍,所以水下的F0值是不同的。这种效应在电介质中比在金属中更明显,如表9.4所示。

表 9.4  不同物质在空气和水中的F0值的比较。从9.19式可以看出,折射率接近于水的电介质受到的影响最大。相比之下,金属几乎不受影响。

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

       一个常用的参数化组合是:高光颜色F0和漫反射颜色ρss的组合。 这种参数化利用了这样一种观察结果:金属没有漫反射颜色,电介质的F0是一组有限的可能值,它包括一个RGB表面颜色Csurf和一个标量参数m,称为“金属”或“金属度”。“如果m = 1,那么F0设为Csurf,ρss被设置为黑色。如果m = 0,那么F0设置为电介质的值(常数或由一个额外的参数控制),ρss设置为Csurf。

        使用金属度参数化有一些缺点。它不能表示某些类型的材质,例如涂覆了电介质。在金属和电介质的边界处可能会出现瑕疵。

        一些实时应用程序中使用了一个参数化技巧:除了特殊的抗反射涂层外,没有任何材质的F0值低于0.02。这个技巧是用来抑制表面区域的高光,代表空洞或空隙。不是使用一个单独的高光遮蔽纹理,F0值低于0.02被用来“关闭”菲涅尔边缘亮度。该技术首先由Schuler提出,并用于Unreal虚幻和Frostbite冻伤引擎。

9.5.3 内反射

       虽然外反射在渲染中更常见,但内反射有时也很重要。内反射发生在n1>n2时。换句话说,当光在一个透明物体内部传播,并“从内部”遇到该物体的表面时,就会发生内反射。参见图9.23。

图 9.23 内反射发生在n1>n2时的表面处。

        菲涅尔方程是对称的, 在此意义上,入射向量和透射向量可以互换,反射率保持不变。结合斯涅尔定律,这种对称意味着F(θi)内反射曲线将类似于一个“压缩”版本的外反射曲线。 两种情况下F0的值相同,内反射曲线在θc为90◦时达到完美反射。如图9.24所示,从图中还可以看出,在内反射的情况下,平均反射率要高一些。例如,这就是为什么气泡在水下具有更高反光(银色外观)。

图 9.24  玻璃-空气界面处内外反射率曲线的比较。 内部反射曲线在临界角θc处趋于1.0。

        内反射只发生在电介质中,因为金属和半导体能快速吸收在其内部传播的任何光。由于电介质具有实数折射率,由折射率或由F0计算临界角度很简单:

公式9.16所示的Schlick近似对于外反射是正确的。 它也可用于内反射,用θt替代θi。

9.6 微观几何(Microgeometry)

       正如我们在前面的9.1.3节中所讨论的,比一个像素小得多的不规则表面不可能被明确地建模,因此BRDF转而在统计上对它们的聚合效应建模。现在我们继续讨论几何光学领域,假定这些不规则性表面要么小于一个波长(对光的行为没有影响),要么大得多。

       每个可见表面点都包含许多微表面法线,将反射光反射到不同的方向。由于单个微表面的方向是随机的,所以以统计分布建模是有意义的。对于大多数表面,微观几何表面法线的分布是连续的,在宏观表面法线处有一个强烈的峰值。这种分布的“紧密性”是由表面粗糙度决定的。表面越粗糙,微几何法线就越“分散”。

       增加微观粗糙度得到的可见效果要比使用反射的环境细节更加模糊。在越小越明亮的光源下,这种模糊的效果更广泛和高光也更暗。来自粗糙表面的光线会变暗,因为光能被分散到更宽的锥状方向上了。这一现象可以在    图9.12中看到。

       图9.25展示了可视反射率是如何从单个微表面细节的聚合反射产生的。这一系列的图像中,凸起尺度不断减小,直到最后一张图像中的凸起比单个像素都小得多。

图 9.25  从可见的细节逐渐过渡到微观尺度。图像顺序从左上到右下。表面形状和光照是恒定的。只是表面细节的尺度发生了变化。

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

图 9.26  左图是一个各向异性的表面(拉丝金属)。注意反射的方向模糊了。右图是一张类似表面的显微照片。注意细节的方向。

        虽然拥有多个表面法线是微观几何对反射率的主要影响,但其他影响也很重要。阴影(Shadowing)是指光源被微观的表面细节所遮挡,如图9.27左图所示。掩蔽(MsKing),一些面片在摄像机前隐藏了其他的一些面片,如图9.27中间图所示。

        

图 9.27  微观结构的几何效应。左图中,黑色虚线箭头表示一个区域被其他微观几何图形遮蔽形成阴影(Shadowed)(挡住了光线)。在中间图中,红色虚线箭头表示被其他微观几何图形遮挡(Masked,从视图方向遮挡)的区域。右图则展示了光在微观结构间的相互反射。

        如果微观几何高度与表面法线存在相关性,那么阴影(shadowing)和掩蔽(masking)可以有效地改变其法线分布。例如,想象一个表面,凸起的部分被风化或其他过程磨平,而较低的部分仍然粗糙。如果光线是掠射角,较低的部分的表面将被掩蔽或处于阴影中,这使得表面变得光滑。见图9.28。

图 9.28  所示的微观几何高度与表面法线有很强的关联性,其中凸起的区域是光滑的,而较低的区域是粗糙的。在上图中,表面从一个接近宏观表面法线的角度被照亮。从这个角度看,许多入射光线都可以到达这些坑洞,因此许多光线被散射到不同的方向。在下图中,表面从一个斜视角度被照明。大部分凹坑在阴影中,很少有光线照射到凹坑上,大多数光线都是从表面的光滑部分反射出去。在这种情况下,外观的粗糙度很大程度上取决于光照角度。

         到目前为止,我们已经讨论了微观几何对镜面高光反射率,即表面反射率,的影响。在某些情况下,微观表面细节也会影响次表面反射率。如果微观几何不规则性大于次表面散射距离,那么阴影和掩蔽会导致逆反射(retroreflection)效应,光线会优先向入射方向反射。产生这种效果是因为当观察和光照方向有很大差异时,阴影和掩蔽将遮蔽照明区域。见图9.29。逆反射会使粗糙的表面看起来很平。如图9.30所示。

图 9.29  由微观粗糙度引起的逆反射。这两张图都展示了一个粗糙的表面,具有低菲涅耳反射率和高散射反射率,所以次表面反射率这时候在视觉上很重要。在左图中,观看和照明方向是相似的。微几何部分是明亮的,也是最明显的,有一个明亮的外观。右图中,观看和照明方向有很大的不同。在这种情况下,视图中明亮的区域被遮挡,可见区域被遮蔽,导致更暗的外观。

图 9.30 由于微观表面粗糙,两个物体呈现出逆反射行为。

9.7 微表面理论(Microfacet Theory)

        许多BRDF模型都是基于微表面理论(Microfacet theory)的对微观几何的反射系数的数学分析。

        微表面模型的一个重要特性是微表面法线m的统计分布。该统计分布由表面的法线分布函数(normal distribution function,NDF)定义。一些文献使用了术语“distribution of normal”来避免与高斯正态分布混淆。我们在方程中用D(m)来表示NDF。

        NDF D(m)是微表面法线在微几何表面积上的统计分布。对整个球面的微面法线D(m)进行积分就得到了微面面积。更有用的是,积分D(m)(n·m),即D(m)在宏观表面(单位面积)上的投影,如图9.31左图所示。换句话说,即投影D(m)(n·m)被归一化:

针对整个球体进行积分,这里用Θ表示,不像前面讲到的半球积分(用Ω表示)。在实践中,大多数微观结构模型用于图形中是高度场,这意味着 Ω以外的各个方向m的D(m) = 0。然而,方程9.21对非高度场微观结构也是适用的。

         通常,微表面和宏观表面在垂直于任何视图方向v的平面上的投影是相等的:

公式9.21和9.22的点积没有被钳制到0。图9.31右图说明了原因。方程9.21和9.22对函数施加了约束,D(m)必须满足条件才能成为有效的NDF。

图 9.31  微观表面的侧面图。 在左图中,是对D(m)(n·m)的积分,微面区域投影到宏观表面上,得到了宏观表面的面积(长度,在这个侧视图中),按照惯例是1。 在右图中,积分D(m) (v·m),微表面投射到垂直于v的平面上的面积,等于宏观表面投影到这个平面上的投影,是cosθo或(v·n)。当多个微观平面的投影有重叠时,微表面前后两面的投影会相互抵消。

        再看一下图9.31的右图。有许多微表面的投影具有重叠,但最终渲染只关心可见的平面,即重叠区域最靠近摄像机的区域。这一事实提出了另一种方法来将微表面投影的区域集合和宏观表面投影的区域联系起来:可视微表面投影区域的面积总和等于宏观表面的投影区域面积。我们可以通过定义掩蔽函数(masking function)G1(m,v),用数学的方式来表示它:

如图9.32所示。不像公式9.22,公式9.23的点乘需要被钳制到0。微表面的背面是不可见,所以在这个例子中不被计数。G1(m,n)D(m)就是可见法线的分布(distribution of visible normals)。

图 9.32  将可视微表面的投影区域(亮红色)在垂直于v的平面上积分,就得到了宏观表面的投影区域。

        Heitz讨论了Smith masking函数,该函数最初是为高斯正态分布导出的,后来推广到任意NDFs。Heitz指出masking函数中,有两个函数——Smith函数和Torrance-Sparrow “V-cavity”函数——均服从于方程9.23,因此这两个函数在数学上是有效的。 他进一步表明,与Torrance-Sparrow函数,Smith函数更接近于随机微表面的行为。Heitz还证明了Smith masking函数可能是唯一既服从9.23方程又具有法线掩蔽独立性(normal-masking independence)的函数。这意味着G1 (m,v)的值只要m不是背向的,即m·v ≥ 0,则其就不依赖于m的方向。Smith G1函数的形式如下:

其中

每个NDF的Λ(lambda)函数不同。

        Smith masking函数虽然有一些缺陷, 然而,在找到更好的替代方案之前,它是大多数渲染应用程序的最佳选择。

        用微观BRDF Fu(l,u,m),法线分布函数D(m),遮蔽函数G1(m,v)以及宏观 BRDF描述一个微观几何,形式如下:

积分为半球Ω,n为中心法线, 避免从次表面收集光。公式9.26没有使用遮蔽函数G1(m,v),而是使用遮蔽-阴影联合函数(joint masking-shadowing function)G2(l,v,m)。这个函数拓展自G1, 从两个角度(视图向量v和光向量l)可以看到的带有法线m的微表面。 通过G2函数,公式9.26允许BRDF考虑掩蔽和阴影,但不考虑微表面之间的相互反射(见图9.27)。 公式9.26求出的BRDFs都有的一个局限,缺乏微表面相互反射,因此,这样的BRDFs有些太暗了。

         eitz讨论了G2函数的几个版本。最简单的是可分离的形式,其中掩蔽和阴影分别使用G1计算和然后乘在一起:

这种形式相当于假设掩蔽和阴影是不相关的事件。在现实中,其实不是这样的,并且这种假设导致了使用这种G2形式的BRDFs过暗。

        考虑一个极端的例子,假如视角和光的方向相同。在这种情况下,G2应该等于G1,因为所有可见的地方都没有阴影,但是根据公式9.27, G2将等于G1的平方。

        如果微表面是一个高度场,然后每当v与l之间的相对方位角φ等于0◦时,G2(l,v, m)应该等于min(G1(v, m), G1(l, m))。方位角φ见图9.17所示。这提出了一个通用的方法来说明掩蔽和阴影之间的相关性:

其中 λ(φ)是一种随着φ增加,而逐渐从0增加到1的函数。 Ashikhmin等人提出了一个标准偏差为15◦(∼0.26弧度)的高斯分布:

Ginneken等人提出了一种不同的方案:

        不管光线和视角方向的相对对齐,还有一个理由可以说明在一个给定的表面点上,掩蔽和遮蔽是相互关联的。两者都与点相对于表面其余部分的高度有关。对于较低的点,掩蔽的概率增加,阴影的概率也增加。如果使用Smith Masking函数,Smith height-correlated masking-shadowing function可以精确地解释这种相关性:

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

其中函数λ(v, l)可是一个经验函数,公式9.29和9.30中的也是这样。

        在这些选项中,Heitz推荐Smith函数的高度相关形式(公式9.31),因为它与不相关形式的成本相似,且准确性更高。这种形式是在实践中使用最广泛的,尽管一些实践者使用可分离形式(方程9.27)。

        一般的微表面BRDF(公式9.26)并不直接用于渲染。它是用来获得封闭的解(精确或近似),给micro-BRDF Fu定一个具体的选择。

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

        除了少数例外,基于物理的渲染中使用的高光BRDF术语都来自于微表面理论。在镜面反射中,每一个微面都是一个完美光滑的菲尼尔镜面。回想一下,这样的镜面每一束入射的光线都对应一个反射方向。这意味着除非v和l的反射方向平行,每个微表面的micro-BRDF Fu(l, v, m)都为零,也就是对于给定了l和v,微表面法线m和半向量需要对齐,半向量(half vector)h如图9.33所示。

图 9.33  半向量h与光向量和视角向量形成等角(用红色表示)。

        由式(9.26)推导出镜面微表面模型有,对于所有的m≠h时,菲涅尔镜面反射 micro-BRDF Fu(l, v,m)等于0, 因为它把积分分解成在m = h处的积分函数的值。 这样就得到了镜面高光BRDF项;

我们使用公式9.34中的符号fspec来表示它只对表面(镜面)的反射进行建模。在一个完整的BRDF中,它可能会有另外一个项,该项用于次表面(漫反射)着色。为了对方程9.34有一些直观的认识,可以认为只有那些法线与半矢量对齐(m = h)的微表面才能正确地将光线从l反射到v中,见图9.34。因此,反射光的数量取决于法线等于h的微观面的数量。 这个值由D(h)表示,是那些从光和视图方向都可见的微观平面,它等于G2 (l,v,h)。每个微表面反射光的部分,由F(h,l)表示。

图 9.34 表面的微表面形式。只有红色微表面(它们的表面法线和半向量h对齐)对入射光向量l反射到视角向量v有贡献。

        在遮罩阴影函数中使用半向量允许有一个小简化。因为涉及到的角度不可能大于90◦,所以公式9.24,9.31和9.32中的χ+条件可以移除掉。

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

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

        然而,镜面波瓣并不是NDF形状的简单复制。它和高光形状,扭曲的程度或多或少取决于表面曲率和视角。这种变形对于以掠射角观察的平面尤其强烈,如图9.35所示。

图 9.35  左边两张图是用非物理Phong反射模型渲染的。该模型的镜面波瓣围绕反射向量旋转对称。在计算机图形学的早期,经常使用这种BRDFs。中间两张图使用的是基于物理的微面BRDF进行渲染。左上图和中间图展示了一个以掠射角照亮的平面。左上角展示了一个不正确的圆形高亮,而中间显示了微面BRDF上的特征高亮延伸。 中间图的效果与现实相匹配,如右边的照片所示。在下面两张渲染图中展示的球体上,高光形状的差异很小,因为在这种情况下,表面曲率是决定高光形状的主要因素。

各向同性法线分布函数(Isotropic Normal Distribution Functions)

       渲染中使用大多数NDF是各向同性的——关于宏观表面法线n旋转对称。在这种情况下,NDF是一个变量函数——n和微表面法线m。理想情况下,NDF可以写成cosθm的表达式,可以由n和m的点积计算得到。

        Beckmann NDF是光学社区(optics community)在第一个微表面模型中使用的法线分布。今天仍在使用。当然还可以选择使用Cook-Torrance BRDF。Beckmann法线分布形式如下:

其实χ+(n·m)确保了NDF指向宏观表面下方的全部微表面法线的值为0。 这个属性告诉我们,这个NDF,就像我们将在本节讨论的所有其他NDF一样,描述了一个微表面的高度场。αb参数控制表面的粗糙度。它正比于微几何平面的斜率的均方根(Root Mean Square,RMS),所以αb = 0表示一个完美的光滑表面。

       Beckmann NDF是形状不变量(shape-invariant)。正如Heitz定义到的,一个各向同性NDF,如果其粗糙度参数的影响相当于对微表面的缩放(拉伸),那么是形状不变量。形状不变的NDF的形式可以写作:

其实g表示一个任意的单变量函数。对于一个任意的各项同性的NDF, Λ 函数取决于两个变量。第一个是粗糙度α,第二个就是向量(v或l)的入射角度。然而,对于一个性质不变得NDF,Λ 函数值取决于一个变量α:

其中,s表示v或l向量。

       Bechmann NDF的Λ 函数是

公式9.38的成本昂贵,因为它包含erf(误差函数)。因为这个原因,通过用近似表示:

        接下来讨论的是Blinn-Phong NDF。 在过去,它被广泛地应用于计算机图形学中,尽管在最近,它在很大程度上已经被其他NDF所取代。Blinn-Phong NDF仍然在一些计算非常昂贵的情况下使用(例如,在移动硬件上),因为它的计算成本比本节讨论的其他NDF要低。

       Blinn-Phong NDF是基于Phong 着色模型(非基于物理的)的:

αp是Phong NDF的粗糙度参数。值越高表示表面越光滑,值越低表示表面越粗糙。 αp通常是从一个用户操作的参数通过一个非线性映射得到。例如,αp =  m的s次方,其中,s在0到1之间,m是αp的一个上边界。这种映射方法被很多游戏使用了,包括使命召唤:黑色行动,其中m被设置成8192。

       Beckmann和Blinn-Phong粗糙度参数的等效值可以使用α的关系式发现。当参数以这种方式匹配时,两种分布非常接近,特别是对于相对光滑的表面,如图9.36左上图所示。

       GGX分布在电影游戏上广泛应用。GGX分布形式如下:

其中, αg参数控制粗糙度。在迪士尼原则着色模型中,αg = r * r,其中r是用户接口粗糙度值,在0和1之间。

       GGX分布是形状不变的,它的 Λ是相当简单:

Smith G2和GGX结合起来,人们发现:

这个方程为了简洁,使用

       Karis提出了GGX的Smith G1函数的近似形式:

其中s可以用l或v代替。Hammon发现了一种有效的近似

使用了线性插值操作, lerp(x,y,s) = x(1 − s) + ys。

        图9.36中展示了GGX和Becjmann分布的比较,可以看出两者有着根本上不同的形状。GGX拥有窄峰,及围绕这些山峰的更长的“尾巴”。 在图的底部展示的图中,我们可以看到GGX的长尾巴在高光的核心周围形成了一种朦胧或发光的外观。

图 9.36 左上图中,Blinn-Phong(蓝色虚线)分布和Beckmann(绿线)分布值得比较,αb从0.025到0.2(参数关系式为)。右上图中是GGX(红色)和Beckmann(绿色)分布的比较。αb和左上图一样。αg根据眼睛进行了调整更适合高光大小。底图中上排使用的Beckmann NDF,下排使用的是GGX。

         许多真实世界的材质显示出类似的模糊高光,其尾部通常比GGX分布的尾部还要长。如图9.37所示。

图 9.37  来自MEAR数据库的合适铬(chrome)的NDFs。左图,镜面峰值的比较:铬(黑),GGX(红色,αg= 0.006),Beckmann(绿色,αb = 0.013), Blinn-Phong(蓝色虚线,n = 12000)。右图是对应的高光渲染。

         Burley提出了generalized Trowbridge-Reite(GTR) NDF,其目的是为了更好地控制NDF的形状,特别是分布的尾部:

γ参数控制着尾巴的形状。当γ= 2时,GTR和GGX是一样的。γ减小,尾分布变得更长,γ增大,尾分布变得更短。 k(α、γ)是规范化的因素,这里单独给出一个方程:

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

        虽然大多数材质是各向同性表面的,但有些材质的微观结构具有显著的各向异性,明显影响了它们的外观,例如,图9.26。为了准确地渲染这些材质,我们需要BRDFs,尤其是各向异性的NDFs。

        与各向同性NDF不同,各向异性NDF不能仅只是一个θm角度就计算出。需要额外的方向信息。在一般情况下,微表面法线m需要变换到由法线、切线和双切向量n、t和b定义的局部框架或切线空间。在实践中,这种转换通常由三个单独的点积:m·n、m·t和m·b表示。

        在将法线贴图和各向异性BRDFs结合起来时,重要的是要确保法线贴图会对切线向量和双切向量以及法线产生扰动。这一过程通常是通过将修改的Gram-Schmidt过程应用于扰乱法向量n和内插顶点的切向量t0和双切向量b0(以下假设n已经归一化):

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

        对于诸如拉丝金属或卷发等效果,需要对切线方向进行逐像素修改,通常由切线贴图(tangent map)提供。这个贴图是一个存储每像素切线的纹理,类似于法线贴图存储每像素法线。切线贴图通常存储切向量在垂直于法线的平面上的二维投影。这可以和纹理过滤一起工作得很好,可以像法线贴图一样被压缩。有些应用程序存储了一个标量旋转量,用于绕n旋转切向量。虽然这种表现形式更紧凑,它很容易产生纹理滤波的误差。

         创建各向异性NDF的一种常用方法是扩展现有的各向同性NDF。所使用的一般方法可以应用于任何形状不变的各向同性NDF。各向同性形状不变NDFs形式如下:

其中g函数是表示NDF形状的一维函数。各向异性的形式则如下:

其中ax和ay分布表示t方向和b方向上的粗糙度。如果ax = ay,则公式9.50表示的是各向同性。

        除了传入Λ函数的变量a计算不一样,各向异性的G2 遮挡-阴影函数和各向同性一样:

其中,和公式9.37一样,s表示的是v或l。

        用这种方法,各向异性的Beckmann NDF为:

GGX NDF为:

图 9.38  使用各向异性NDFs渲染的球体:上面一行是Beckmann NDF,下面一行是GGX NDF。每一行的ay保持不变,ax从左到右依次递增。

       虽然最直接参数化各向异性NDFs是使用两次各向同性粗糙参数,一次对ax,一次对ay,有时候也使用其他参数。在迪士尼原则着色模型中,各向同性参数r和一个常量参数Kaniso(范围从0到1)一起使用。ax和ay的计算如下:

0.9这个因子限制了宽高比为10:1。

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

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

      正如前面9.7节中提到的,微表面BRDF框架不计算光的多次微表面反射(“反弹”)。这种简化导致一些能量损失和表面过度暗化,特别是对粗糙金属。

       Imageworks提出了给BRDF添加一个项来模拟光线在表面的多次反射:

其中RsF1是fsF1(F0设置为1的高光BRDF项)的直接反射率(directional albedo)。 RsF1函数取决于粗糙度α和高度角θ。 它是相对平滑的,因此可以预先进行数值计算(使用公式9.8或9.9),并存储在一个小的二维纹理中。Imageworks发现32×32分辨率就足够了。       

这个函数是RsF1在半球上的cosine-weighted平均值。 它只取决于α,所以它可以存储在一个一维的纹理中,或者一个廉价的曲线中。由于RsF1是关于n的旋转对称的,可以用一维积分来计算。我们也用变量µ替换µ= cosθ(见方程9.6)。

        

菲尼尔项也可以用同样的方式计算。

       Imageworks给公式9.58提供了一个近似方案,使用Schlick形式(9.18):

如果使用原始的Schlick近似(方程9.16),则为:

       在各向异性的情况下,为了计算fms,Imageworks使用了一个ax和ay之间的中间粗糙度。这种近似避免了增加RsF1查找表的维数,并且它所引入的误差很小。

        图9.39 展示了Imageworks多次反弹高光项的效果。 

图 9.39 在所有行中,表面的粗糙度从左到右增加。最上面的两行是黄金材质。第一行是在没有Imageworks多次反射项的情况下渲染的,而第二行是使用了多次反射项渲染的。最明显的区别是粗糙的球体。接下来的两行是黑色的绝缘体材质。第三行没有使用多次反射项,第4行应用了多次反射项。这里的差别比较微妙,因为镜面反射要低得多。

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

         在上一节中,我们讨论了表面或镜面高光、反射。在这一节中,我们将讨论问题的另一面,即在表面下折射的光会发生什么变化。正如我们在9.1.4节中所讨论的,这种光经历了一些散射和吸收,并且它的一部分被重新发射出原表面。在这里,我们将重点讨论用于不透明电介质中的局部次表面散射或漫射表面响应的BRDF模型。金属是无关紧要的,因为它们没有任何重要的地下光相互作用。透明的或有全局次表面散射的电介质将会在第14章介绍。

9.9.1 次表面的反射率(Subsurface Albedo)

        次表面反射率ρss是光线进入不透明的电介质的能量和逃出表面的光的能量的比。ρss的值在0(所有的光线被吸收)和1(没有光被吸收)之间,并基于波长,所以ρss被建模为一个渲染的RGB向量。在一些文章中,ρss通常被称为表面的漫射颜色,就像法线入射(normal-incidence)的菲涅耳反射F0通常称为高光颜色。

        次表面反射率可以被认为是吸收和散射之间的“竞赛”的结果——光在有机会散射出去之前会被吸收吗?这就是为什么液体上的泡沫比液体本身要亮得多。泡沫的形成过程并没有改变液体的吸收率,但是大量的气体-液体界面(air-liquid interfaces)的加入大大增加了散射量。这导致大多数入射的光线在被吸收之前就被散射,结果得到了一个高的次表面反射率和明亮的外观。 雪花与空气之间的界面有相当大的散射,但吸收很小,导致整个可见光谱的次表面反射率为0.8或更多。白色涂料稍微少一些,大约0.7。在日常生活中遇到的许多物质,如混凝土、石头和土壤,平均在0.15到0.4之间。煤是一种次表面反射率极低的物质,接近0.0。

        许多材质在潮湿时会变暗,这个过程与液态泡沫的例子相反。如果这种材质是多孔的,水就能渗透进以前充满空气的空间。介质材料的折射率更接近于水而不是空气。这种相对折射率的降低同时也降低了光在材质内的散射,这样光在逃出材质之前传播的距离变得更长。这种变化使得更多的光被吸收,次表面反射率就变暗了。

        有一个常见的误解(甚至在著名材料作者的指南中),那就是ρss的值永远不会低于一个下限约0.015-0.03(在8位非线性sRGB编码中为30-50)。然而,这个下限是基于颜色测量,包括表面(高光)和次表面(漫反射)反射率,因此过高。实际的材质可以有更低的值。

        为了获得ρss在现实世界的表面中准确的值或纹理,把镜面高光分离开来很重要。这种提取可以通过仔细使用受控光源和偏振滤光器来完成。为了获得准确的颜色,还应该进行校准。

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

        一些BRDF模型的局部次表面散射考虑到了表面粗糙度——通常通过使用微表面理论与漫反射 micro-BRDF fu——当然有一些没有考虑。使用哪种类型的模型的决定因素不是简单认为表面有多粗糙,尽管这是一个常见的误解。正确的决定因素和表面不规则性与次表面散射距离的相对大小有关。

        从图9.40可以看出。如果微观几何不规则性大于次表面散射距离(左上图),那么次表面散射将表现出与微观几何相关的效应,如逆反射(图9.29)。对于这样的表面,应该使用粗糙表面漫反射模型。正如上面提到的,这些模型通常基于微表面理论,对每个微表面,次表面散射是局部的,这样只会影响micro-BRDF fu。

        如果次表面散射距离都要大于不规则性(图9.40右上图),那么表面可以认为是一个平坦表面,像逆反射这种效应是不会发生的。次表面散射对微表面来说不是局部的,不能通过微表面理论来建模。在这种情况下,应该使用光滑表面的漫反射模型。

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

        在中间情况下,表面的粗糙度比散射距离或大或小,那么应该使用粗糙表面漫射模型,但有效表面(effective surface)只包括比散射距离大的不规则面。漫反射和镜面反射都可以用微表面理论来建模,但它们的粗糙度值不同。高光项将使用基于实际表面的粗糙度的值,而漫射项将使用基于有效表面粗糙度的一个较低的值。

         观察范围也与此相关,因为它决定了“微观几何”。例如,月球经常被引用作为一个例子,因为它表现出显著的逆反射,这时应该使用粗糙表面漫反射模型。当我们从地球上观察月球时,观察的范围如此之大,以至于一块五英尺高的巨石都是“微观几何”。因此,我们观察到粗糙表面的漫反射效应,如逆反射,并不令人惊讶。

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

       光滑表面次表面模型适用于表面不规则性小于次表面散射距离的材质建模。在这种材质中漫射着色不直接受表面粗糙度的影响,如果漫反射和高光项是耦合的,那么表面粗糙度可能会间接影响漫反射着色。

       正如在9.3节中介绍到的,实时渲染应用通常使用Lambertian项对局部次表面散射进行建模。这种情况下漫反射项为:

Lambertian模型没有考虑到表面反射光不能用于次表面散射。为了改进这个模型,应该在表面反射项(镜面高光)和次表面反射项(漫反射)之间进行能量权衡。菲涅尔效应意味着这surface-subsurface能量平衡与入射光角度θi变化有关。随着入射角度的增大,漫反射减少高光反射增加。解释这种平衡的一个基本方法是把漫反射项乘以1减去高光反射项的菲涅尔部分。如果高光项类似于一个平坦的镜子,那么漫反射项结果如下:

如果高光项是微表面BRDF项,那么结果为:

方程9.62和9.63的结果是出射光是均匀分布的,因为BRDF值不依赖于出射方向v,这一行为是有道理的,因为光在重新发射之前通常会经历多次散射事件,所以其出射方向将是随机的。然而,有两个原因怀疑出射光不是完全均匀分布的。首先,由于方程9.62中的扩散BRDF项随入射方向变化,Helmholtz互反律意味着它也必须随入射方向变化。第二,光线在射出时必须经过折射,这将对射出的光线施加一定的方向性。

        Shirley等人提出了一个权衡了菲尼尔效应和次表面反射的漫反射项,同时支持能量守恒和Helmholtz互反律。推导假设菲涅尔反射率采用Schlick近似(公式9.16):

公式9.64只适用于镜面高光反射率为完美菲涅尔镜的表面。有一个广义的版本 Kelemen-Szirmay-Kalos:

 

其中 , Rspec是高光项的定向反射率(9.3节),是其在半球上的余弦加权平均值。Rspec值可以使用公式9.8或9.9预先计算并存储在查找表中。平均值的计算方法与我们前面遇到的类似平均值相同:(方程9.57)。

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

图 9.41  第一行和第三行展示的是添加了朗伯项的镜面高光项。第二行和第四行展示的是Kelemen-Szirmay-Kalos耦合漫反射项相同的高光项。最上面的两行粗糙度值比最下面的两行要低。在每一行中,粗糙度从左到右递增。

        如果BRDF使用Schlick Fresnel近似,并且不包含多次弹射反射项,那么可以将F0的值从积分中提出来。这样做允许我们使用一个二维表来表示Rspec,在每个条目中存储两个量,而不是像Karis所讨论的三维表。 另外,Lazarov提出了一个符合Rspec的解析函数,类似地从积分中提取F0来简化拟合函数。

        Karis和Lazarov都将高光定向反射率Rspec用于不同的目的,与基于图像的光照相关。关于该技术的更多细节可以在第10.5.2节中找到。如果这两种技术在同一个应用程序中实现,那么可以对这两种技术使用相同的表查找,从而提高效率。

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

         作为迪士尼原则材质模型的一部分,Burley包含了一个漫反射BRDF项,包含有粗糙度效果和匹配测量材质:

其中

α是高光粗糙度。在各向异性条件下,使用αx和αy之间得一个中间值,这个方程通常被称为迪士尼漫反射模型(Disney diffuse model)。

        次表面项fss源自于Hanrahan-Krueger BRDF,其目的是作为对远距离物体的全局次表面散射的廉价替代品。用户通过控制参数kss来控制fss和fd粗糙漫反射项的混合。

       由于迪斯尼漫反射模型使用和镜面高光BRDF项一样的粗糙度,因此对某些材质的建模可能会有困难。如图9.40。然而,这将是一个微不足道的修改,即使用一个单独的漫反射粗糙度值。

       使用与Gotanda相同的NDF、masking-shadowing函数和micro-BRDF,Hammon数值模拟了BRDF,包括相互反射。他指出,相互反射对于这种微表面结构非常重要,它占了粗糙表面总反射率的一半。然而,第二次弹跳包含了几乎所有丢失的能量,所以Hammon使用了两次弹跳模拟。另外,可能是因为相互反射的加入使数据变得平滑,Hammon能够得到一个相当真实的仿真结果:

其中

αg是GGX高光粗糙度。为了清晰起见,这里的术语与Hammon的介绍略有不同。注意,fsmooth方程的耦合漫反射BRDF来自公式9.64但没有ρss /π因子,因为这已经在公式9.68乘过了。Hammon讨论了“混合”BRDFs,使用其他光滑表面的BRDFs代替fsmooth,以提高性能或改进与在旧模型的兼容性。

        总的来说,Hammon的漫反射BRDF成本不高,而且是基于可靠的理论原理,尽管他没有与测量数据进行比较。需要注意的是,表面不规则性大于散射距离的假设是推导BRDF的基础,这可能会限制可以精确建模的材质类型。参见图9.40。

        如公式9.61所示的简单的Lambertian项仍然被许多实时渲染应用程序使用。Lambertian项除了低计算成本外,与其他漫反射模型相比,更容易使用间接照明和烘焙照明,而且它与更复杂的模型之间的视觉差异通常是微妙的。 然而,人们对照片级写实的不断追求,促使人们越来越多地使用更精确的模型。

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

       布料往往具有不同于其他类型材质的微观几何结构。根据织物的类型,它可能有高度重复的编织微观结构,圆柱体(线)从表面垂直突出,或两者兼而有之。因此,织物表面的特征外观通常需要专门的着色模型,如各向异性高光、粗糙散射(通过突出的半透明纤维产生的光散射造成的明亮边缘效应),甚至视角方向上颜色变化(由穿过布料的不同颜色的线造成的)。

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

图 9.42  游戏《神秘海域4》的布料系统中使用的材质。左上角的球有一个标准的BRDF与GGX 微表面高光和Lambertian 漫反射。上排中间球体采用了面料BRDF。其他每个球体都添加了不同类型的逐像素变化,从左到右,从上到下分别是:织物编织细节、织物老化、不完美的细节和小皱纹。

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

       在《神秘海域2》中,布料表面使用下面的漫反射BRDF项:

其中Krim,Kinner,Kdiff分别表示控制边缘光线,前向(内部)表面的光线以及Lambertian 项的比例因子。arim和ainner分别是衰减因子。 这种模型是非物理的,因为有几个与视图相关的效果,但没有一个依赖于光方向。

       相比之下,《神秘海域4》中的布料使用了微表面或微圆柱体模型,具体取决于布料的高光类型和经验的次表面散射近似漫反射项:

其中,表示模型受光照影响也受BRDF影响。 箭头右侧的项替换左侧的项。用户指定的参数Cscatter是一种散射颜色,w(范围为[0,1])照明宽度。

        对于布料模型,迪斯尼使用了他们的漫反射BRDF项(9.9.4节),并在模型的粗糙散射中增加了一个光泽度:

其中Ksheen是一个用户参数,用来调节光泽度的强度。光泽度颜色Csheen由白色和ρss混合得到。

9.10.2 微表面布料模型(Mircofacet Cloth Models)

        在游戏《The Order:1886》中,布料BRDF结合了修改了的微表面BRDF和一般形式上的天鹅绒NDF。天鹅绒NDF一般形式如下:

其中a控制反向的高斯宽度,Kamp控制振幅。

        完整的布料BRDF为:

        Imageworks使用了一种不同的反向的NDF来表示光泽度,可以被添加到任何BRDF中:

尽管对于这个NDF, Smith masking-shadowing函数没有封闭形式的解,但是Imageworks使用解析函数来找到近似数值解。Estevez和Kulla讨论了masking-shadowing函数的细节和光泽项与其他BRDF之间的能量守恒。有关使用Imageworks sheen项的一些示例,请见图9.43。

图 9.43  在一个红色漫反射项中添加Imageworks光泽项。从左到右光泽粗糙度分布为0.15,0.25,0.40,0.65和1.0。

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

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

        用于布料的微圆柱模型与用于头发的微圆柱模型非常相似,因此第14.7.2节中关于头发模型的讨论可以提供额外的信息。 在这些模型的背后思想是假设表面被一根一维的线覆盖。 Kajiya和Kay开发了一个简单的BRDF模型,Banks为这提供了坚实的理论基础。所以它也被称为Kajiya-Kay BRDF或Banks BRDF。这个概念是基于这样一种观察,即由一维线组成的曲面在任何给定的位置上都有无穷多个法线,由垂直于该位置的切向量t的法线平面(normal plane)来定义。虽然许多新的微圆柱模型从这个框架开发出来,但是由于它的简单性,Kajiya-Kay模型仍然有一些用途。例如,在游戏《Uncharted 4》,Kajiya-Kay BRDF被用来表示丝绸和天鹅绒等闪亮面料的高光项。

        梦工厂(Dreamworks)使用相对简单和艺术家可控的微圆柱体模型。纹理可以用来改变粗糙度,颜色,和线的方向,对天鹅绒和类似的织物的建模,这可以指出表面的平面。可以设置不同的参数,以模拟复杂的变色织物,如闪光丝。经过归一化后是一种节能模型。

        Sadeghi等人提出了一种基于织物样品测量的微圆柱体模型。该模型还考虑了布线之间的屏蔽和阴影。

        在一些情况下,实际的头发BSDF模型(第14.7节)也可以用于布。Wu和Yuksel在实时布料渲染系统中实现的模型之一就来自迪斯尼动画电影中使用的头发模型。

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

        我们在前几节中讨论的模型依赖于几何光度学,它把光看作是射线而不是波。几何光学是基于这样的假设:任何表面的不规则性要么小于一个波长,要么大于大约100个波长。       

       现实世界的表面就没有那么简单。它们在所有尺度上都趋于不规则,包括1-100波长范围。我们使用纳米几何(nanogeometry)这样的不规则形状来区分它们和前面讨论过的微观几何不规则形状。纳米几何对反射率的影响不能用几何光学来模拟。这些效应取决于光的波动特性和波动光学(也称为物理光学)。

        厚度接近于光波长的表层或薄膜也会产生与光的波动性质有关的光学现象。

        在这一节中,涉及到波动光学现象,如衍射和薄膜干涉。

9.11.1 衍射模型(Diffraction Models)

        纳米几何会导致一个现象称为衍射。为了解释它我们需要用到惠更斯-菲涅尔(Huggens-Fresnel)原则,波阵面(wavefront)上的每一个点(波相位相同的点集)都可以被当作新的球形波的来源。如图9.44所示。 当波遇到障碍物时,惠更斯-菲涅耳原理表明它们会在转角处轻微弯曲,这就是衍射的一个例子。这种现象不能用几何光学来预测。在光入射到一个平面的情况下,几何光学能够正确地预测光将在一个单一的方向上反射。惠更斯-菲涅尔原理提供了额外的见解。 它表明,表面上的球面波恰好排成一条直线,形成反射波阵面,而其他方向的波则通过相消干涉而被消除。当我们观察具有纳米不规则性的表面时,这种见解变得非常重要。由于表面点的高度不同,表面上的球面波不再那么整齐地排列。如图9.45。

图 9.44  在左边图中,我们看到一个平面波阵面在真空中传播。如果波阵面的每一点都被当作一种新的球形波的来源,新的波会在除正向外的所有方向上相互干扰,再次形成平面波阵面。在中间图中,波遇到了一个障碍。在障碍物边缘处的球形波在其右侧没有与之发生消极干扰的波,因此有些波在障碍物边缘发生了衍射或“泄漏(leak)”。在右边图中,一个平面波阵面从一个平面发生反射。 平面波阵面与左边表面点的接触比右边更早,因此从左边表面点发出的球面波有更多的时间传播,因此也就更大。不同尺寸的球面波阵面沿反射平面波阵面边缘构成相长干涉,并在其他方向发生相消干涉。

 

图 9.45  左图中,我们看到平面波阵面入射到具有粗糙纳米几何结构的表面。在中间图中,我们可以看到根据菲涅尔-惠更斯原理在表面形成的球面波。在右图中,在发生了相长干涉和相消干涉之后,一些产生的波(红色部分)形成了一个平面反射波。剩下的部分(紫色部分)是衍射的,根据波长的不同,不同方向的光传播量也不同。

        如图9.45所示,光线向不同方向散射。它的一部分被反射出来。在反射方向上构成一个平面波阵面。剩下的光以一种依赖于纳米几何结构的方向衍射出来。反射光和衍射光的区分取决于纳米几何凸起的高度,或者更精确地说,取决于高度分布的方差。 衍射光在镜面反射方向上的角扩散取决于与波长相关的纳米几何凸起的宽度。 与直觉相反的是,不规则性越大,传播越小。如果不规则性大于100个光波波长,那么衍射光和反射光之间的夹角就小得可以忽略不计了。不规则性的减小的会导致衍射光的扩散更广,直到不规则性小于一个波长,这时就不会发生衍射。

        周期性纳米几何结构表面的衍射最为明显,因为重复的图案通过相长干涉增强了衍射光,从而产生彩色的彩虹色。这种现象可以在CD和DVD光盘和某些昆虫中观察到。虽然衍射也发生在非周期表面,计算机图形界多年来一直认为影响是轻微的。由于这个原因,除了少数例外,计算机图形学文献多年来大多忽略了衍射。      

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

       薄膜干涉(Thin-film interference)是一种波动光学现象, 从薄电介质层的顶部和底部反射的光路相互干扰。如图9.46所示。

图 9.46  除了主反射外,光还有多种折射、来自薄膜底的反射、从薄膜顶部表面内部反射或通过它的折射。这些路径都是同一波的拷贝,但由于存在较短的相位延迟导致路径长度的不同,因此它们之间存在相互干扰。

        不同波长的光不是相长干涉就是相消干涉,这取决于波长和光程长度差之间的关系。由于光程差随角度的变化而变化,最终的结果是在相长干涉和相消干涉之间的不同波长的转换产生彩虹色的偏移。

        薄膜需要很薄才能产生这种效果的原因与相干长度(coherence length)的概念有关。这个长度是光波的一个副本可以被移动并且仍然与原始波相干涉的最大距离。这个长度与光的带宽(bandwidth)成反比,带宽是光的光谱功率分布(SPD)延伸的波长范围。 激光的相干长度非常长,带宽非常窄。可以是英里,这取决于激光的类型。这种关系是有道理的,因为一个简单的正弦波被许多波长位移后,仍然会与原始波发生相干干涉。如果激光真的是单色的,它将有一个无限的相干长度,但在实践中激光器有一个非零带宽。相反,具有极宽带宽的光将具有混沌波形。 这是有意义的,这样一个波形的副本在它停止与原始波相干干扰之前仅仅只需要被移位一个很短的距离。

        理论上,理想的白光是所有波长的混合物,相干长度为零。然而,对于可见光光学来说,人类视觉系统的带宽(只能在400-700纳米范围内感知光)决定了相干长度,大约是1微米。所以,在大多数情况下,“薄膜有多厚才能不再造成可见干扰?”是“大约1微米”。

        与衍射相似,多年来薄膜干涉被认为是一种特殊的情况,只发生在表面如肥皂泡和油渍。 然而,Akin指出,薄膜干涉确实对许多日常表面提供了微妙的颜色,并提出了如何建模这种效果以增加真实感。如图9.47所示。

图 9.47  一种没有薄膜干涉 (左)和有薄膜干涉(右)的皮革材料。薄膜干涉引起的镜面高光着色增加了图像的真实感。

9.12  多层材质(Layered Materials)

       在现实生活中,材料往往是层层叠加的。一个表面可能覆盖着灰尘、水、冰或雪; 出于装饰或保护的原因,它可能被涂上漆或其他涂层;或者它可能有多个层作为它的基础的一部分 ,如许多生物材料。

       一个最简单的分层案例是一个透明的涂层(清漆层 clear coat),它是一些材料的基底上光滑透明的一层。例如,在粗糙的木材表面上涂上一层光滑的清漆。迪斯尼原则着色模型包括一个透明涂层项,虚幻引擎同样有。

        透明涂层最显著的视觉效果是光在透明层和底层的双重反射。当衬底是金属时,这第二次反射最为显著,因为电介质透明涂层和衬底(金属)之间的折射率差异最大。当衬底为电介质时,其折射率接近于透明涂层的折射率,导致第二次反射相对较弱。这种效果类似于水下材料,见表9.4。

        透明层也可以染色。从物理角度来看,这种着色是吸收的结果。根据Beer-Lambert定律,吸收的光的数量取决于光穿过透明层的路径长度(14.1.2)。这个路径长度取决于视角和光线的角度,以及材料的折射率。更简单的透明层,比如那些在迪士尼原则模型和虚幻引擎中实现的,建模没有这种视图依赖。 其他的则需要这种依赖,比如在PxrSurface材质的实现和以及Imageworks和Dreamworks的着色模型。Imageworks模型进一步允许连接任意数量的不同类型的层。

        通常情况下,不同的层可以有不同的表面法线。一些例子包括流过平坦路面的小溪,凹凸不平土壤表面的光滑冰层,或者覆盖在纸板箱上的皱巴巴的塑料膜。电影行业使用的大多数分层模型都支持每层独立的法线。这种做法在实时应用中并不常见,尽管虚幻引擎的透明涂层实现支持它作为一个可选特性。

        Weidlich和Wilkie提出了一种层状微表面模型,假设层的厚度与微表面的大小相比较小。他们的模型支持任意数量的层,并跟踪从顶层到底层的反射和多次折射。它对于实时的实现来说足够简单,但是没有考虑到层之间的多重切换。Jakob等人提出了一种全面而准确的模拟层状材质的框架,包括多重反射。然不适合实时的实现,系统使用的思想可能对未来的实时技术有参考作用。

        特别值得注意的是,《使命召唤:无限战争》使用了一个分层材质系统。它允许用户合成任意数量的材质层。它支持折射、散射和层间基于路径长度的吸收,以及每层不同的表面法线。 结合高效的实施,特别是游戏能以60HZ进行运行,使得实时材质前所未有的复杂性变得有可能。如图9.48。

图 9.48  展示了《使命召唤:无限战争》多层材质系统的各种特点。该材质模拟了具有扭曲和散射的几何复杂表面,尽管每一面仅由两个三角形构成。

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

       材质混合是将材质的各种属性(例如BRDF参数)结合在一起的过程。例如,为了给带有锈斑的金属板建模,我们可以绘制一个蒙版纹理来控制锈斑的位置,并使用它来混合锈斑和金属的材质属性(高光颜色F0,漫射颜色ρss,和粗糙度α)。每个被混合的材质也可以在空间上变化,参数存储在纹理中。混合可以作为一个预处理来创建一个新的纹理,通常被称为“烘焙(baking)”,或 on the fly in the shader。 虽然表面法线n技术上不是BRDF参数,但它的空间变化对外观来说是非常重要的,所以材质混合通常也包括法线贴图混合。

       材质混合是许多实时渲染应用的关键。例如,游戏《the Order: 1886》就有一个复杂的材质混合系统,允许用户从一个庞大的库中任意地创作材质,并由各种空间蒙版来控制。大多数材质混合都是通过离线预处理完成的,但某些合成操作可以根据需要延迟到运行时。这种运行时处理通常用于环境,为平铺纹理添加独特的变化。流行的材料创作工具Substance Painter和Substance Designer使用类似的方法来合成材质。 

       混合法线贴图需要注意。通常,通过将处理过程视为高度图之间的混合,可以获得良好的结果,因为法线图是从高度图中导出的。在某些情况下,例如在一个基本表面上覆盖一个细节法线贴图时,其他形式的混合也是可取的。

       材质过滤是一个与材质混合密切相关的课题。材质属性通常存储在纹理中,纹理通过GPU双线性过滤和mipmapping等机制进行过滤。然而,这些机制是基于这样一个假设:被过滤的数量(是着色方程的输入)与最终颜色(着色方程的输出)有线性关系。线性同样适用于某些量,但不适用于一般情况。在法线贴图或非线性BRDF参数(例如粗糙度)上使用线性mipmapping方法可以产生瑕疵。 这些瑕疵主要表现为高光走样(闪烁高光),或表面光泽度、亮度随表面与相机距离的变化而发生意外变化。在这两者中,镜面高光走样更为明显;缓和这些瑕疵的技术通常被称为镜面高光反走样技术。现在我们将讨论其中的几种方法。

9.13.1 过滤法线和法线分布(Filtering Normals and Normal Distribution)

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

        想象一个对象的外观,如图9.49左图的圆柱体是如何进行建模的。外观建模总是假定了一定的观察尺度。宏观(大尺度)几何图形被建模为三角形,中观(中尺度)几何图形被建模为纹理,而小于单个像素的微观几何图形通过BRDF建模。

图 9.49 左图的圆柱使用的是原始法线贴图。中间图使用了一个更低分辨率的法线贴图,其中包含平均法线和重正化法线,如图9.50的左下图所示。在右图中圆柱使用同样低分辨率,但是包含符合理想NDF的法线和光泽度,如图9.50的右下图所示。右图更好地表现了原始的外观。当在低分辨率下渲染时,这个表面也不太容易出现走样。

        如果用图9.49中所示的比例,将圆柱体建模为一个平滑的网格(宏观)并用法线贴图(中尺度)表示凸起部分是很合适的。选取了一个固定粗糙度为α的Beckmann NDF来建模微观法线分布。这种组合在这个比例下很好地模拟了圆柱体的外观。但是,当观测尺度改变时会发生什么呢?

        在图9.50中,顶部的黑框图中展示了表面的一小部分,四个法线贴图覆盖了这部分。假设我们渲染表面的尺度是每个法线贴图纹素平均覆盖一个像素。对每个纹素, 法线分布(即分布的平均值)用红色箭头表示,被黑色的Beckmann NDF所包围。法线和NDF隐式指定了底层表面结构,如横截面所示。中间的大隆起是法线贴图的一个凸起,小的摆动是微观表面结构。法线贴图中的每个纹素,结合粗糙度,可以看作是收集了该纹素覆盖的表面区域的法线分布。

图 9.50  图9.49中的部分表面。上面一行展示了法线分布(红色显示的是平均法线)和隐含的微观几何图形。下面一行展示了将四个NDFs平均为一个的三种方法。

        现在假设摄像机已经远离物体,这样一个像素可以覆盖四个法线贴图纹素。在这个分辨率下的表面的理想的表示方法,将会准确地表示在每个像素在所覆盖的表面面积上收集到的所有法线的分布。这种分布可以通过对mipmap顶层的四个纹素的NDFs进行平均得到。图9.50左下角的图展示了理想的法线分布。这个结果,如果用于这个低分辨率下的渲染,将最准确地代表表面的外观。

        图9.50底部中心图展示的是法线平均值、每个分布的平均值和粗糙度平均值组合的结果,其中粗糙度对应于每个分布的宽度。结果有正确的法线平均值(红色部分),但是分布太窄。这个错误将导致表面看起来过于光滑。更糟的是,由于NDF太窄,它会引起走样,有高光闪烁出现。

        我们不能用Beckmann NDF直接表示理想的法线分布。然而,如果我们使用一个粗糙度贴图,Beckmann粗糙度α可以在不同的纹素中变化。想象一下,对于每一个理想的NDF,我们都找到了与它在方向和宽度上最接近的定向Beckmann波瓣。我们将Beckmann波瓣的中心方向存储在法线贴图中,并将其粗糙度值存储在粗糙度贴图中。结果就如图9.50右下图所示。这个NDF更接近理想状态。 与简单的正态平均法相比,这种方法可以更准确地表示圆柱的外观。

        目前讨论的方法集中在高光响应,但法线方差也可以影响漫反射着色。考虑法线方差对n·l项的影响,可以帮助提高漫反射和镜面高光着色的精度,因为两者在反射率积分中都乘以了这个因子。

        方差贴图技术将法线分布作为一个平滑高斯波瓣的近似。如果每个像素都覆盖了成千上万个突起,这是一个合理的近似,它们都可以平滑地平均。然而,在很多情况下,一个像素只能覆盖几百或几千个突起,这可能会导致“闪烁”的外观。一个例子可以在图9.25中看到,这是一系列的图像, 如果你观察这些球体的动画渲染,从一帧到另一帧会出现嘈杂的高光闪烁。

         如果我们要画出这样一个曲面的NDF,它看起来就像图9.51左图所示。当球体动画时,h向量在NDF上移动,跨越明亮和黑暗的区域,这导致了“闪闪发光”的外观。如果我们在这个表面上使用方差贴图技术,它将有效地使用一个平滑的NDF来近似这个NDF,类似于图9.51右边的NDF,这就失去了“闪闪发光”的细节。

图 9.51  左边是一个随机的凹凸不平的表面的一个小区域(一面上的几十个突起)的NDF。在右边是一个大约相同宽度的Beckmann NDF波瓣。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值