蒙特卡洛光線追蹤基礎(chǔ) - 渲染方程與概率密度函數(shù)

歡迎來到我的專欄。經(jīng)過前面幾次雜談瞎掰之后,我又想回來寫點(diǎn)偏技術(shù)的東西了。
這里,我想使用極短的篇幅來介紹一下我們現(xiàn)在做光線追蹤的一些技巧。希望對您有用。
現(xiàn)在這個年代,您應(yīng)該多少對光線追蹤和全局光照有所耳聞。沒錯,當(dāng)前的計(jì)算機(jī)實(shí)現(xiàn)全局光照最準(zhǔn)確的方法就是光線追蹤。

而我們現(xiàn)在所指的光線追蹤實(shí)際上是路徑跟蹤(Path Tracing),它是建立于 1986 年 James Kajiya 老先生所提出偉大的 “渲染方程(The Rendering Equation)” 的基礎(chǔ)上的。
并且,渲染方程從 1986 年指導(dǎo)了整個渲染領(lǐng)域至今。我們現(xiàn)在做的一切工作都是為了逼近或者直接求解渲染方程,以此達(dá)到照片級真實(shí)感。(不過令琪老師他們的波光體系的論文最近也發(fā)了,估計(jì)不久以后圖形學(xué)光傳輸理論領(lǐng)域也要變天了)
最早比較完備的光線追蹤著色算法實(shí)際上是 Turner Whitted 于 1979 年提出的經(jīng)典遞歸光線追蹤模型(Whitted-Style Raytracing)。
Turner Whitted 仍健在,并且現(xiàn)在正在 NVIDIA Research 任職!
經(jīng)過了這十幾年通用算力不斷膨脹,實(shí)時光線追蹤也開始逐漸成為了熱門話題。然而,目前的 GPU 算力僅僅只能支撐起我們做很小一部分的光線追蹤,每一次發(fā)射光線我們都不能保證完全得到想要的信息。

無論是實(shí)時游戲里的還是離線渲染器里的光線追蹤,本質(zhì)上它們都是一個東西。只不過是采樣率上存在差別。
好了,歷史課上完了。接下來的東西就有點(diǎn)頭疼了哦。

首先,

這個圖形象地概括了渲染方程地核心思想。其實(shí)它還可以用? 來概括,意思是從光線到攝像機(jī),光線在傳播途中可以進(jìn)行多次的 Diffuse 和 Specular 的反彈。
為了方便,這里稍微省略一下括號內(nèi)的自變量(不代表它們不存在),則每條光線的能量傳輸都可以寫成:
至于整個半球空間內(nèi),一個點(diǎn)接受到四面八方來的所有光線的累積就是:
不過這只是反射的出射光線。加上自發(fā)光的話,則是:
為了統(tǒng)一和舒服起見,以后我們都使用以下形式的渲染方程:
其中:
?是最終出射光
?是自發(fā)光
是雙向反射分布函數(shù)(BRDF),它決定光線從某種特定表面彈射出去時會具有的一些特性(例如法線的分布),它同時是基于物理渲染(PBR)的基礎(chǔ)
是入射光,也是上一個彈射點(diǎn)的最終的出射光
是入射光和法向量夾角的余弦值,并且?
?就是反射的其它地方來的光,半球空間用?
表示
注意,渲染方程里光是規(guī)定了具體輻射能量單位的,即現(xiàn)實(shí)中的瓦特每平方米,這也體現(xiàn)出了它的物理準(zhǔn)確性。而不像傳統(tǒng)局部光照模型(例如 Blinn-Phong)那樣只有一個籠統(tǒng)的,經(jīng)驗(yàn)性的?“光強(qiáng)” 概念。

以上就是關(guān)于渲染方程的一些東西了。所以我們就得到了一個具體的方針——想要得到照片級畫質(zhì),就求解渲染方程。
然而我們?nèi)タ纯翠秩痉匠痰男问剑且粋€標(biāo)準(zhǔn)的積分方程。我們要如何在計(jì)算機(jī)上用數(shù)值方法去求解那么大坨定積分呢?
我們以這個定積分舉例:

我們知道,這個藍(lán)色曲邊梯形的面積為:
這定積分本質(zhì)上就是一個極限嘛,當(dāng)然我們可以把等式右邊稍微變個型,也就是
? ?
誒,不知道你發(fā)現(xiàn)沒有,上面那張圖上面的?是均勻分布的,其實(shí)這樣的法則反映到我們這里就是均勻采樣(Uniform Sampling)。
而? 想要表達(dá)的正是通過隨機(jī)均勻采樣來求得藍(lán)色曲邊梯形的面積。而這樣隨機(jī)采樣來求解積分結(jié)果的方法也叫“蒙特卡洛方法”(Monte Carlo Method),這樣的積分我們也叫它“蒙特卡洛積分”。
然而你也發(fā)現(xiàn)了,如果要收斂到正確結(jié)果,那么我們得做無限次的采樣(),這對于計(jì)算機(jī)來說顯然不現(xiàn)實(shí),何況我們這些做渲染的追求質(zhì)量的同時的可不就是追求一個快。所以我們?yōu)榱怂俣?,一般都是大大降低了采樣次?shù)的。
在上述的???中,我們把??
?稱作均勻采樣的“概率密度函數(shù)”(Probability Destiny Function, PDF) ,所以還可以表示為
??
以后看到 PDF 就不要只想成文檔咯 (~ ̄▽ ̄)~
所以,哈哈,我們得到了一種船新的利用概率密度函數(shù)來求積分的數(shù)值方法(雖然結(jié)果不一定收斂)
然而,均勻采樣對于我們做全局光照的來說,缺點(diǎn)是很大的。例如,在部分信號強(qiáng)烈的地方和信號弱的地方做了同樣的采樣,這樣一來效果就差了。比如下圖所示的,均勻采樣比余弦權(quán)重的采樣噪點(diǎn)更多,因?yàn)楦鶕?jù)下圖余弦波瓣所示圖象的特點(diǎn),球頂分布的采樣會比底下的更密集。

所以,使用合適的 PDF,可以更加逼近正確值。我們這里就引入一種很重要的采樣方式:重要性采樣(Importance Sampling)
看名字我們就知道了,這是根據(jù)重要性來進(jìn)行采樣,哪一部分需要集中采樣,哪一部分不太需要,就是根據(jù) PDF 決定的。這樣我們可以得到比均勻采樣準(zhǔn)確得多的結(jié)果。
常見的 PDF 有 ,也有我們熟悉的老???GGX 分布函數(shù),了解 PBR 的人都知道它很適合做 Specular。

您看,像 GGX 這類概率密度分布就和余弦波瓣的就不一樣,我們明顯能感受到 GGX 要更急,它就可以很好地做金屬表面的效果。
不過,我們不能抓住一個 PDF 不放,最重要的是根據(jù)需求而選擇合適的 PDF。歸根結(jié)底,做渲染也是一個做 Sampling 的過程,我們一定要選擇合適的采樣法則,這樣才能更好地逼近于正確值,實(shí)現(xiàn)照片級渲染。
謝謝大家看到這里!