2017年12月17日日曜日

レンダリング方程式の変数変換

rendering_equation_jacobian

レンダリング方程式の変数変換

このページは レイトレ Advent Calendar 2017 の記事である. 本ページでは,レンダリング方程式の変数変換について考える.

記号について

本ページでは以下の記号は定義済として扱う.

記号 説明
\(\omega_{n}\) 単位法線ベクトル
\(\omega_{i}\) 入射方向の単位ベクトル
\(\omega_{o}\) 反射方向の単位ベクトル
\(L_{o}\) ある点からの反射光の放射輝度
\(L_{e}\) ある点が自発光している場合の放射輝度
\(L_{i}\) ある点への入射光の放射輝度
\(S^{2}\) 半球上の微小立体角の集合
\(M\) 空間中にある物体上の微小面積の集合
\(f_{r}\) BRDF

微小立体角を積分する形のレンダリング方程式は式1で表される.

\[ \begin{align} L_{o} \left( x, \boldsymbol{\omega_{o}} \right) = L_{e} \left( x, \boldsymbol{\omega_{o}} \right) + \int_{S^{2}} f_{r} \left( x, \boldsymbol{\omega_{i}}, \boldsymbol{\omega_{o}} \right) L_{i} \left( x, \boldsymbol{\omega_{i}} \right) cos \theta_{\omega_{n}} d \sigma \left( \boldsymbol{\omega_{i}} \right) \tag{1} \end{align} \]

式1では, 方向 \(\omega_{i}\) を中心とした微小立体角を半球上で積分することによって 放射輝度の計算を行っている.

一方で,入射方向 \(\omega_{i}\) ,出射方向 \(\omega_{o}\) の代わりに, 下図のように空間中の3点を接続する形のレンダリング方程式を考えることもできる.

3点接続のレンダリング方程式では, 点 \(x^{''}\) を中心とした微小面積を 空間中の物体上で積分することで放射輝度の計算を行う.

微小面積の積分では,点 \(x\) から半球を通して見える範囲の微小面積のみを積分したい. そこで次の関数を導入する.

\[ \begin{align} V \left( x \leftrightarrow x^{''} \right) = \begin{cases} 1 \ \ \left( x と x^{''} の間に遮蔽物が無い場合 \right) \\ 0 \ \ \left( x と x^{''} の間に遮蔽物がある場合 \right) \end{cases} \tag{2} \end{align} \]

この関数によって,点 \(x\) から半球を通して見えない微小面積をカットする.

次に,微小立体角 \(d \sigma\) と微小面積 \(dA\) の関係は,下図から式3のように表すことができる.

\[ \begin{align} d \sigma = \frac{dA cos \theta_{\omega_{n^{''}}}}{\left| x - x^{''} \right|^{2}} \tag{3} \end{align} \]

式2,3から,式1を基にして微小面積を積分する形のレンダリング方程式は

\[ \begin{align} L_{o} \left( x \rightarrow x^{'} \right) = L_{e} \left( x \rightarrow x^{'} \right) + \int_{M} f_{r} \left( x^{'} \rightarrow x \rightarrow x^{''} \right) L \left( x \leftarrow x^{''} \right) V \left( x \leftrightarrow x^{''} \right) \frac{cos \theta_{\omega_{n}} cos \theta_{\omega_{n^{''}}}} {\left| x - x^{''} \right|^{2}} dA \left( x^{''} \right) \tag{4} \end{align} \]

となる.

まとめ

本ページではレンダリング方程式の変数変換について簡単にまとめた. 積分の変数変換ができれば,論文の式の検証ができたり自分で新しい式を考えることができて 便利です.

参考文献

  1. James T. Kajiya: The rendering equation (1986)