1. 程式人生 > >圖形學數學基礎之重要性取樣(Importance Sampling)

圖形學數學基礎之重要性取樣(Importance Sampling)

作者:i_dovelemon
日期:2017/08/06
來源:CSDN
主題:Importance Sampling, PDF, Monte Carlo

引言


前面的文章圖形學數學基礎之基本蒙特卡羅爾積分(Monte Carlo Integration)中提到過,我們可以通過使用數值的方法來求解一些無法通過分析方法解決的積分問題。並且,我提到過後面會講解,如何通過對基本蒙特卡羅爾積分方法進行改進,從而加快求解積分的速度。所以,今天就來和大家講解在圖形學裡面,一種非常重要的加快積分的手段-重要性取樣(Importance Sampling)。

重要性取樣(Importance Sampling)


我們先回顧下基本蒙特卡羅爾積分的內容,如下所示:

baf(x)dxbaNi=0Nf(xi)前面提到過,我們是通過在[a,b]的區間裡面,進行均勻分佈的進行取樣,以此來構造平均值h。可事實上,這些均勻分佈的點所在的值對最終的積分貢獻度實際上不一樣的,只有當函式本身是均勻的時候,比如下圖所示:

均勻分佈函式

對於這樣的函式,我們使用均勻分佈的取樣,他們計算出來的值對最終的積分的貢獻度實際上是一樣的,所以能夠通過這種方法來進行計算。但是在實際情況下,我們遇到的積分都是不均勻的,比如下圖所示的這樣:

非均勻分佈函式

對於這樣的函式,直觀上來說,兩邊的值對最終的積分貢獻度要小,而中心的值對最終的積分貢獻度要大,所以我們就說中心部分相比於兩邊部分要“重要(Importance)”,所以當我們取樣的時候,最好是能夠多在中心部分取樣,這樣相比於均勻分佈取樣,相同取樣數的情況下,這種方法更加的精確,這就是重要性取樣(Importance Sampling)。

重要性取樣點分佈



概率密度函式(Probability Density Function)


從前面的描述中可以看出,我們需要根據被積分函式本身的形狀來構造取樣點的分佈。所以這裡就引進了一個概率中的函式概率密度函式(Probability Density Function, PDF),這個函式就是我們將要主要打交道的函式,所以有必要好好的講解下它的特性。

隨機變數X


隨機變數X,表示的是在某個指定的區間裡面,事件A發生的概率。比如說,有一個隨機變數X表示了今天要下雨的概率,扔一個骰子,點數大於3的概率,以及向一個圈裡面扔石子,落在某個區域A的概率等等。

隨機變數一般分為兩個大類,分別是離散型隨機變數,比如扔骰子的點數的概率;連續型隨機變數,比如向一個圈裡面扔石子,落在某個區域A的概率。

在圖形學裡面,我們主要用到的是連續型隨機變數。連續型隨機變數相比於離散型隨機變數的一大特點是,雖然它也擁有樣本區間,但是樣本區間裡面的樣本數量是無限的,而單個樣本事件發生的概率沒有實際的意義,對我們來說,更重要的是研究落在樣本區間裡面的子區間的概率。

概率密度


對於連續型隨機變數來說,概率密度函式就是描述了在樣本區間裡面子區間發生概率的一種函式,它和隨機變數X的關係如下所示:

X([a,b])=bap(x)dx。其中X([a,b])表示的就是事件發生在樣本區間[a,b]中的概率。而p(x)就是隨機變數X的概率分佈函式。所以隨機變數X和概率密度函式p(x)之間就是積分關係。這也就說明了,對於單一事件發生的概率在該積分中是沒有意義的。

除了上面的公式之外,概率密度函式還有一個重要的特性:+p(x)dx=1這個特性表示,事件發生在整個概率區間裡面的概率為1。

新的積分器函式


在明白了上面的內容之後,我們就可以得出一個新的積分函式:

baf(x)dx1Ni=0Nf(xi)p(xi)其中p(x)就是概率密度函式。這裡之所以要除以p(xi),是因為當我們的取樣點為xi的時候,我們可以通過p(xi)計算出該取樣點對最終積分的一個貢獻度權重值,這樣一除就能夠得到最終的積分值。

細心的讀者可能會發現,好像我們只要找到一個取樣點xi,然後求出p(xi)f(xi),在使用f(xi)p(xi)就已經能夠得到最終的積分值了啊,幹麼還要取樣那麼多的資料,然後在求個平均值?這是因為,在解決實際問題的時候,我們往往很難精確的求出某個函式f(x)對應的概率密度函式p(x)。這時候的概率密度函式,就依靠於我們選取的取樣策略來定義,它實際上是與最終的概率密度函式接近的一個函式,並不是真真的概率密度函式,所以需要通過多次取樣,求平均值的方法來抵消這種近似帶來的誤差。關於這段內容,等到後面講解對BRDF進行取樣的時候,大家就能夠理解。我們對BRDF進行取樣的時候,往往很難求出BRDF本身的PDF,而是通過選取合適的取樣策略,比如對GGX進行取樣來逼近。

同時,從我們新的積分器,也能夠得出前面一篇文章中講解的基本蒙特卡羅爾積分器來,只要將:p(x)=1ba帶入新的積分器中,就能夠得到。

總結


今天給大家講解了圖形學裡面一種重要的求解積分的手段。希望大家能夠通過我的文章對這塊內容有一個大體的認識。
不過這裡我只講解了你在獲取了取樣點之後,如何進行積分的過程。而如何獲取取樣點本身的操作並沒有詳細描述。後面會有專門的文章來講解,如何根據一個概率密度函式來得出合適的取樣點。同時需要提醒讀者,如何獲取取樣點的知識,相當的複雜,我自己也只掌握了皮毛,後面的文章也僅僅供大家參考,給大家指明一個方向,更深入的瞭解,需要大家自行去學習。

參考文獻