Rough Specular Surface (GGX BRDF)

本ページでは,モンテカルロレイトレーシング法において, 金属など絶縁体の粗い表面を表現する方法を説明する. 言い換えると,粗い表面モデルのBRDFの実装に必要なパラメータや数式, 重点的サンプリングの方法を説明する. 本ページでは,粗い表面モデルとして[1]のGGXモデルを用いる.
記号について
本ページでは以下の記号は定義済として扱う.
| \(\omega_{n}\) |
Macrosurfaceの単位法線ベクトル |
| \(\omega_{m}\) |
Microsurfaceの単位法線ベクトル,本ページではマイクロファセット法線と呼ぶ |
| \(\omega_{i}\) |
入射方向の単位ベクトル |
| \(\omega_{o}\) |
反射方向の単位ベクトル |
| \(f_{r}\) |
BRDF |
| \(n_{i}\) |
入射側の媒体の屈折率 |
| \(n_{o}\) |
透過側の媒体の屈折率 |
| \(\eta_{o}\) |
透過側の媒体の消衰係数 |
| \(n\) |
\(\frac{n_{o}}{n_{i}}\) |
| \(\eta\) |
\(\frac{\eta_{o}}{n_{i}}\) |
| \(F\) |
フレネル項 |
| \(\chi^{+} \left( x \right)\) |
\(\begin{cases} 1 & (0 < x) \\ 0 & (otherwise) \end{cases}\) |
マイクロファセットモデルとGGX
マイクロファセットモデルは様々な 方向を向いた微小平面で構成される表面(Microsurface)を 単純な平面(Macrosurface)で近似したモデルである. このモデルでは,単純化のため波動光学や表面での2回以上の反射は無視する. マイクロファセットモデルは2つの統計量, 法線分布関数 \(D\) と Shadowing-Masking Function \(G\) を用いて表される.
表面の粗さについて
GGXは微小平面で見れば鏡面反射しかしていないが, 様々な法線を持った微小平面から構成されているため 表面が粗いほど拡散反射をしているように見える. 表面の粗さは \(roughness\) パラメータを用いて制御する. \(roughness\) がとる値の範囲は \(0 < roughness \le 1\) である. 値が \(0\) に近いほど理想的な鏡面反射に近くなり, \(1\) に近いほど理想的な拡散反射に近くなる.
また,計算時に用いる表面粗さの値は, \(roughness\) を直接用いるのではなく, [3]で解説してあるように
\[
\begin{align}
\alpha = \left( roughness \right)^{2}
\tag{1}
\end{align}
\]
を用いるほうがより視覚的に線形比例した変化となる. 本ページでも, \(\alpha\) を計算時の表面粗さの値として用いる.
法線分布関数 (Normal Distribution Function) \(D\)
法線分布関数 \(D\) はMicrosurface上にできる法線の統計分布を表したものである. GGXでは \(D\) は以下の式で表される.
\[
\begin{align}
D \left( \omega_{m} \right) =
\chi^{+} \left( \omega_{n} \cdot \omega_{m} \right)
\frac{\alpha^{2}}
{\pi \left(
\left( \alpha^{2} - 1 \right)
\left( \omega_{n} \cdot \omega_{m} \right)^{2} + 1 \right)^{2}}
\tag{2}
\end{align}
\]
ここでは簡易表記のため, \(D \left( \omega_{n}, \omega_{m}, \alpha \right)\) を \(D \left( \omega_{m} \right)\) と表記している.
Shadowing-Masking Function \(G\)
Shadowing-Masking Function は[2]の論文では V-cavityモデルとSmithモデルの2通りのモデルを載せているが, ここではSmithモデルを説明する(V-cavityモデルについては[2]を参照).
Shadowing-Masking Function \(G\) はある法線を持つMicrosurfaceが可視かどうかの比率 を表したものである. \(G_{2}\)は入射方向,反射方向の双方向から可視かどうかの比率を表しており, \(G_{1}\)は入射方向もしくは反射方向のどちらか単方向から可視かどうかの比率を表している.
\[
\begin{align}
G_{2} \left( \omega_{i}, \omega_{o}, \omega_{m} \right) = &
G_{1} \left( \omega_{i}, \omega_{m} \right)
G_{1} \left( \omega_{o}, \omega_{m} \right)
\tag{3}
\\
G_{1} \left( \omega, \omega_{m} \right) = &
\chi^{+} \left(
\left( \omega \cdot \omega_{n} \right)
\left( \omega \cdot \omega_{m} \right) \right)
\frac{2 \left( \omega \cdot \omega_{n} \right)}
{ \left( \omega \cdot \omega_{n} \right)
\sqrt{\alpha^{2} + \left( 1 - \alpha^{2} \right)
\left( \omega \cdot \omega_{n} \right)^{2} }}
\tag{4}
\end{align}
\]
ここでは簡易表記のため, \(G_{1} \left( \omega, \omega_{n}, \omega_{m}, \alpha \right)\) を \(G_{1} \left( \omega, \omega_{m} \right)\) と表記している.
GGX BRDF
GGXのBRDFは以下の式になる.
\[
\begin{align}
f_{r} \left( x, \omega_{i}, \omega_{o} \right) =
\frac{1}{4 \left( \omega_{i} \cdot \omega_{n} \right)
\left( \omega_{o} \cdot \omega_{n} \right)}
F \left( \omega_{i}, \omega_{m} \right)
G_{2} \left( \omega_{i}, \omega_{o}, \omega_{m} \right)
D \left( \omega_{m} \right)
\tag{5}
\end{align}
\]
ここでは簡易表現のため, \(F \left( \omega, \omega_{m}, n, \eta \right)\) を \(F \left( \omega, \omega_{m} \right)\) と表記している.
ExplicitConnection のように, マイクロファセット法線 \(\omega_{m}\) がわからない状態で \(f_{r} \left( x, \omega_{i}, \omega_{o} \right)\) を評価する場合は, \(\omega_{m}\) は 反射ハーフベクトル \(\omega_{h_{r}}\) を用いて,
\[
\begin{align}
\omega_{m} = & \frac{\omega_{h_{r}}}
{\left| \left| \omega_{h_{r}} \right| \right|}
\tag{6}
\\
\omega_{h_{r}} = & \omega_{i} + \omega_{o}
\tag{7}
\end{align}
\]
から求める.
重点的サンプリング (Importance Sampling)
反射方向 \(\omega_{o}\) の重点的サンプリングを行う. GGX BRDF では, マイクロファセット法線 \(\omega_{m}\) を重点的サンプリングし, 入射方向 \(\omega_{i}\) と \(\omega_{m}\) から正反射方向 \(\omega_{o}\) を求める.
\(\omega_{m}\) は 投影法線分布関数(Projected Normal Distribution Function) \(D_{\omega_{i}} \left( \omega_{m} \right)\) に従ってサンプリングする. \(D_{\omega_{i}} \left( \omega_{m} \right)\) は, \(D \left( \omega_{m} \right)\) の中で 入射方向 \(\omega_{i}\) から見える法線のみの分布を示したもので,
\[
\begin{align}
D_{\omega_{i}} \left( \omega_{m} \right) = \frac{
\left( \omega_{i} \cdot \omega_{m} \right) }
{ \left( \omega_{i} \cdot \omega_{n} \right) }
G_{1} \left( \omega_{i}, \omega_{m} \right)
D \left( \omega_{m} \right)
\tag{8}
\end{align}
\]
で定義される (ここでは簡易表記のため, \(D_{\omega_{i}} \left( \omega_{n}, \omega_{m} \right)\) を \(D_{\omega_{i}} \left( \omega_{m} \right)\) と表記している). マイクロファセット法線 \(\omega_{m}\) の pdf \(p \left( \omega_{m} \right) = D_{\omega_{i}} \left(\omega_{m} \right)\) から, 反射方向 \(\omega_{o}\) とそのpdf \(p \left( \omega_{o} \right)\)は
\[
\begin{align}
\omega_{o} = & 2 \left( \omega_{i} \cdot \omega_{m} \right) \omega_{m} - \omega_{i}
\tag{9}
\\
p \left( \omega_{o} \right)
= & \left| \left| \frac{\delta \omega_{m}}{\delta \omega_{i}} \right| \right|
p \left( \omega_{m} \right)
\\
= & \frac{1}{4 \left( \omega_{i} \cdot \omega_{m} \right)}
D_{\omega_{i}} \left( \omega_{m} \right)
\tag{10}
\end{align}
\]
で求められる. ここで,\(\left| \left| \frac{\delta \omega_{m}}{\delta \omega_{i}} \right| \right| = \frac{1}{4 \left( \omega_{m} \cdot \omega_{i} \right)}\) はヤコビアンである.
重点的サンプリングの際の反射レイのWeightは
\[
\begin{align}
\frac{f_{r} \left( x, \omega_{i}, \omega_{o} \right)
\left( \omega_{o} \cdot \omega_{n} \right)}
{p \left( \omega_{o} \right)} =
F \left( \omega_{i}, \omega_{m} \right)
G_{1} \left( \omega_{o}, \omega_{m} \right)
\tag{11}
\end{align}
\]
となる.
\(\omega_{m}\) のサンプリング
\(D_{\omega_{i}}(\omega_{m})\) に従ってマイクロファセット法線 \(\omega_{m}\) をサンプリングする. サンプリング方法はV-cavity法とSmith法の2通りの方法があるが, ここではSmith法を載せる(V-cavity法については[2]を参照).
注意として,このサンプリング方法は macrosurfaceの法線が \(\omega_{n} = (0, 0, 1)\) の時の 入射角 \(\omega_{i} = (x_{i}, y_{i}, z_{i})\) を用いる. \(\omega_{n}\) がそれ以外の場合は \(\omega_{n} = (0, 0, 1)\) となるように \(\omega_{i}\) の基底変換を行う. \(\omega_{m}\) のサンプリング後は \(\omega_{i}\) と \(\omega_{m}\) を 元の基底に変換する.
Smith法による\(\omega_{m}\)のサンプリング方法は 大きく分けて以下の5つのプロセスからなる.
- Stretch \(\omega_{i}\)
- Sample \(P_{\omega_{i}}^{22}(x_{\tilde{m}}, y_{\tilde{m}}, 1)\)
- Rotate \(\omega_{m}\)
- Unstretch \(\omega_{m}\)
- Normalize \(\omega_{m}\)
Stretch \(\omega_{i}\)
\[
\begin{align}
\omega'_{i} \equiv \frac{(\alpha x_{i}, \alpha y_{i}, z_{i})}
{\sqrt{(\alpha x_{i})^{2} + (\alpha y_{i})^{2} + z_{i}^2}}
\end{align}
\]
Sample \(P_{\omega_{i}}^{22}(x_{\tilde{m}}, y_{\tilde{m}}, 1)\)
\(x_{\tilde{m}}\) のサンプリング
\[
\begin{align}
A \equiv & u_{1} \left( 1 + \sqrt{1 + tan^{2} \theta_{\omega'_{i}}} \right) - 1
\\
B \equiv & tan \theta_{\omega'_{i}}
\\
x_{\tilde{m}1} \equiv & \frac{B}{A^{2} - 1} -
\sqrt{\left(\frac{B}{A^{2} - 1}\right)^{2} -
\frac{A^{2} - B^{2}}{A^{2} - 1}}
\\
x_{\tilde{m}2} \equiv & \frac{B}{A^{2} - 1} +
\sqrt{\left(\frac{B}{A^{2} - 1}\right)^{2} -
\frac{A^{2} - B^{2}}{A^{2} - 1}}
\\
x_{\tilde{m}} \equiv &
\begin{cases}
x_{\tilde{m}1} & (A < 0 \ \ or \ \
cot \theta_{\omega'_{i}} < x_{\tilde{m}2})
\\
x_{\tilde{m}2} & (otherwise)
\end{cases}
\end{align}
\]
ここで,\(u_{1}\) は \([0, 1)\) の乱数である.
\(y_{\tilde{m}}\) のサンプリング
\[
\begin{align}
s \equiv &
\begin{cases}
1 & (0.5 \lt u_{2})
\\
-1 & (otherwise)
\end{cases}
\\
t \equiv & 2s(u_{2} - 0.5)
\\
z \equiv & s \frac{0.46341 t − 0.73369 t^{2} + 0.27385 t^{3}}
{0.597999 − t + 0.309420 t^{2} + 0.093073 t^{3}}
\\
y_{\tilde{m}} \equiv & z \sqrt{1 + x_{\tilde{m}}^{2}}
\end{align}
\]
ここで,\(u_{2}\) は \([0, 1)\) の乱数である.
Rotate \(\omega_{m}\)
\[
\begin{align}
\left(
\begin{array}{c}
x_{\tilde{m}}
\\
y_{\tilde{m}}
\end{array}
\right) =
\left(
\begin{array}{c}
cos \phi_{\omega_{i}'} & -sin \phi_{\omega_{i}'}
\\
sin \phi_{\omega_{i}'} & cos \phi_{\omega_{i}'}
\end{array}
\right)
\left(
\begin{array}{c}
x_{\tilde{m}}
\\
y_{\tilde{m}}
\end{array}
\right)
\end{align}
\]
Unstretch \(\omega_{m}\)
\[
\begin{align}
\left(
\begin{array}{c}
x_{\tilde{m}}
\\
y_{\tilde{m}}
\end{array}
\right) =
\left(
\begin{array}{c}
\alpha x_{\tilde{m}}
\\
\alpha y_{\tilde{m}}
\end{array}
\right)
\end{align}
\]
Normalize \(\omega_{m}\)
\[
\begin{align}
\omega_{m} \equiv \frac{(-x_{\tilde{m}}, -y_{\tilde{m}}, 1)}
{\sqrt{x_{\tilde{m}}^{2} + y_{\tilde{m}}^{2} + 1}}
\end{align}
\]
まとめ
パラメータ
| 表面粗さ |
\(roughness\) |
\(0 < roughness \le 1\) |
レンダリング
| BRDF |
\(f_{r} \left( x, \omega_{i}, \omega_{o} \right)\) |
\(\frac{1}{4 \left( \omega_{i} \cdot \omega_{n} \right) \left( \omega_{o} \cdot \omega_{n} \right)} F \left( \omega_{i}, \omega_{m} \right) G_{2} \left( \omega_{i}, \omega_{o}, \omega_{m} \right) D \left( \omega_{m} \right)\) |
| pdf |
\(p \left( \omega_{o} \right)\) |
\(\frac{1}{4 \left( \omega_{i} \cdot \omega_{m} \right)} D_{\omega_{i}} \left( \omega_{m} \right)\) |
| 反射レイのWeight |
\(\frac{f_{r} \left( x, \omega_{i}, \omega_{o} \right) \left( \omega_{o} \cdot \omega_{n} \right)} {p \left( \omega_{o} \right)}\) |
\(F \left( \omega_{i}, \omega_{m} \right) G_{1} \left( \omega_{o}, \omega_{m} \right)\) |
以上,GGX BRDFについてまとめた.
参考文献
- B. Walter, S. R. Marschner, H. Li, K. E. Torrance: Microfacet models for refraction through rough surfaces (2007)
- E. Heitz, E. D'Eon: Importance Sampling Microfacet-Based BSDFs using the Distribution of Visible Normals (2014)
- B. Burley: Physically-Based Shading at Disney (2012)