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)

2017年8月13日日曜日

Layered Diffuse Surface (Interfaced Lambertian BRDF)

Layered Diffuse Surface (Interfaced Lambertian BRDF)

このページは レイトレ合宿5‽ アドベントカレンダー第9週目の記事です.

本ページでは,モンテカルロレイトレーシング法において, 上図のような鏡面反射する層を持った拡散反射基板の表面 (Interfaced Lambertian BRDF) をレンダリングする方法を説明します. Interfaced Lambertian BRDF の実装に必要な パラメータや数式,重点的サンプリングの方法を説明します.

記号について

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

記号 説明
\(\omega_{n}\) Macrosurfaceの単位法線ベクトル
\(\omega_{m}\) Microsurfaceの単位法線ベクトル,本ページではマイクロファセット法線と呼ぶ
\(\omega_{i}\) 入射方向の単位ベクトル
\(\omega_{o}\) 反射方向の単位ベクトル
\(f_{r}\) BRDF
\(n_{i}\) 入射側の媒体の屈折率
\(n_{o}\) 透過側の媒体の屈折率
\(n\) \(\frac{n_{o}}{n_{i}}\)
\(F\) フレネル項

本モデルについて

Interfaced Lambertian BRDF は,下図のようにフレネル反射層と拡散反射基板から構成されます. このモデルは,フレネル反射層の境界での鏡面反射と 層内部の多重反射後の散乱を考慮しています. フレネル反射層と拡散反射基板はそれぞれ鏡面反射,拡散反射のMicrofacetモデルで表現され, 必要なパラメータもそれぞれのMicrofacetモデルのパラメータを組み合わせるだけの シンプルなモデルとなっています.

Interfaced Lambertian BRDF

Interfaced Lambertian BRDF の評価は, 入射光に対する鏡面反射 \(f_{s}\) と, 多重反射後の散乱 \(f_{b}\) に分けて行います.

\[ \begin{align} f_{r} \left( x, \omega_{i}, \omega_{o} \right) = f_{s} \left( x, \omega_{i}, \omega_{o} \right) + f_{b} \left( x, \omega_{i}, \omega_{o} \right) \tag{1} \end{align} \]

入射光に対する鏡面反射 \(f_{s}\) には, 鏡面のMicrofacetモデルを用います (Beckman,GGXなど) .

\[ \begin{align} f_{s} \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{2} \end{align} \]

多重反射後の散乱 \(f_{b}\) は, 拡散反射面のMicrofacetモデルに, 入射光の内部への屈折 \(T \left( \omega_{i}, \omega_{m} \right)\) と 内部での多重反射 \(\frac{1}{\pi n^{2} \left( 1 - r_{i} \rho \right) }\) と, 内部から外部へ散乱する時の屈折 \(T \left( \omega_{o}, \omega_{m} \right)\) を 考慮したものになります.

\[ \begin{align} f_{b} \left( x, \omega_{i}, \omega_{o} \right) = & \frac{\rho}{\pi n^{2} \left( 1 - r_{i} \rho \right)} \int T \left( \omega_{i}, \omega_{m_{b}} \right) T \left( \omega_{i}, \omega_{m_{b}} \right) D \left( \omega_{m_{b}} \right) G \left( \omega_{i}, \omega_{o}, \omega_{m_{b}} \right) \frac{ \left| \omega_{i} \cdot \omega_{m_{b}} \right| \left| \omega_{o} \cdot \omega_{m_{b}} \right| } { \left| \omega_{i} \cdot \omega_{n} \right| \left| \omega_{o} \cdot \omega_{n} \right| } d \omega_{m_{b}} \\ r_{i} = & 1 - \frac{1 - r_{e}}{n^{2}} \\ r_{e} = & \frac{1}{2} - \frac{2 n^{3} \left( n^{2} + 2 n - 1 \right)} {\left( n^{2} + 1 \right) \left( n^{4} - 1 \right)} + \frac{\left( n - 1 \right) \left( 3 n + 1 \right)} {6 \left( n + 1 \right)^{2}} + \frac{8 n^{4} \left( n^{4} + 1 \right)} {\left( n^{2} + 1 \right) \left( n^{4} - 1 \right)^{2}} ln \left( n \right) + \frac{n^{2} \left( n^{2} - 1 \right)^{2}} {\left( n^{2} + 1 \right)^{3}} ln \left( \frac{n - 1}{n + 1} \right) \tag{3} \end{align} \]

この式には積分が含まれているため,モンテカルロ法を用いて Microfacet法線 \(\omega_{m_{b}}\) をサンプリングして解きます.

\[ \begin{align} f_{b} \left( x, \omega_{i}, \omega_{o} \right) = \frac{\rho}{\pi n^{2} \left( 1 - r_{i} \rho \right)} \frac{ T \left( \omega_{i}, \omega_{m_{b}} \right) T \left( \omega_{i}, \omega_{m_{b}} \right) D \left( \omega_{m_{b}} \right) G \left( \omega_{i}, \omega_{o}, \omega_{m_{b}} \right) \frac{ \left| \omega_{i} \cdot \omega_{m_{b}} \right| \left| \omega_{o} \cdot \omega_{m_{b}} \right| } { \left| \omega_{i} \cdot \omega_{n} \right| \left| \omega_{o} \cdot \omega_{n} \right| }} {p \left( \omega_{m_{b}} \right) } \tag{4} \end{align} \]

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

Interfaced Lambertian BRDF の重点的サンプリングは, フレネル反射層の反射分布,もしくは拡散反射基板の反射分布に従ってサンプリングを行います.

まず最初は,フレネル反射層,拡散反射基板どちらの反射分布に従ってサンプリングを行うかを決定します. ここでは,フレネル反射層,拡散反射基板それぞれの総反射率をもとに確率的に決定します.

\[ \begin{align} R_{s} = & r_{e} \\ R_{b} = & \frac{ \left( 1 - r_{e} \right) ^{2} \rho } { n^{2} \left( 1 - r_{i} \rho \right) } \tag{5} \end{align} \]

\(R_{s}\)\(R_{b}\) はそれぞれフレネル反射層,拡散反射基板の総反射率です. \(u_{1} \in [0, 1)\) となる一様乱数を用いて, \(u_{1} < \frac{R_{s}}{ \left( R_{s} + R_{b} \right) }\) となる場合は フレネル反射層の反射分布に従ったサンプリングを行い,そうでない場合は, 拡散反射基板の反射分布に従ったサンプリングを行います.

フレネル反射層の反射分布のpdf \(p_{s} \left( \omega_{o} \right)\) や 反射方向のサンプリング方法は層のMicrofacetモデルに従う (Beckman,GGXなど). 反射方向のサンプリングの方法については,アドベントカレンダー第8回Rough Specular Surface (GGX BRDF) を参照してください.

拡散反射基板の反射分布のpdf \(p_{b} \left( \omega_{o} \right)\) は,

\[ \begin{align} p_{b} \left( \omega_{o} \right) = \frac{ \left( \omega_{o} \cdot \omega_{n} \right) }{\pi} \tag{6} \end{align} \]

であり, \(p_{b} \left( \omega_{o} \right)\) に従って反射方向をサンプリングします. 反射方向のサンプリング方法は Smooth Diffuse Surface (Lambert BRDF) を参照してください.

最終的な反射方向のpdf \(p \left( \omega_{o} \right)\) は,

\[ \begin{align} p \left( \omega_{o} \right) = \frac{R_{s}}{ \left( R_{s} + R_{b} \right) } p_{s} \left( \omega_{o} \right) + \frac{R_{b}}{ \left( R_{s} + R_{b} \right) } p_{b} \left( \omega_{o} \right) \tag{7} \end{align} \]

となります.

まとめ

パラメータ

名称 記号
拡散反射基板の反射率 \(\rho\) \(0 \le \rho \le 1\)
表面粗さ \(roughness\) \(0 < roughness \le 1\)

レンダリング

名称 記号
BRDF \(f_{r} \left( x, \omega_{i}, \omega_{o} \right)\) \(f_{s} \left( x, \omega_{i}, \omega_{o} \right) + f_{b} \left( x, \omega_{i}, \omega_{o} \right)\)
pdf \(p \left( \omega_{o} \right)\) \(\frac{R_{s}}{ \left( R_{s} + R_{b} \right) } p_{s} \left( \omega_{o} \right) + \frac{R_{b}}{ \left( R_{s} + R_{b} \right) } p_{b} \left( \omega_{o} \right)\)
反射レイのWeight \(\frac{f_{r} \left( x, \omega_{i}, \omega_{o} \right) \left( \omega_{o} \cdot \omega_{n} \right)} {p \left( \omega_{o} \right)}\) \(\frac{f_{r} \left( x, \omega_{i}, \omega_{o} \right) \left( \omega_{o} \cdot \omega_{n} \right)} {p \left( \omega_{o} \right)}\) (特にキャンセルできる項は無い)

以上,Interfaced Lambertian BRDFについて簡単にまとめました.

参考文献

  1. Daniel Meneveaux: Rendering Rough Opaque Materials with Interfaced Lambertian Microfacets (2017)