发射,这里新的光将会被从其他形式的能量创建出来(与吸收相反)。这种形式的交互发生在光源上,但是它在着色情景中并不多见,图10展示了交互的三种模式。
多数介质既发生一定程度的散播也会发生一定程度的吸收。每种介质的表象取决于发生散播和吸收的量多少。图11展示了有着不同散射和吸收率组合的介质。
在一个平面边界上的散播( Scattering at a Planar Boundary )
Maxwell的公式可以被用于计算当折射率发生改变时光的行为。但是在大多数的情况下,解析法并非存在。这里有一种特殊情况,其有一种解法,并且它和着色关联非常密切。这种情况发生在一个具有无限大的介于两种不同折射率容积之间的完全平坦的边界上。这是对一个对象表面的很好的表述,一边是空气的折射率,一边是对象的折射率。Maxwell公式在这种特殊情况下被称为菲涅尔公式。 虽然真实对象表面并非无限,但是和可见光波长比较它们可以被看作无限的。因为是‘完全平坦的’,一种质疑的观点就是没有任何对象表面是真正完全平坦的 --- 单个原子都可能会形成微小的‘凹凸’。但是,就像其他所有东西一样,相对于光的波长的大小是有影响的。确实存在某种可能性,让表面在几百纳米的级别范围内可以完全平坦 --- 这样的表面被称为光学平面(optically flat),并且
被典型的用于高质量光学仪器比如望远镜。
在一个具有平面折射率边界的特殊情况下,与在所有可能方向上发生持续的散播不同,光被分割为两个方向 --- 反射和折射(请看图12)。
你可以看到,反射角大小和入射光的入射角度相同,但是折射角度大小是不同的。折射角度取决于介质的折射率[如果你对其中的数学原理感兴趣,参看斯涅尔定律]。反射和折射的比例被菲涅尔公式所描述,并且将在后面章节讨论。
非光学平面的表面( Non-Optically-Flat Surfaces )
当然,绝大多数的真实世界表面并不会抛光到公差达到如望远镜镜面相同精度。对于非光学平面的表面,会发生什么呢。在多数情况下,确实存在尺寸远远大于光的波长,但是又因为太小而不可见或者不可分辨的不规则度[比如,它们小于单个像素或者着色采样点的覆盖面积]。在这种情况下,表面就像是一个有众多微小光学平面表面组成的大集合。表面的表象是许多具有不同表面朝向的点的总计结果 --- 每个点在一个稍微不同的方向上反射入射光[请看图13]。
表面在微观尺度上越粗糙,反射越模糊,因为表面朝向从整个宏观表面朝向上发散更强烈[请看图14]。
对于着色的目的来说,通常以统计学形式对待这种微观几何,并且将表面视为在多个方向上反射[或者折射]光线[请看图15]。
次表面散射( Subsurface Scattering )
对于折射光线发生了什么呢?这取决于对象的组织。金属在可见光谱范围内有着非常高的吸收系数[折射率的虚数部分]。所有折射的光线会被马上吸收掉[被自由电子吸收]。另一方面,非金属[也被称为绝缘体]就像规则参与介质一样,一旦光线在其中折射,发生我们之前章节中所讨论过的吸收和散播的行为。大多数情况下,折射光的一部分被散播足够多以至于从相同表面重新发射出去。图16展示了这两种情况。
在图16的右侧,你可以看到次表面散射光[用蓝色箭头所标识]从表面上的多个不同点发射出去,这些点和光线原本的入射点有着不同的距离。图17展示了这些距离和像素大小之间的关系,这种关系分为两种情况 1. 在左上部分,像素大于‘进入点到出口点’次表面散射距离。这种情况下,‘进入点到出口点’次表面散射距离可以被忽略,并且次表面散射光线可以被假设为在该表面相同点进入和退出,这就允许着色被作为一种完全局部的过程进行处理。 2. 在图17的下面部分,像素小于‘进入点到出口点’距离。这种情况下,每个点的着色都被照射在其他点上的光所影响。为了捕捉这种效果,局部着色并非足够,并且需要使用特殊的渲染技术。这典型的被称为‘次表面散射’技术。但是需要注意的是,\普通的\着色[\是相同物理现象的结果[被折射光的次表面散射]。他们之间唯一的区别是,散射的距离和观察距离相关。这种观察告诉我们,那些通常被考虑为具有‘次表面散射’行为的材质在比较远的距离时[比如,一个远距离角色的皮肤]使用规则的diffuse着色进行处理。另一方面,被视为具有'规则diffuse着色'行为的材质当被非常近距离的观察时会有‘次表面散射’的体现[比如,一个非常近距离的小塑料玩具]。
二、着色中的数学( The Mathematics of Shading )
对电磁辐射的测量[包括可见光]通常被称为 辐射线测定。
有很多辐射物理量可以用来测量表面上的光,方向上的光,等等。我们将只是关心radiance,它被用来量化沿着一条射线的光的强度。我们将使用通常的辐射测量记号L来表示radiance。当着色表面上的一个点时,Li表示进入到表面的radiance,而Lo表示出外的radiance。 Radiance[就像其他的辐射物理量]是一个光谱量---其大小随光波长而改变。理论上,为了表达可见光的radiance,需要保存一个连续的光谱分布。密集光谱采样确实被用于一些特殊的渲染应用中,但是对于所有的产品级[电影和游戏]渲染,RGB三分量[RGB triples]被作为替代而使用。一个关于这些三分量和光谱分布相关的解释可以在很多网站和书籍中找到,包括real-time rendering.
BRDF
通常,我们假设着色可以被局部处理[就像图17右上部分所展示的那样]。这种情况下,一个给定的表面上的点如何回应光的影响只取决于入射[光]方向和出射[视点]方向。这篇文章中,我们会使用v来表示一个单位长度的矢量,该矢量指向出射方向,而用l来表示一个单位长度矢量,该矢量指向入射方向的反向[让所有的矢量都指向离开表面的方向是很方便的]。表面对于光的回应被量化为一个称为BRDF的函数[Bidirectional Re°ectance Distribution Function],我们使用f[l,v]来表示该函数。每个方向[入射和出射]可以使用两个数值[比如,极坐标]来参数化,所以BRDF函数的总的维数为4。在很多情况下,围绕表面法线旋转光入射矢量和视点出射矢量并不会影响BRDF。这种各向同性的BRDFs可以使用3个角度来参数化[请看图18]。实际中上,被用来计算一给定的BRDF的角度的数量通常在1到5个之间变化---一些常用的角度展示在图19中。