球面均勻取樣

2022-10-08 19:24:09 字數 2982 閱讀 6219

寫games101作業七的時候,計算間接光照的時候需要對著色點所在的半球面進行一次均勻取樣來獲得其他物體到著色點的入射光的方向。但是框架中的取樣函式我實在看不懂

vector3f material::sample(const vector3f &wi, const vector3f &n)

}}

為了搞清楚這裡取樣的原理,搜尋了一下相關知識。

本文參考了球諧光照與prt學習筆記(二):蒙特卡洛積分與球面上的均勻取樣和球面取樣 spherical sampling以及逆變換取樣 (inverse transform sampling) 的原理這三篇部落格

由於我們取樣的結果是著色點的入射光方向,因此我們可以通過球座標系的兩個分量:$ (\theta,\phi) $來表示取樣結果。

直接在\((\theta,\phi)\)進行均勻取樣即:

\[\begin

\theta=\xi_x,&\xi_x \sim u(0,1)\\

\phi=\xi_y,&\xi_y \sim u (0,1)

\end

\]但是這樣得到的取樣結果不是均勻分布

為什麼取樣結果不均勻呢?原作者提供了一種直觀的理解方式:球面可以看作垂直於\(z\)軸的圓的累加,對\(\phi\)取樣即是對這些圓的取樣,由於這些圓的半徑不同,根據圓弧長度與半徑和角度之間的關係(如下圖所示)圓上取樣點之間的距離也不同,因此球面上的取樣並不均勻

面積微元 \(da=r^2sin\theta d\theta d\phi\),當\(sin\theta\)小的時候立體角也小,面積微元也更小,因此取樣點更加密集,隨著\(sin\theta\)的增大,立體角也不斷增大,面積微元也更大,因此取樣點更加稀疏。所以取樣結果在球面的兩極更加密集。因此直接對\((\theta,\phi)\)均勻取樣無法得到對球面均勻取樣的結果。

我們已知由於立體角在不同的\(\theta\)下大小並不相同,這就造成了不同角度下面積微元內的樣本密度不同,我們需要構造新的對映方式:

\[\begin

\theta=f(\xi_x),&\xi_x \sim u(0,1)\\

\phi=g(\xi_y),&\xi_y \sim u(0,1)

\end

\]使得在不同角度下的面積微元的樣本密度保持一致。

考慮對單位球面取樣的情況下,設\(p(v)\)為取樣的概率密度函式,\(v\)為取樣方向,理想狀態下即均勻取樣下\(p(v)\)是乙個常數,由於單位球面立體角為\(4\pi\),即\(p(v)=1/4\pi\)。單位球面下面積微元內的取樣概率與單位立體角內的取樣概率相等,即:

\[p(a)=\int p(v)dw=1/4\pi dw=1/4\pi sin\theta d\theta d\phi

\]用\((\theta,\phi)\)表達的概率密度函式為\(p(\theta,\phi)=dp(a)/d\theta d\phi=1/4\pi sin\theta.\)

現在我們有了理想狀態下的概率分布函式\(p(\theta,\phi)\),還需要求出\((\theta,\phi)\)與\((\xi_x,\xi_y)\)之間的對映關係,我們可以通過inverse transform sampling來得到二者之間的對映關係,即通過均勻分布變數\((\xi_x,\xi_y)\),構造出\((\theta,\phi)\leftarrow(f^_\theta(\xi_x),f^_\phi(\xi_y))\),使得\(\theta \sim f_\theta(\theta),\phi \sim f_\phi(\phi).\)因此只要求出\(f^_\theta(\theta)\)與\(f^_\phi(\phi)\)即可得到對映關係。我們求出\(\theta\)與\(\phi\)的邊緣概率密度:

\[\begin

f(\theta)=\int_^ p(\theta,\phi)d\phi=sin\theta/2\\

f(\phi)=\int _^\pi p(\theta,\pi)d\theta=1/2\pi

\end

\]根據邊緣概率分布函式我們可以求出邊緣分布函式:

\[\begin

f_\theta(\theta)=\int_^\theta f(\hat \theta)d\hat \theta=\\

f_\phi(\phi)=\int _^\phi f(\hat \phi)d\hat \phi=\phi/2

\end

\]這樣就得到了\((\theta,\phi)\)與\((\xi_x,\xi_y)\)之間的對映關係:

\[\begin

\theta=arccos(1-2\xi_x)\\

\phi=2\pi\xi_y

\end

\]將球面換成半球面求得的結果即為框架中的取樣函式的對映方式。

給定隨機變數\(x \sim p_x(x),y=f(x)\),當f(x)為遞增函式時,隨機變數\(y\)的分布函式\(f_y(y)\)為:

\[f_y(y)=pr(y\le y)=pr(x\le f^(y))=f_x(f^(y)).

\]隨機變數\(y\)的概率密度函式為:

\[p_y(y)==(y))\over dy}=p_x(f^(y))(y)\over dy}=p_x(x).

\]當\(f(x)\)為遞減函式時,隨機變數\(y\)的分布函式為:

\[f_y(y)=pr(y\le y)=pr(x\ge f^(y))=1-pr(x\le f^(y))=1-f_x(f^(y)).

\]概率密度函式為:

\[p_y(y)==(y))\over dy}=-p_x(f^(y))(y)\over dy}=-p_x(x).

\]綜上:

\[p_y(y)=p_x(x)||

\]現在給定隨機變數\(x \sim u(0,1),y \sim f_y(y),y=f(x)\),令:

\[f(x)=f^(x)

\]\(f\)為任意分布函式,則\(y\)的概率密度函式為:

\[p_y(y)=p_x(x)||=1*||=p(y)

\]因此

\[f_y(y)=f(y)

\]

降取樣,過取樣,欠取樣,子取樣,下取樣,上取樣

取樣 2048hz對訊號來說是過取樣了,事實上只要訊號不混疊就好 滿足尼奎斯特取樣定理 所以可 以對過取樣的訊號作抽取,即是所謂的 降取樣 在現場中取樣往往受具體條件的限止,或者不存在300hz的取樣率,或除錯非常困難等等。若 r 1,則rfs 2就遠大於音訊訊號的最高頻率fm,這使得量化雜訊大部分...

降取樣,過取樣,欠取樣,子取樣,下取樣,上取樣

取樣 2048hz對訊號來說是過取樣了,事實上只要訊號不混疊就好 滿足尼奎斯特取樣定理 所以可 以對過取樣的訊號作抽取,即是所謂的 降取樣 在現場中取樣往往受具體條件的限止,或者不存在300hz的取樣率,或除錯非常困難等等。若 r 1,則rfs 2就遠大於音訊訊號的最高頻率fm,這使得量化雜訊大部分...

降取樣,過取樣,欠取樣,子取樣,下取樣

這幾天看了一篇將關於降取樣,過取樣,欠取樣,子取樣,下取樣 的文章,寫的挺好的,直接給出鏈結,文章比較長不貼過來了。簡單的說 過取樣是取樣頻率大於最高頻率的兩倍 奈奎斯特取樣率 實際對低通訊號取樣也是2.5倍左右過取樣。欠取樣就是小於奈奎斯特取樣率,應該就指帶通取樣吧。上取樣和下取樣其實對數碼訊號進...