2015年11月29日日曜日

Smooth Diffuse Surface (Lambert BRDF)

Smoth Diffuse Surface (Lambert BRDF)

本ページでは,モンテカルロレイトレーシング法において, 理想拡散反射表面をレンダリングする方法を説明する. 理想拡散反射表面として Lambert BRDF の実装に必要な パラメータや数式,重点的サンプリングの方法を説明する.

Lambert BRDF

Lambert BRDFは,全ての方向に放射輝度が等しく反射するBRDFで

\[ \begin{align} f_{r} \left( x, \omega_{i}, \omega_{o} \right) = \frac{\rho}{\pi} \tag{1} \end{align} \]

で定義される.ここで,\(\rho\) は表面の反射率を表す.

重点的サンプリング (Importance Sampling)

反射方向 \(\omega_{o}\) の重点的サンプリングを行う. Lambert BRDF では, \(\omega_{o}\) は反射エネルギー分布に従ってサンプリングする. すなわち,反射方向のpdf \(p \left( \omega_{o} \right)\)

\[ \begin{align} p \left( \omega_{o} \right) = \frac{cos \theta_{\omega_{o}}}{\pi} \tag{2} \end{align} \]

となる.ここで, \(cos \theta_{\omega_{o}} = \omega_{o} \cdot \omega_{n}\) である.

重点的サンプリングの際の反射レイの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)} = \rho \tag{3} \end{align} \]

となる.

\(\omega_{o}\) のサンプリング

反射方向 \(\omega_{o}\) のサンプリングには逆関数法を用いる.

注意として,このサンプリング方法は 法線が \(\omega_{n} = (0, 0, 1)\) の時の 反射方向をサンプリングしているため, サンプリング後は任意の法線に対応するように基底変換をする.

\[ \begin{align} P \left( \theta, \phi \right) = & \int_{0}^{\phi} \int_{0}^{\theta} p \left( \theta^{\prime}, \phi^{\prime} \right) \ sin \theta^{\prime} \ d \theta^{\prime} d \phi^{\prime} \\ = & \frac{\phi}{2 \pi} \cdot (1 - cos^{2} \theta) \\ P \left( \theta \right) = & 1 - cos^{2} \theta \\ P \left( \phi \right) = & \frac{\phi}{2 \pi} \end{align} \]

上記の \(P \left( \theta \right)\)\(P \left( \phi \right)\) から, 反射方向の \(\theta\)\(\phi\) は以下の式から求めることができる.

\[ \begin{align} \theta = & cos^{-1} (\sqrt{1 - u_{1}}) \tag{4} \\ \phi = & 2 \pi u_{2} \tag{5} \end{align} \]

ここで, \(u_{1}\)\(u_{2}\)\([0, 1)\) の乱数である.

まとめ

パラメータ

名称 記号
反射率 \(\rho\) \(0 \le \rho \le 1\)

レンダリング

名称 記号
BRDF \(f_{r} \left( x, \omega_{i}, \omega_{o} \right)\) \(\frac{\rho}{\pi}\)
pdf \(p \left( \omega_{o} \right)\) \(\frac{cos \theta_{\omega_{o}}}{\pi}\)
反射レイのWeight \(\frac{f_{r} \left( x, \omega_{i}, \omega_{o} \right) \left( \omega_{o} \cdot \omega_{n} \right)} {p \left( \omega_{o} \right)}\) \(\rho\)

以上,Lambert BRDFについてまとめた.

参考文献

  1. H. W. Jensen: Monte Carlo Ray Tracing (2003)
  2. H. Son: Realistic Image Synthesis with Light Transport (2015)

2015年11月23日月曜日

双方向反射分布関数 (Bidirectional Reflectance Distribution Function: BRDF)

双方向反射分布関数 (Bidirectional Reflectance Distribution Function: BRDF)

BRDFの定義についてメモする. BRDFの実装やそのテストを実装する際は, 実装内容がBRDFの定義を満たしているかを確認することで バグを発見しやすくなると思われる.

BRDFとは

  • 表面の見た目を決定づける役割を果たす
  • 入射光に対する反射光の方向の分布を表す

BRDFの定義

BRDFは数学的には放射照度に対する出射光の放射輝度の比を表し, 以下の関数 \(f_{r}\) で定義される.

\[ \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の実装やテストの実装の際は, これらの定義を満たしているかを確認することでバグを発見しやすくなると思われる.

参考文献

  1. R. Montes, C. Ureña: An Overview of BRDF Models (2012)
  2. H. Son: Realistic Image Synthesis with Light Transport (2015)