前段时间有在这里(http://www.fseraph.com/?p=661)看到关于实时渲染中的一些常见渲染模型的总结,最近于是也找了些资料学习了一下,这里简单总结一下。
1. 一些基本概念
BRDF(双向反射分布函数)用来描述物体表面入射与反射光线之间的关系,其数学形式上的表示:在物体表面上的点处,出射方向上所反射的辐射亮度的微分与入射方向所进入的辐射照度的微分之间的比率;因而,BRDF是一个关于的三元函数,量化公式为:
将上式变型后即可以得到在点处的反射方程:
该积分式计算出了物体表面在一定光源条件下特定方向上的辐射亮度,于是也就最终决定了其被人眼感知时所得到的形象。其中的核心就是BRDF所涉及的部分,它也是特化出不同渲染模型所对应的变化关键。
BRDF的一些属性。首先是一些基本的公共属性:
对反射方程的原始积分式直接计算显然不太可行,需要采用离散化的方式进行简化,这里通常结合对于光源的狄拉克脉冲函数建模的方法进行(看这里); 简化后可得:
这样,对于有限个方向上的光源进行叠加即可得到最终的渲染结果;在分析过程中只需要考虑一个方向上的光线影响,即有:
转换为另外一种抽象表达的形式以便于后述对于各种渲染模型的分析(注意:此处的I 并非前述的辐射强度):
上式中的为物体表面的法向量,为光线到表面点的向量,而V则为视点到表面点的向量;其中的表示两个单位向量之间的点乘,用来取代分量;原始的三个参数此时也完全可以由来直接、间接地转换并替代(见下图示):
通常来说BRDF是关于表面多种属性的反射结果之间的线性组合(在实时渲染中一般只考虑diffuse和specular两种即可),其可以量化表示为:
其中的分别表示两种反射的结果,表示其对应的权重;如此一来通过调制组合中的四个参数就可以得到不同渲染表现的BRDF。接下来看一下一些常见的模型:
而在实时渲染中又通常将上式中的直接替换为diffuse颜色值,因而其最终的BRDF调制因数就为:
单纯的兰伯特模型使用较少,它通常是被合理地融入到其它更复杂的模型之中。
上式中的即为glossy specular反射分量:其中的为对应的specular color(与类似);部分可以用来约去反射方程中外部的几何因子;调节其中的可以控制高光区域的范围:较大的对应较小范围的高光区域,反之则相对;关于的计算为:。
基本Phong模型的BRDF调制因数为:
一般情况下有,但也可以使其值小于1,只要不大于1其均满足energy consveration的约束。
Blinn-Phong是在原始Phong基础上对计算细节做了改动,其使用halfway vector:来计算specular反射分量的值:
其与原始Phong在计算效率上还是有所差别:当某些情况下恒定不变时,可以预计算出统一使用,因其不依赖于表面法向量(依赖则要求在每个Pixel均需计算);其它情况下,计算R则更加节省(至少可以节省出开方操作)。B-P的调制参数为(其余的均无变化):
P和B-P两种模型中的中均有关于的除法操作,这样就会在(也即光线与法线几近垂直时)处产生数学运算上的问题进而导到BRDF的互反性(Reciprocity)不被满足。在Modified-Phong中就直接去掉了这一操作来避免这个问题,其BRDF如下:
因而这种修改也被称为:reciprocal (Blinn-)Phong。虽然这个简单的修改可以避免0除问题,但同时也会使得在的周围的渲染效果看起来不太自然。此处的BRDF有:
另一种关于基本Phong的变型是Max-Phong,其相对于前几种可以在一定程度上更好地模拟具有光滑金属质感的表面,同时也使用了Modified-Phong的方法来保持BRDF的互反性,其BRDF如下所示:
此时有:
前述几种Phong模型都是实时渲染中最为常用的反射模型,其公共特点是参数都比较容易调节、计算效率也比较高,这也正是其流行的主要原因;它们之间的主要区别均在于其对部分使用的不同计算方法,但是总体来说Phong模型对于部分的表现力度还是不够,而这也是其它更加复杂的渲染模型所改进的重点之一。
其中的表示两个向量在点处的切平面上的投影向量之间的夹角;另有:
上式中的表示材质表面的粗糙度,有效取值范围为;其值越大则漫射方向的分布越不均匀,当其为0时对应漫射方向的均匀分布,此时退化为Lambert模型。对该模型的BRDF用另外一种形式表述后有:
而其中对应在点的切平面上的单位投影向量,这样就可以得到其BRDF调制参数:
Oren-Nayar相对于Lambert来说对于diffuse反射有更强的表现力,不过其代价就是不菲的计算量,这之中主要涉及: