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

9.9 BRDF Models for Subsurface Scattering(散射效果的BRDF模型)

在之前的小节中我们学习了表面反射,或者说镜面反射。在本小节中,我们将学习另一方面的问题,也就是进入表面下方的折射光。正如我们在9.1.4(Subsurface Scattering)中学习的,这一类光将发生散射与吸收,其中的一部分将会重新射出物体的表面。我们主要将学习不透明的绝缘体材质的local subsurface scattering(局部表面下方的散射)或者说diffuse surface response(表面漫反射)。我们并不会考虑金属材质,因为金属并不会有太多表面内部的光线交互。那些透明的绝缘体材质或者全局的物体表面下方的散射,我们将在第十四章中学习。

首先,我们将学习漫反射模型,以及漫反射颜色的性质,和现实世界中各类材质所形成的漫反射颜色。之后的几个小节中,我们将解释表面粗糙度对于漫反射着色的影响,以及对于一个给定的材质,使用光滑表面着色模型或者粗糙表面着色模型的标准。最后两个小节中,我们将会学习光滑表面和粗糙表面的着色模型。

9.9.1 表面下方的反射率

不透明绝缘体材质的表面下方的反射率ρss是“逃离”表面的光能量与进入材质内部的光能量的比例。ρss的范围位于0(所有的光都被吸收)与1(没有光被吸收)之间,其取决于波长,所以ρss被模拟为RGB向量用于渲染。ρss通常被作为表面的漫反射颜色,正如以法线作为入射方向的菲涅尔反射率F0通常被作为镜面反射的颜色。表面下方的反射率与我们将在第十四章中学习的散射反射率有着紧密的联系。

由于绝缘体在物体表面所反射的入射光较少,所以通常来说绝缘体的ρss比镜面反射的颜色F0更亮。由于表面下方的反射不同于镜面反射,其将会先在物体内部进行吸收而不像菲涅尔反射直接发生在物体表面,ρss的光谱分布与F0不同,因此它们之间的颜色也会不同。例如,带有颜色的塑料,其由透明的底片与物体内部的着色particle组成。这就造成了,塑料的镜面反射光是没有颜色的,但是被着色particle吸收之后,漫反射的光将带有颜色;例如,红色的塑料球有着白色的镜面反射高亮。

表面下方的反射可以认为是吸收与散射之间“竞争”后的结果——光线在散射出物体之前是否会被吸收呢?这就是为什么液体上的泡沫比液体本身更亮。泡沫本身并不会改变液体对于光线的吸收率,但是空气与液体的交接处将大大增加散射光线。这导致了大多数光线在被吸收之前发生了散射,使得表面下方的反射率更高以及更亮的外观表现。刚下的雪是另一个例子。空气与雪的交接处会发生非常多的散射,很少的吸收,这导致了表面下方的反射率达到了0.8或者更高。白色油漆的表面下方反射率大约为0.7。现实生活中大多数物体,例如混凝土,石头,土,它们的表面下方反射率大多范围在0.15和0.4之间。煤炭的表面下方反射率极低,几乎为0。

大多数材质在湿润时看上去更暗,这就是我们之前提到的液体与气泡例子的反面。如果材质是湿的,那么原本渗透着空气的空间间隙将被水渗透。绝缘体材质的反射率更接近水而不是空气。折射率的降低意味着材质内部的散射也会减少,光在“逃离”物体之间将会产生更多的位移。这最终导致了更多的光被吸收而表面下方的反射变得更暗。

有一个常见的误解,现实世界中的材质的ρss值永远不会低于0.015-0.03(如果是8位非线性sRGB编码,相应为30-50)。但是,这一下限是基于颜色检测包含了表面反射(镜面反射)以及表面下方的反射(漫反射),因此这一下限明显是偏高的。实际上,材质的ρss可能更低。

我们测量ρss时,需要剔除镜面反射。这需要我们控制光照与偏振滤光器来实现。

并不是每一个RGB颜色向量都能代表一个合理的(甚至物理上可实现的)ρss。反射光谱比射出光线的光谱分布更为严格:对于任何波长的光,反射光谱都不能超过1而且十分平滑。这一限制使得所有可实现的ρss的RGB颜色向量都位于一个固定的颜色空间中。即使是相对范围较小的sRGB色域都超过了这一颜色空间。因此,当我们设置ρss时,需要避免超过这一范围,否则颜色将会过饱和或者过亮。除了降低画面的真实性,错误的ρss还会使我们在预计算全局光照时得出过亮的反射。

9.9.2 表面下方散射与粗糙度的范围

有些针对局部表面下方散射的BRDF模型会考虑到表面的粗糙度——也就是使用微面理论下关于漫反射的micro-BRDF fμ。具体使用哪一种模型进行渲染并不只取决于物体表面的粗糙度,而主要的决定因素是表面不规则性的尺寸以及表面下方散射的距离。

如下图所示,如果微观几何面的不规则性大于表面下方的散射距离(左上角的图片),那么表面下方的散射将呈现出与微观几何面相关的效果,例如回射(retroreflection,第六小节最后的示意图)。对于这一类物体表面,我们应该使用粗糙表面的漫反射模型。这一类BRDF模型都是基于微面理论,也就是说表面下方的散射光线只会影响当前微面,因此其只会影响micro-BRDF fμ

如果散射距离都大于微面的不规则性(右上角的图片),那么为了模拟表面下方的散射,我们应该将表面当作平面,而之前提到的回射效应并不会发生。同时,表面下方的散射并不会单单影响局部微面,因此我们无法通过微面理论来模拟散射。此时,我们应该使用光滑表面的漫反射模型。

如果物体表面的不规则性处于上述两种情况之间,表面粗糙度的尺寸,或者说不规则性的尺寸有时大于散射距离有时小于散射距离(底部的图片),那么我们需要使用粗糙表面的漫反射模型,但其只适用于effective surface(有效表面),也就是不规则性的尺寸大于散射距离的表面。镜面反射和漫反射都可以通过微面理论进行模拟,但是它们需要使用各自的粗糙度,漫反射所使用的粗糙度较低,至少需要低于effective surface的粗糙度。

还有一个重要的因素则是我们的观察距离,这一距离也影响着“微观几何面”。例如,渲染月球时通常会使用粗糙表面的漫反射模型。因为当我们从地球观察月球时,月球上的物体与地标特征都将成为“微观几何面”。这也是为什么,月球能够展现出回射效应。

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

首先我们将学习光滑表面的散射模型,其能够用来模拟那些表面不规则性小于散射距离的材质。对于这一类材质,表面粗糙度并不会直接影响漫反射的着色。如果同时使用了漫反射模型与镜面反射模型,那么物体表面的粗糙度可能间接影响漫反射着色。

正如我们在第三小节中学习的,在实时渲染的应用中,一般会使用Lambertian来模拟表面下方的散射。那么漫反射BRDF则为:

Lambertian模型并没有考虑到在表面反射的光线并不能进入表面内部,形成表面下方的散射。为了改善这一漫反射模型,我们需要在表面反射(镜面反射)与表面下方的反射(漫反射)之间达到能量守恒。而我们之前学习的菲涅尔效应意味着这一能量守恒会随着入射光的角度θi改变而改变。随着入射角的倾角增加,漫反射率将会减少,而镜面反射将会增加。最简单的实现这一平衡的方法是在漫反射等式前乘以1减菲涅尔的镜面反射等式。如果镜面反射发生在一个宏观的平面,那么漫反射等式为:

如果镜面反射等式为微面BRDF模型,那么漫反射等式为:

上述两个等式将会导致射出的光线的分布是均匀的,因为BRDF并不会被射出光线的方向v所影响。由于光线射出之前将会散射多次,所以这两个等式有一定的意义。但是,事实上射出的光线的分布并不一定是完全均匀的。首先,第一个漫反射等式将随着入射光线方向的改变而改变,Helmholtz reciprocity(赫尔姆兹互反定律)告诉我们,入射光线方向的改变也会改变射出光线的方向。此外,漫反射光线在射出之前将会经历折射,这也会导致射出光线的方向发生改变。

Shirley提出了一些基于平面的漫反射等式,同时这些等式也证明了菲涅尔效应与表面下方的反射是一种平衡关系,这也意味着这些条件满足能量守恒和Helmholtz reciprocity(赫尔姆兹互反定律)。这些等式都使用了Schlick模拟作为菲涅尔反射率的计算法则:

但是,上述等式只适用于完美的菲涅尔镜面。下列等式则适用于更广的场景计算相应的漫反射:

上述等式中,Rspec表示镜面反射中的方向性反射率(请参考第三小节),而则表示半球范围内的余弦平均值。Rspec可以使用第三小节中R(l)或者R(v)的等式进行预计算并将其存储在列表中。的计算方法则类似于第八小节中的

上述等式类似于第八小节中的multi-bounce surface reflection(多重反弹表面反射)。但是,它们之间有一个非常重要的区别,就是我们没有使用RsF1而是使用Rspec,也就是完整的镜面反射BRDF等式。这也意味着,预计算的表格需要添加额外的“维度”,因为不但粗糙度α与角度θ会影响结果,菲涅尔反射率也会产生影响。

在Imageworks的漫反射等式中,他们使用了一个三维的列表,折射率将作为第三个参数。同时他们发现,在积分中包含多重反弹的表面反射等式能够使得RspecRsF1更平滑,所以一个16×16×16的列表能提供较好的效果。

如果BRDF使用了Schlick模拟菲涅尔等式且不包含多重反弹的镜面反射等式,那么F0的值可以被剔除积分。这么做的话,我们就能使用一个二维的列表存储Rspec,每个元素包含两个变量,而不是一个三维的列表。

Karis与Lazarov将方向性反射率Rspec用在了基于图像的光照。我们将在第十章中学习这一部分内容。如果这两种技术在同一个游戏中应用,那么我们只需要一张列表就能进行遍历。

上述这些着色模型都是基于表面(镜面反射)与表面下方(漫反射)的能量守恒。其他的一些着色模型可能基于物理法则与Subrahmanyan Chandrasekhar所提出的BRDF模型。由于该BRDF模型并不包含折射,其只能用于模拟那些inde-matched surface(折射率相同的表面)。也就是说,表面的两边有着相同的折射率。如果想要模拟non-index-matched surface,BRDF必须考虑进入与离开表面的折射率。

9.9.4 Rough-Surface Subsurface Models(粗糙表面的表面下方散射模型)

作为Disney着色模型的一部分,Burley包含了一个漫反射BRDF等式,其用于体现粗糙度的影响并与特定的材质相匹配:

上述等式中,α表示镜面反射粗糙度。如果NDF为anisotropic,那么我们会使用αx和αy。该等式通常被称为Disney diffuse模型。

表示表面下方散射的等式fss能够用来计算那些距离camera较远的物体的globa subsurface scattering(全局的表面下方散射)。Disney diffuse模型会在fss与粗糙度漫反射等式fd之间通过参数kss进行blend,而该参数由用户,或者说美术进行设置。

Disney diffuse模型被广泛用于电影行业以及游戏行业(一般会去除表面下方的漫反射等式)。完整的Disney diffuse BRDF还包含了sheen term(光泽项),其主要用于模拟布料,但也会用于补偿能量的损失(该BRDF不包含多重反弹的镜面反射等式)。我们将在之后的小节中学习Disney sheen term。

由于Disney diffuse模型使用镜面反射BRDF的粗糙度项,其可能并不能用于模拟某些材质(请参考9.9.2)。不过我们可以修改其等式,并使用一个独立的表示漫反射粗糙度的项。

大多数其他的粗糙表面漫反射BRDF都是基于微面理论,只不过有着不同的NDF D,micro-BRDF fμ,以及masking-shadowing函数G2

留下评论

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