このページではフォトンマッピングの理論について解説しています。前提知識としてパストレーシングのアルゴリズムや、モンテカルロ積分, Path Integral LTEなどについて知っているものとします。これらの話題については
で詳しく解説されているので、是非見て下さい。
TL;DR
- をカーネル関数としてと関数近似できる
- この近似をPath Integral LTEに適用する
- これをモンテカルロ積分で解く
フォトンマッピングとは
Henrik Wann Jensenという方が90年代の終わりに提唱した光輸送アルゴリズムです。光輸送アルゴリズムには パストレーシング(Path Tracing) や 双方向パストレーシング(Bidirectional Path Tracing - BDPT) といった手法がありますが、フォトンマッピングは 集光模様(Caustics) や SDSパス(SDS Path) と呼ばれる光の経路のレンダリングに強いアルゴリズムです。実装すると以下のような水の底でゆらめく光の模様を綺麗にレンダリングすることができます。
SDSパスとはSpecular - Diffuse - Specularとなるような光の経路のことです。例えばガラスに覆われているようなDiffuse面はSDSパスを持ちます。
このような経路はパストレーシングや双方向パストレーシングなどの手法ではSpecular面に挟まれているが故にレンダリングが難しいです。特に光源に点光源、カメラにピンホールカメラを使っているような場合には、このようなパスをサンプリングする確率は0となり、レンダリングが不可能となります。
アルゴリズムの流れ
フォトンマッピングのアルゴリズムの基本的な流れは以下の通りです。
まず、光源から フォトン(Photon) と呼ばれる光のエネルギーを運ぶ仮想の粒子を飛ばし、パストレーシングと同じようにシーン中で反射を繰り返します。この時、Diffuse面に当たる度にフォトンを フォトンマップ(Photon Map) に格納しておきます。
次に視点側からレイトレーシングを行い、Diffuse面に当たったらフォトンマップから近くにあるフォトンをクエリし、反射放射輝度の推定を行います。フォトンには点の位置, 入射方向, Throughputなどの情報が格納されているので、これらを利用して放射輝度の推定を行います。
Specular面に当たった場合にはDiffuse面に当たるまで再帰的にレイを追跡し、Diffuse面でフォトンマップを用いた放射輝度推定を行います。
フォトンマッピングとは光源側から生成したパスをフォトンマップにキャッシュしておき、カメラ側から生成したパスと効率良く繋げる手法と言えます。つまり双方向パストレーシングのような双方向アルゴリズムの1つです。
また、パスをつなげる際には近くにあるフォトンを利用しているため、一定の範囲で "緩く" 接続していると言えます。これによってSDSパスをレンダリングすることが可能になっています。これはパストレーシングや双方向パストレーシングなどのような "点と点を結ぶ" 手法とは大きく異なり、フォトンマッピングを特徴付ける重要な点と言えます。
フォトンマッピングの理論
ここではフォトンマッピングの理論的な部分について
をベースにしながら解説していきます。ここで述べる定式化はJensenのオリジナルのものとは全く異なりますが、フォトンマッピングのアルゴリズムをPath Integral LTEの形で書けるため理論的により明確です。モンテカルロ積分としての解釈も容易なので、後でThroughputの計算を導出する際にも役に立ちます。
カーネル関数近似
ある関数の値を、周辺のの値を使って推定することを考えます(関数補間)。
カーネル関数(Kernel Function) とは以下のように積分して1になるような関数のことを言います。
このような関数を用いるとは以下のように周辺の値を使って近似することができます。
これを カーネル関数近似 と呼ぶことにします。
例えばとしてデルタ関数を用いれば
となり, と一致します。
もちろん実際にはデルタ関数を用いることは出来ないので、以下のようにでピークを持つような関数を用いて推定を行います。この関数は平均0, 分散の正規分布の密度関数です。このようなカーネルをガウシアンカーネルと呼びます。
幅の広いカーネルを用いるほど関数近似の誤差は大きくなります。
上で説明したのは1次元の場合でしたが、多次元の場合は
のように点と点の間の距離を使うことで1次元のカーネルに帰着させて同様に関数近似が行えます。
3点形式のLTEのカーネル関数近似
以下のような3点形式のLTEに対してカーネル関数近似を適用することを考えます。
- : からに出射する放射輝度
- : シーン上の点全体
- : からに入射する放射輝度
- : BSDF
- : 幾何項
今、で, , の値を知ることができないとします。この場合でカーネル関数近似を適用すると
となり、周辺のの位置でのやの値を使って推定することができます。これが3点形式のLTEにカーネル関数近似を適用した形です。
3点形式のLTEのカーネル関数近似(緩く接続した場合)
式(1)ではを全てに置き換えてカーネル関数近似を行っていました。全て置き換えるのではなく、部分的に置き換える場合を考えます。
ここではの中身をからに変えています。図で表すと以下のような形です。
このパスはとを無理やり繋げた形になっています。これは物理的に正確な意味でのパスではありません(地面に沿って光が進んでいるということになる)。 そのような意味で"緩く"接続されたパスと言えます。
何故このような緩い接続を考えるかと言うと、冒頭でも述べた通り、フォトンマッピングではこの緩い接続がSDSパスなどをレンダリングするために重要であり、これを理論的に説明するためにこのような緩いカーネル関数近似を考えます。
Path Integral LTEのカーネル関数近似
続いてカーネル関数近似をPath Integral LTEに適用することを考えます。簡単のため経路長3のパスのPath Integral LTEを考えます。
- : 番目のピクセルの寄与
- : シーン上の点全体
- : 光源から出る放射輝度
- : 幾何項
- : BSDF
- : 番目のピクセルのセンサー応答
今, で緩い接続の意味でのカーネル関数近似を適用するとします。式は以下のようになります。
この式はにおいてフォトンマップを用いて放射輝度推定を行っていることに対応します(フォトンの位置は)。
モンテカルロ積分
先程のPath Integral LTEの緩いカーネル関数近似をモンテカルロ積分することを考えます。
今、光源側からフォトンを飛ばしてと経路を構築し、カメラ側からパストレーシングによってと経路を構築したとします。この時、先程の緩いカーネル関数近似を行ったPath Integral LTEのモンテカルロ積分は以下のように書けます。
- : 経路生成のサンプル数
- : 点を生成する確率密度
- : 点から点を生成する時の条件付き確率密度
ここで上付きのは番目のサンプルを表しています。この式は各で毎回光源側とカメラ側からランダムに経路構築を行い、とを緩く接続するようなアルゴリズムを表現しています。
フォトンのThroughputを
カメラ側からのレイのThroughputを
とすると、式(2)は以下のように書けます。
フォトンマッピング
式(2)は各で光源側とカメラ側から毎回別々の経路を構築するような式になっていました。フォトンマッピングでは冒頭で述べた通り、フォトンマップを使うことで予め光源側からのパスの生成を行ってキャッシュしておきます。
フォトンマップ作成に使うフォトン数を、カメラ側からの経路生成のサンプル数をとすると、式(2)は以下のように書き換えることができます。
ここでで囲った部分がフォトンマップを用いた放射輝度推定に対応する部分です。フォトンマッピングの説明でよく 密度推定(Density Estimation) と言われている部分に対応します。(以上の議論の流れを見れば分かる通り、密度推定というよりは関数近似と呼ぶほうが適切なように思います)
の部分はカメラ側からのパストレーシングの部分に対応します。これをの項と掛け合わせることで番目のピクセルの値が推定できます。
式(3)では内の総和を全てのフォトンに対して行っていますが、実際にはカーネル関数は点から離れたところでは0または非常に小さな値を取ります。例えばカーネル関数として
という半径の円上で定数となるようなカーネルを使うと、点から半径以上の位置にあるフォトンに対して総和を取っても、カーネルの値が0になるため無駄です。そこで実際にはの近傍にあるフォトンのみを用いて総和を取ります。このためフォトンマップを表現するデータ構造としては近傍探索が効率良く行えるOctreeやKd-treeなどのデータ構造が選ばれます。
式(3)がフォトンマッピングの理論的な部分を全て説明する式です。今回は経路長3の場合で考えましたが、他の経路長の場合でも同様の式を得ることができます。
次回は今回の内容を元に、フォトンマッピングの実装について説明します。
References
- Jensen, Henrik Wann. Realistic image synthesis using photon mapping. AK Peters/crc Press, 2001.
- https://pbr-book.org/3ed-2018/Light_Transport_III_Bidirectional_Methods/Stochastic_Progressive_Photon_Mapping#
- Jensen, Henrik Wann. "Global illumination using photon maps." Eurographics workshop on Rendering techniques. Springer, Vienna, 1996.
- Veach, Eric. Robust Monte Carlo methods for light transport simulation. Stanford University, 1998.
- Hachisuka, Toshiya, Jacopo Pantaleoni, and Henrik Wann Jensen. "A path space extension for robust light transport simulation." ACM Transactions on Graphics (TOG) 31.6 (2012): 1-10.