转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=516

上一篇“游戏中基于物理的渲染(二)”中介绍了光照的推导,本篇将讲解基于物理的BRDF。

Microfacet BRDF

大多数基于物理的specular BRDF的基础是microfacet理论。这个理论是用来描述来自于一般表面(不是光学平滑的)的反射。Microfacet理论的基本假设是,表面是由很多微平面(microfacet)组成,这些微平面都太小了,没有办法一个一个地看到;并假设每个microfacet都是光学平滑的。

每个microfacet把一个入射方向的光反射到单独的一个出射方向,这取决于microfacet的法向m。当计算BRDF的时候,光源方向l和视线方向v都得给定。这意味着在表面上的所有microfacet中,只有刚好把l反射到v的那部分对BRDF有贡献。在下图中,我们可以看到这些有效microfacet的表面法向m正好在lv的中间,也就是h

Microfacet

并不是所有m = h的microfacet对反射都有贡献。有些microfacet会在光源方向l被其他microfacet阻挡(shadowing),有些会在视线方向v被阻挡(masking),也可能都有。Microfacet理论假设所有被遮挡的没有对BRDF的贡献。Microfacet的specular BRDF可以表达成:

有效microfacetm = h)产生的Fresnel反射。是有效microfacet中没有被shadow或mask的比例。是microfacet的法线分布函数,或者说,microfacet的法线等于h的密度。最后,分母是个校正因子,用来校正从microfacet的局部空间转到整体表面的数量差异。

Fresnel项

Fresnel反射项计算从光学平滑的表面反射的比率。它的值取决于两件事情:入射角(光源方向和表面法线之间的角),以及材质的折射率。Schlick近似的Fresnel项是:

其中是specular颜色。

法线分布项

在大部分表面上,microfacet的方向不是均匀分布的。Microfacet的法线越接近宏表面的法线,就越光滑。这个分布由microfacet的法线分布函数D(m)来定义。函数D()决定了specular高光的大小、亮度和形状。 法线分布函数一般有类似于“粗糙度”这样的参数(各向异性的函数通常有两个参数)。

遮挡项(shadowing-masking term)

遮挡项G(l, v, h)也经常称为几何项 。在很多情况下,遮挡项在某种程度上抵消了microfacet方程中的分母,替换成类似于这样的形式。遮挡项对BRDF保能量是很重要的——没有这个项的话,BRDF反射出的能量可能比接收到的更多。Microfacet BRDF中很重要的一个事情是把能量从l反射到v的microfacet面积之和(有效面积)和宏表面总面积之间的比例。如果不考虑遮挡,那么有效面积可能会超过总面积,这回造成BRDF不保能量,甚至可能会很明显,如下图所示:

Shadowing Masking Term

在上半部分,平的宏表面为绿色,粗糙的微观表面为蓝色。m = h的microfacet标记为红色。宏表面投到视线方向就是左上角的绿线。同时,投出来的单个红色的microfacet显示成独立的红线。左下图表示在没有遮挡项的情况下,红色的microfacet加起来的面积,结果就是有效面积大于总面积,所以BRDF的反射能量错误地大于了接收能量。右下图里红色区域考虑了遮挡,重叠的区域不再计算多次,所以有效面积小于总面积。

讲了这么多BRDF,本篇到此为止。下一篇将要揭示目前大多数游戏中所用的BRDF和基于物理的BRDF之间的区别。