双方向反射分布関数 (Bidirectional Reflectance Distribution Function: BRDF)
BRDFの定義についてメモする. BRDFの実装やそのテストを実装する際は, 実装内容がBRDFの定義を満たしているかを確認することで バグを発見しやすくなると思われる.
BRDFとは
- 表面の見た目を決定づける役割を果たす
- 入射光に対する反射光の方向の分布を表す
BRDFの定義
BRDFは数学的には放射照度に対する出射光の放射輝度の比を表し, 以下の関数 fr で定義される.
\begin{align}
f_{r}(x, \boldsymbol{\omega_{o}} \leftarrow \boldsymbol{\omega_{i}})
\equiv & \frac{dL_{r}(x \rightarrow \boldsymbol{\omega_{o}})}
{dE(x \leftarrow \boldsymbol{\omega_{i}})}
\\
= & \frac{dL_{r}(x \rightarrow \boldsymbol{\omega_{o}})}
{L_{i}(x \leftarrow \boldsymbol{\omega_{i}}) \
d \sigma_{p}(\boldsymbol{\omega_{i}})}
\end{align}
ここで, \boldsymbol{\omega_{i}}・\boldsymbol{\omega_{o}} は それぞれ光の入射方向・反射方向を表す単位ベクトルであり, 点 x での法線ベクトルを \boldsymbol{n_{x}} とするとき, (\boldsymbol{n_{x}} \cdot \boldsymbol{\omega_{i}}) \geq 0 を満たす方向ベクトル \boldsymbol{\omega_{i}} \in \Omega_{x} である( \boldsymbol{\omega_{o}} に関しても同様). L_{i}, L_{r} はそれぞれ点 x に入射, 点 x から反射する放射輝度を表す. \sigma_{p} は \Omega_{x} の投影立体角測度であり, \Omega_{x} の立体角測度 \sigma と
\begin{align}
d\sigma_{p}(\boldsymbol{u}) \equiv cos \theta_{\boldsymbol{u}} \
d\sigma(\boldsymbol{u}),
\ \ \boldsymbol{u} \in \Omega_{s}
\end{align}
を満たす関係である.ここで, cos \theta_{\boldsymbol{u}} = (\boldsymbol{n_{x}} \cdot \boldsymbol{u}) である.
物理ベースなBRDF
物理ベースなBRDFは,反射する放射エネルギーが負になることはないので
\begin{align}
\forall \boldsymbol{\omega_{i}} \
\forall \boldsymbol{\omega_{o}}, \
f_{r}(x, \boldsymbol{\omega_{o}} \leftarrow \boldsymbol{\omega_{i}}) \
cos \theta_{\boldsymbol{\omega_{o}}} \ge 0
\end{align}
cos \theta_{\boldsymbol{\omega_{o}}} \ge 0 であるため,
\begin{align}
\forall \boldsymbol{\omega_{i}} \
\forall \boldsymbol{\omega_{o}}, \
f_{r}(x, \boldsymbol{\omega_{o}} \leftarrow \boldsymbol{\omega_{i}}) \ge 0
\end{align}
である. また,物理ベースなBRDFは以下の2つの特性を持つ.
ヘルムホルツの相反性 (Helmholtz Reciprocity)
BRDFの値は入射・出射方向が入れ替わっても変化しない.
\begin{align}
f_{r}(x, \boldsymbol{\omega_{o}} \leftarrow \boldsymbol{\omega_{i}}) =
f_{r}(x, \boldsymbol{\omega_{i}} \leftarrow \boldsymbol{\omega_{o}})
\end{align}
この特性があるため,Bidirectional Path TracingやPhoton Mappingのように 光源側とカメラ側の双方向から光の経路をトレースできる.
エネルギー保存則 (Energy Conservation)
ある点から反射した総出射光束は総入射光束以下となる.
\begin{align}
\rho(x) =
\frac{\int_{\Omega}
L(x \rightarrow \boldsymbol{\omega_{o}}) \
d \sigma_{p}(\boldsymbol{\omega_{o}})}
{\int_{\Omega}
L(x \leftarrow \boldsymbol{\omega_{i}}) \
d \sigma_{p}(\boldsymbol{\omega_{i}})}
\le 1
\end{align}
この式から以下の式を導くことができる
\begin{align}
\forall \boldsymbol{\omega_{i}}, \
\int_{\Omega}
f_{r}(x, \boldsymbol{\omega_{o}} \leftarrow \boldsymbol{\omega_{i}}) \
d \sigma_{p}(\boldsymbol{\omega_{o}})
\le 1
\end{align}
この式から,エネルギー保存則を満たすBRDFは 入射した放射エネルギー以上の放射エネルギーを反射しないことがわかる.
まとめ
BRDFの定義
\begin{align}
f_{r}(x, \boldsymbol{\omega_{o}} \leftarrow \boldsymbol{\omega_{i}})
\equiv \frac{dL_{r}(x \rightarrow \boldsymbol{\omega_{o}})}
{L_{i}(x \leftarrow \boldsymbol{\omega_{i}}) \
d \sigma_{p}(\boldsymbol{\omega_{i}})}
\end{align}
物理ベースなBRDF
非負 |
\forall \boldsymbol{\omega_{i}} \ \forall \boldsymbol{\omega_{o}}, \ f_{r}(x, \boldsymbol{\omega_{o}} \leftarrow \boldsymbol{\omega_{i}}) \ge 0 |
ヘルムホルツの相反性 |
f_{r}(x, \boldsymbol{\omega_{o}} \leftarrow \boldsymbol{\omega_{i}}) = f_{r}(x, \boldsymbol{\omega_{i}} \leftarrow \boldsymbol{\omega_{o}}) |
エネルギー保存則 |
\forall \boldsymbol{\omega_{i}}, \ \int_{\Omega} f_{r}(x, \boldsymbol{\omega_{o}} \leftarrow \boldsymbol{\omega_{i}}) \ d \sigma_{p}(\boldsymbol{\omega_{o}}) \le 1 |
以上,BRDFの定義についてまとめた. BRDFの実装やテストの実装の際は, これらの定義を満たしているかを確認することでバグを発見しやすくなると思われる.
参考文献
- R. Montes, C. Ureña: An Overview of BRDF Models (2012)
- H. Son: Realistic Image Synthesis with Light Transport (2015)