之前我們講到BRDF定義了入射光的能量到某個方向出射光的能量之比,是一種反映物體材質的重要屬性。在PBR技術中,常用的BRDF是Cook-Torrance模型,今天我們來對它進行講解。
Cook-Torrance BRDF包含了漫反射和高光兩個部分:
\(\LARGE{f_r=k_d f_{lambert} + k_s f_{cook-torrance}}\)
其中\(k_d\)和\(k_s\)分別是上文提到過的漫反射和高光的比例,\(\large{k_d + k_s = 1.0}\)。\(\large{f_{lambert}}\)是表達漫反射的brdf:
\(\LARGE{f_{lambert} = \frac{c}{\pi}}\)
其中c代表物體材質的顏色。
然而我們關注的重點還是高光的部分,\(\large{f_{cook-torrance}}\)的定義如下:
\(\LARGE{f_{cook-torrance}=\frac{DFG}{4(\omega_o \cdot n) (\omega_i \cdot n)}}\)
\(\omega_o\)和\(\omega_i\)分別指出射和入射方向,\(n\)指的是物體的normal方向,D、F、G分別指法向分布函數(normal distribution function)、菲涅爾公式(fresnel equation)和幾何函數(geometry function)。下面我們將對它們三個進行講解。
法向分布函數
法向分布函數D模擬的是微面元朝向某個向量h的比例,一般用一個概率分布函數Trowbridge-Reitz GGX來模擬:
\(\large{NDF-GGXTR(n,h,\alpha)=\frac{{\alpha}^2}{\pi {( {(n \cdot h)}^2 ({\alpha}^2 - 1) + 1)}^2}}\)
h就是half向量,即v+l;α則是粗糙度。下圖展示了不同粗糙度下,同樣視角和光照的對比:
當粗糙度很低的時候,只有一小片區域的微面元的朝向和h保持高度一致,因此光照聚焦於一小塊地方;當粗糙度逐漸變高,則微面元朝向變得隨機,則顯得與h向量取向一致的微面元分布在一個大得多的半徑范圍內,但是同時較低的集中性也會讓我們的最終效果顯得更加灰暗。
幾何函數
幾何函數從統計學上近似的求得了微平面間相互遮蔽的比率,這種相互遮蔽會損耗光線的能量。如下圖所示:
定義:
\(\large{G_{SchlickGGX}(n,v,k) = \frac{n\cdot v}{(n\cdot v)(1-k)+k}}\)
其中k是根據直接光照還是間接光照來計算的,這個之后在實現時會進一步提及,α就是前面提到的粗糙度:
\(\large{k_{direct} = \frac{{\alpha + 1}^2}{8}}\)
\(\large{k_{IBL} = \frac{{\alpha}^2}{2}}\)
最終的幾何函數為:\(\large G(n,v,l,k) = G_{SchlickGGX} (n,v,k) G_{SchlickGGX} (n,l,k)\)
下圖展示了不同粗糙度下所影響的幾何函數的渲染效果:
可以看到,當粗糙度為0的時候,此時完全沒有微面元的陰影,隨着粗糙度變大,則整體也越來越暗。
第三項Fresnel的計算和定義我們下篇文章來講。