こんにちは。CG業界ではRay-Tracingを含む様々な手法でサンプリングが用いられています。以下の図のような青線の半球において効率よくサンプリングが行える手法としてHemispherical Importance Sampling Monte Carlo Methodがあります。2回にわたって理論的な部分を説明します。本記事では球面上での一様乱数生成についてです。
#目次
1.事前知識
2.2変数確率密度関数を分離する
3.球面上での一様乱数の生成
4.おわりに
#1. 事前知識
➀立体角と緯度経度との変数変換(https://batapara.com/archives/solid-angle.html/)
d\omega = \sin\theta d\phi d\theta \tag{1}
➁球面上での一様なサンプリング(https://qiita.com/aa_debdeb/items/e416ae8a018692fc07eb)
以下のように定義された($\theta,\phi$)をそれぞれ一様乱数として取得すると、極のあたりでサンプルが集中してしまう。逆関数法を用いて球面上で一様な乱数を生成できるような手法を紹介している。
➂立体角を用いた確率密度$~p(\omega)~$と緯度経度を用いた確率密度$~p(\theta, \phi)~$の関係性
半球上での積分に関して以下の式が成り立つ。
\int_{\mathcal{H}_2} p(\omega) d\omega = \int_{\mathcal{H}_2} p(\theta,\phi)d\theta d\phi = 1
よって
p(\omega) d\omega = p(\theta,\phi)d\theta d\phi \tag{2}
(1)と比べると、
\sin\theta ~p(\omega) = p(\theta,\phi) \tag{3}
➃Monte Carlo法
以下の式において$f(X_i)$が環境光の色にあたり、$pdf(X_i)$が$p(\omega)$にあたる。
\left< F^N\right> = \frac{1}{N} \sum^{N-1}_{i=0} \frac{f(X_i)}{pdf(X_i)} \tag{4}
#2. 2変数確率密度関数を分離する
球面上の一様乱数生成法は前節の引用先で紹介されているが、証明に不十分な点があるので、再度ここで考え直す。任意の2変数確率密度関数$p(x,y)$を$p(x,y) = p_x(x)~ p_y(y)$のように分離できることが望ましいが、このような場合は難しいので、以下のように一方の次元を積分することで分離できる。
p(x) = \int p(x,y) dy \tag{5}
xが生じるという条件の下でyが生じる条件は
p(y|x) = \frac{p(x,y)}{p(x)} \tag{6}
となる。
#3. 球面上での一様乱数の生成
球面上で一様な乱数を生成するとは立体角を用いた確率密度関数$p(\omega)$が球面上で一定となるようなサンプリングのことである。つまり、$p(\omega) = 1/4\pi$である。よって(3)より、$p(\theta, \phi) = \sin\theta/4\pi$である。このことと(5)を用いると、
p(\theta) = \int^{2\pi}_0 p(\theta, \phi) d\phi = \int^{2\pi}_0 \frac{\sin\theta}{4\pi} d\phi = \frac{\sin\theta}{2} \tag{7}
(6)を用いると、
p(\phi) = p(\phi|\theta) = \frac{p(\theta,\phi)}{p(\theta)} = \frac{1}{2\pi}\tag{8}
ここで求められた結果は引用先での結果と合致している。
#4. おわりに
次回はImportance Samplingについて書き、この話を深めていく。