观察一下上面的表格,我们不难发现:相比于非金属,金属有着非常高的F[0]值。钢是一种非常暗的金属,它在0度时反射了入射光的百分之50还多。还记得吗,金属没有任何的次表面反射,一种亮的specular颜色和缺乏diffuse颜色是区别金属的视觉特性。另一方面,钻石,一种最亮的非金属物质,在0度时只是反射了入射光的百分之17。而大多数非金属都大大的低于该值。非常少的材质有处于百分之20到40之间的值,这些典型的是半导体和其他奇特的材质,他们不大可能出现在产品级着色中。对于低于百分之2[比如水]的材质也是相同的。事实上,排除金属,宝玉石,和水晶,你在实验室之外可能看到的绝大多数的材质其F[0]值的范围都是很窄的 --- 介于百分之2到百分之5之间。
法线分布项 --- Normal Distribution Term
在多数表面上,微面元的朝向并非均匀的分布着。法线接近宏观表面法线的微面元表现出更高的频率。精确分布通过微面元法线分布函数D[m]来定义。不同于F[ ],D[ ]的值并非限于0到1之间---虽然值必须为非负,它们却可以是非常的大。同样不同于F[ ],函数D[ ]并非光谱的或者RGB值的[not spectral or RGB-valued],它是标量值的[scalar-valued]。在微面元的BRDF项中,D[ ]是针对h方向来计算的,为了确定活动微面元[那些m=h的微面元]的集中度。这就是为什么法线分布项作为D[h]出现在了BRDF公式中。
函数D[ ]决定了specular高光的大小,亮度和形状。几种不同的法线分布函数出现在了图形学文献中,所有的函数都像是Gaussian分布,但带着一些‘粗糙’['roughness']或者变化参数[各向异性函数典型的有两个变化参数]。
当表面的粗糙度减少,围绕整个表面法线n的微面元法线m的集中度增加,而D[m]的值可以非常的高[在限度内,对于一个理想的镜面,这个值在m=n时趋于无限]。Walter et. al.讨论了该分布函数的校正归一化,并且给出了几个实例,更多的例子可以在其他文献中找到。
阴影-遮挡项 --- Shadowing-Masking Term
阴影和遮挡项G[l,v,h]在BRDF文献中也通常被称为几何体项[geometry term]。函数G[l,v,h]表示带有一个给定法线m的微面元会被从光方向l和视线方向v都可见的概率。在微面元BRDF中,m被h所取代[基于与前两个项的相同原因]。因为函数G[ ]代表一种概率,它的值是标量且被限定在0到1之间的范围内。就像D[ ]一样,G[ ]在文献中也有着击中不同的解析表达式。这些是基于表面的简化模型的典型近似。G[ ]函数典型的没有引入任何新的参数到BRDF中,它要么没有参数,要么使用D[ ]函数的粗糙参数。在很多情况下,阴影-遮挡项部分的抵消掉BRDF公式中的[n.l][n.v]分母项,而以诸如max(n.l,n.v)的其他表达式来替代。
阴影-遮挡项对于BRDF的能量守恒原则是必不可少的 --- 没有这样的项,BRDF能够反射比它接受的任意多的光能量。微面元BRDF的一个重要的部分就是活动面积[微面元中将光能量从l方向反射到v方向的联合面积]和整个面积[宏观表面的]的比率。如果阴影和遮挡不被考虑,那么活动面积可能会大大超过总的面积,这是一个会导致BRDF非能量守恒的显然不可能的情况,请看图25。
微面元模型 --- Microfacet Models
对于D[ ]和G[ ]函数的选择是独立的,它们可以被混合起来并且和不同的微面元模型匹配。多数文献提出一种新的微面元BRDF模型都是提出了一种新的D[ ]或者G[ ]函数。一旦D[ ]和G[ ]函数被选择了,那么整个BRDF就通过选择参数值来确定了。微面元BRDFs有着紧凑的参数化,典型的只有1个RGB值[Cspec]和一个标量值[粗糙度],粗糙度值在各向异性BRDFs中为两个。
次表面反射(Diffuse 项) --- Subsurface Reflectance (Diffuse Term)
虽然在文献中有多种次表面局部反射模型,迄今为止被广泛使用的最多的一个模型就是Lambertian BRDF term。Lambertian BRDF实际上是一个常量值,著名的余弦或者[n.l]因子是反射公式中的一部分,而非BRDF公式。 Lambertian BRDF的精确值是
这里Cdiff是光被漫反射的部分。就像Cspec一样,它是一个RBG值,R,G,B都被限定在0到1之间范围内,且非常接近于通常人们所认为的'表面颜色'[surface color].这个参数典型的被作为diffuse color。
非Lambertian漫反射项尝试着在glancing angles处对specular和diffuse项之间进行权衡而建模,或者对表面粗糙度的尺度大于发散距离时的效果进行建模。
三、 实现着色 --- Implementing Shading
在前面的章节中,我们看到了被引入用以描述表面着色的典型数学模型。在这一节中,我们会讨论这些模型在电影和游戏产品渲染器中如何实现。
通用光照 --- General Lighting
在最通常情况下,BRDF必须针对从所有不同方向上入射光进行集成。这不只是包括主要光源[有面积]还包括天光[skylight]和场景中其他对象的精确反射。为了完全解决这些,就需要全局照明算法。这些算法的详细描述超出了这次讲座的范围,更多细节可以在参考文献中找到,也可以在Adam Martinez的讲座---Faster Photorealism in Wonderlnd: Physically-Based Shading and Lighting at Sony Pictures Imageworks 找到。
精确光源 --- Punctual Light Sources
虽然这样非常受限制,但是产品级光照环境通常由一个或者多个精确光源组成。它们是经典的计算机图形点光源,方向光源和聚光光源[更多复杂的变种也被用到了]。因为它们是无限小和无限亮,它们并非物理实现的或者物理真实的,但是他们在很多情况下带给产品合理的结果并且计算起来非常方便。精确光源通过光颜色Clight和光方向矢量Lc来参数化。为了美工的方便性,Clight并不与光强度的一个直接辐射度测量相对应,它被作为一个白色Lambertian表面被光从一个平行于表面法线[Lc=n]的方向照明时所拥有的颜色所确定。就像其他我们所看到的颜色量,Clight是光谱[RGB]值,但是不同于我们之前所看到的,Clight的范围并没有被限制。
精确光源的主要优点在于---它们大大简化了反射公式。我们会定义一个以
Lc为中心点的微小的面光源,该面光源有一个小的角度范围e。该微小面光源照明一个着色的表面点,入射的辐射函数是Ltiny[l].这个入射辐射函数有着以下两个属性---
第1个属性表示,角度超出e范围外的任何光方向都没有光入射进来,换句话说,光源在超出其角度范围e之外不会产生任何光照。
第2个属性则来源于Clight的定义,应用公式1和公式7,并且设置Cdiff = 1。公式9仍然满足这么一个极限,当e逐渐趋于0时 ---
因为Lc = n,并且e ---> 0,我们可以假设(n .l ) = 1, 这样我们就得到:
注意在公式11是独立于Lc的,所以它对于任何合理的光朝向都是为真的,而并非只限于Lc = n。简单的重组将极限中的积分项分离开来,得到 ----
现在我们应用我们的微小面光源到一个通用BRDF,并且当e趋于0的极限时观察其行为 ---
用公式12替换公式13的右侧部分,我们得到最终精确光源公式 ---
和原本的反射公式相比较,我们用一个直接的BRDF计算式取代了积分式,这样计算起来非常简单。注意,在点积(n.Lc)下的横线,这是钳制到0的表示法。点积被钳制,以处理在表面之后的精确光源,这些光源的贡献应该为0(而不应该是负值贡献)。
在平行光源(比如太阳光)的情况,Lc和Clight在整个场景中都是常量。在其精确光源类型比如点光源和聚光光源的情况下,两者都可能发生改变。在现实中,Clight会以与距离平方的倒数成正比例产生衰减,但是事实上其他的衰减函数常常被使用。
如果多个精确光源照明某个表面,公式14被多次计算,然后计算的结果进
行累加。精确光源(Punctual light sources)很少单独的使用,因为如果只是单独的使用它们,那么从其他方向而来的任何照明的不足是明显易见的,特别是高度specular的表面。因为这样,精确光源典型的与一些类型的环境色或者环境光照结合使用,这些类型的光照会在后面提及。
环境光照 --- Ambient Lighting
这里我们定义环境光照为一些低频光照的数值表示,从单个常量值的光颜色和在所有入射方向上的强度,到更为复杂的表示比如spherical harmonics (SH)。通常,这些类型的光照环境只是应用于diffuse的BRDF项,更加高频的基于图像的光照(image-based lighting)被应用于specular项。但是,将环境光照环境应用于specular的BRDF项是有可能的。本课程中,Yoshiharu Gotanda的讲座---Practical Implementation of Physically-Based Shading Models at tri-Ace给出一种常量和SH环境光的specular实现,Bungie最近一篇文章中讨论了将Cook-Torrance specular项应用于SH光照,ShaderX7中Sch?uler 的一篇文章描述了一种基于物理使用半球光照(hemispherical Lighting)的specular项的实现方法。
基于图像的光照 --- Image-Based Lighting
基于图像的光照典型的以环境图来完成。这些图表示远处的光照。如果他们在一个合适的参考点进行采样(比如,以一个对象的中心点),它们可以是一种反射远处对象的很好的表示方法。如果想通过使用一种通用的BRDF和一张环境图正确的处理局部着色,则需要更多的采样点。重要点采样(Importance sampling)帮助我们将采样的数量保持在一个可管理的范围(至少对于电影渲染如此)。另外有一种可以使用的方法,要么单独使用它(一种近似的解决方法,但是适合于游戏),或者结合重要点采样(Importance sampling),就是预过滤的环境图。关于重要点采样(Importance sampling)的更多信息可以在本年度的另一个课程中找到,同样可以在本课程中的Adam Martinez的讲座中找到。其他应用于电影产品中的基于图像光照的方面知识会在本课程中Ben Snow的讲座 ---- Terminators and Iron Men: Image-Based Lighting and Physical Shading at ILM中进行讨论,一些关于游戏中使用环境图进行着色的方面在Naty Hoffman的另一篇讲座--- Crafting Physically Motivated Shading Models for Game Development会进行讨论。
四、 延伸阅读(Further Reading)
\Rendering\第三版中的第7章提供了一个关于基于物理着色模型的综览,比本课程中介绍得更加深入。如果想更深入的了解,可以考虑阅读Glassner的Principles of Digital Image Synthesis,或者Dorsey, Rushmeier, and Sillion编著的Digital Modeling of Material Appearance。
Dutre的免费在线的Global Illumination Compendium是关于BRDFs、辐射度
数学、和其他知识的有用的参考。
五、 鸣谢(Acknowledgments)
作者想要感谢A K Peters允许使用Real-Time Rendering, 3rd edition书中的图片,并且同样感谢Paul Edelstein, Yoshiharu Gotanda 和Dimitar Lazarov在基于物理着色模型方面所激发出的很多想法。