GGX重要性采樣


在之前的文章里面,我們介紹了Cook-Torrance BRDF,這是一種常見的用於表現PBR的光照模型。今天我們想要解決的問題是,在該BRDF下,給定物體材質的粗糙度(roughness),該如何生成符合該粗糙度的采樣方向呢(這對於路徑追蹤采樣生成入射光、IBL算法中采樣計算radiance都很重要)?

法向分布函數(NDF)

對GGX的采樣主要是針對它的法向分布函數NDF來進行的。在之前的文章中,我們曾經簡單地介紹過法向分布函數的概念,它是一個用來描述微面元模型中各個微面的法向分布密度的函數。該函數實際的意義是當前點的微表面(microfacet)的面積除以宏表面(macrofacet)的面積,然后再除以立體角,所以NDF的單位是立體角分之一。
但是如果直接對NDF針對立體角dw積分的話,得到的結果其實並不是1,也就是說NDF實際上並不是法線的概率密度函數。
真正的歸一化公式如下:

\(\LARGE \int D(m)cos(\theta_m)d\omega=1\)

其中D是法向分布函數,m是某個微面元的法向,\(\theta_m\)則是微面元的法向和宏觀表面法向的夾角,\(\omega\)是該微面元所屬的立體角。這個公式其實就是將微面元的面積映射到了宏表面上,如下圖所示:

也就是說,如果上面的積分中沒有這個\(cos\theta\),那么得到的其實是微表面面積之和和宏表面之比。
更詳細的理論推導可以參考這篇文章:How Is The NDF Really Defined?
通過上面的公式可知,\(D(m)cos(\theta_m)\)才是真正關於微表面法線的概率密度函數。

關於GGX的重要性采樣

知道了概率密度函數p,我們就可以根據它進行采樣。在這里我們以GGX的NDF為例。
GGX的NDF形式如下:
\(\large{NDF-GGX(n,h,\alpha)=\frac{{\alpha}^2}{\pi {( {cos\theta}^2 ({\alpha}^2 - 1) + 1)}^2}}\)
將它轉換為球坐標系的概率密度函數為:

\(\large{p(\theta,\phi)=\frac{{\alpha}^2 cos\theta sin\theta}{\pi {( {cos\theta}^2 ({\alpha}^2 - 1) + 1)}^2}}\)

\(\theta\)\(\phi\)的邊緣概率密度函數,得:

進一步求得\(\theta\)\(\phi\)的CDF:
\(\LARGE P_h(\phi)=\frac{\phi}{2\pi}\)

設兩個[0,1]之間的隨機數\(\xi\)\(\epsilon\)分別對應\(P_h(\phi)\)\(P_h(\theta)\),可以解得(其實用得就是逆方法):
\(\LARGE \phi = 2\pi\xi\)
\(\LARGE \theta = arccos\sqrt{\frac{1-\epsilon}{\epsilon(\alpha^2 - 1) + 1}}\)

可以看到UE4中的GGX采樣也是用該思路來計算的:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM