このページではMathJaxによる数式表示を行っています。対応しているブラウザーであれば少し待てば数式が表示されます。
(画面左下にMathJaxのタイプセットステータスが表示されます。)
環境によっては表示が崩れているかもしれません。その際はブラウザーを変更してみてください。

双方向パストレーシング (Bidirectional Path Tracing)

双方向パストレーシング[Veach1995]は視点・光源双方から経路を生成し、それぞれの頂点を接続することにより多彩な戦略により光輸送経路を構築する手法です。またそれぞれの経路には多重重点的サンプリングに基づいて適切なウェイトが付加され、パストレーシングよりもロバストなアルゴリズムとなります。
実装が簡単な割にロバストなフォトンマッピングの影に隠れがちな双方向パストレーシングですが、実際にはそれぞれのアルゴリズムには長所・短所があります。また二者を融合させた手法も開発されており、それらの理解のためには当然双方向パストレーシングの理解が必要になります。

双方向パストレーシングの動機

双方向パストレーシングのコンセプト
図1. 双方向パストレーシング
双方向パストレーシングでは光源・視点双方からサブパスを生成してそれぞれの頂点を接続、完全な光輸送経路を構築する。

光源から出た光は無数の経路をとりますが、そのうち目やカメラといった視点に届く経路は極々一部です。視点から見た画を作るという目的の下では、視点側から経路を作ったほうが有効な経路を構築しやすいため、パストレーシングでは視点側からのトレースを行います。一方で、視点側だけから経路を構築していても、そもそも最終的に光源と結ばれないと無意味であるため、1点だけは光源側から経路を構築しようという考えが、既に紹介済みのNext Event Estimation(以下NEE)です。

実際には、1点と言わずもっと光源側から経路を構築した方が効率的にサンプリングできる経路が存在します。その代表例に挙げられるのが、コースティクス(caustics, 集光模様)パスと呼ばれる経路です。机の上に置かれたガラス製のコップの近くに光が集まっているのを見たことがあると思いますが、あのような光の集まりをコースティクスと呼びます。 レイトレーシングの分野ではコースティクスパスを正規表現を使ってLS+DEと記述します。光源(L, Light)を出た光が鏡面反射・透過(S, Specular)を1回以上(+)経由、最終的に拡散反射・透過面(D, Diffuse)に当たって目(E, Eye)に入る経路を表しています。多重重点的サンプリング」で示したように、NEEは鏡面上では低効率になりがち(完全鏡面ではそもそも全く役に立たない)ですし、パストレーシングでコースティクスをサンプリングするには、最初の拡散反射・透過の時点でうまい具合に鏡面を経由して光源へと至る方向をサンプリングする必要があります。しかし、その拡散反射方向のサンプリングも光源へと向かいやすいようにサンプリングするのは難しく、またコースティクス以外の経路の効率を考えるとそのようなサンプリングを行うべきではありません。結局パストレーシング + NEEではコースティクスパスの効率的なサンプリングは難しくなります(一部のコースティクスパスに関しては解決策も提案されている[Hanika2015])。コースティクスパスは典型的には、拡散面までは光源側から経路を構築しておいて、視点側は1点のみサンプリング、それらを接続する戦略が効率的です。

短い経路、長い経路、経由した面の反射特性(拡散、光沢、鏡面)、センサー感度や光源の方向依存性など様々な要素が重なって、経路ごとに最適な構築戦略が定まります。前置きが長くなりましたが、双方向パストレーシングでは視点・光源の両方から部分的な経路(サブパス, subpathと呼ぶ)を構築、それらの頂点を接続(図1)することによって完全な光輸送経路を構築、様々な戦略を以ってレンダリング方程式の解を推定します。また、あるひとつの光輸送経路に対して複数の戦略が考えられるのですが、推定値を単純平均とするのではなく、多重重点的サンプリングを用いて適切なウェイトを求めることで劇的に分散が低減されます。

フォトンマッピングも双方向にレイトレースを行う手法ですが、基本的に使うサンプリング戦略は1種類です。そのため光沢反射が多いシーンなどでは分散が大きくなってしまいますが、双方向パストレーシングは様々な戦略を組み合わせることによって、そのようなシーンをうまく扱うことができます。

概要

双方向パストレーシングでは、前述の通り光源と視点の両側からそれぞれのサブパスを構築して接続します。光源側からトレースする光線サブパス(light subpath)は1つ目の頂点(光源面上にある)を $ \by_0 $ とすると $ n_L $ 個の頂点がある場合、次のように示されます。

\begin{equation*} \by_0 \by_1 ... \by_{n_L - 1} \end{equation*}

同様に視点側からトレースする視線サブパス(eye subpath)は1つ目の頂点(センサー上、センサー・レンズ間の経路を隠蔽している場合はレンズ面上にある)を $ \bz_0 $ とすると $ n_E $ 個の頂点がある場合、次のように示されます。

\begin{equation*} \bz_{n_E - 1} ... \bz_1 \bz_0 \end{equation*}

これら2つのサブパスの頂点を接続することによって複数の完全な光輸送経路を構築することができます。光源側、視点側のサブパスそれぞれの $ s, t $ 個目の頂点間を接続して作る長さ $ k = s + t - 1 $ の完全な経路 $ \bar{x}_{s, t} $ は次のように表されます。

\begin{equation*} \bar{x}_{s, t} = \by_0 \by_1 ... \by_{s - 1} \bz_{t - 1} ... \bz_1 \bz_0 \end{equation*}

ここで、接続する2つの頂点の選びかたによって様々なサンプリング戦略を考えることができます。例えば図2に示すように、長さ3の経路の場合は5つの戦略を考えることができます。

経路長3のサンプリング戦略
図2. 経路長3のサンプリング戦略
光線と視線、2つのサブパスを接続する頂点の選びかたによって長さ3の経路の場合は5つのサンプリング戦略を考えることができる。なお $ (s = 0, \;t = 4) $, $ (s = 4, \;t = 0) $ に関しては、厳密には接続しておらず、サブパスだけで光源から視点までを結ぶ完全な経路となっている。

注意点としては、あるサブパスの組を考えたときに、それらの接続頂点の組み合わせで図2に示すような同じ経路に関する全ての戦略が現れるわけではないことが挙げられます。ある1本の経路に関する様々なサンプリング戦略は、サブパスの組をランダムに何度も構築しているうちに個別かつ確率的に現れます。

光線・視線サブパスそれぞれから $ s, t $ 個の頂点を使って経路 $ \bar{x}_{s, t} $ をサンプリングする確率密度を $ p_{s, t}(\bar{x}_{s, t}) $ で表すと、 経路 $ \bar{x}_{s, t} $ の単純なモンテカルロ推定関数としての寄与 $ C^*_{s, t}(\bar{x}_{s, t}) $ は次のように表されます。

\begin{equation} C^{*}_{s, t}(\bar{x}_{s, t}) = \frac{f_j(\bar{x}_{s, t})}{p_{s, t}(\bar{x}_{s, t})} \label{eq:unweighted_contribution} \end{equation}

ここで $ f_j(\bar{x}) $ は、「レンダリング方程式2」で紹介した、経路 $ \bar{x} $ に関するmeasurement contribution functionであり、光源の放射輝度から始まり、BSDFや幾何項、そしてセンサー応答関数の積で表されます。簡単に言うとある経路 $ \bar{x} $ の画像への寄与を表しています。ひとつのサンプリング戦略(ここでは光源側から $ s $ 個の頂点、視点側から $ t $ 個の頂点を構築する戦略)しか使わない単純なモンテカルロ推定関数の場合なら、ランダムにいくつもサンプルした経路に関して $ C_{s, t}^*(\bar{x}_{s, t}) $ の平均を考えることで経路長 $ k = s + t - 1 $ による結果の推定になります。しかし、双方向パストレーシングの場合はひとつの経路に対して複数のサンプリング戦略を考えるため、多重重点的サンプリングのウェイト(以下MISウェイト)がかかることになります。そのため、$ C_{s, t}^*(\bar{x}_{s, t}) $ をunweighted contribution (日本語の定訳は無いと思いますが、そのままウェイト無しの寄与とでも呼びますか)と呼び、MISウェイトをかけた寄与を $ C_{s, t}(\bar{x}_{s, t}) = w_{s, t}(\bar{x}_{s, t}) C^*_{s, t}(\bar{x}_{s, t}) $ で表します。そして以下に示すように、様々な経路長、サブパス長の $ C_{s, t}(\bar{x}_{s, t}) $ の総和を考えることで双方向パストレーシングによる推定関数が作られます。

\begin{equation*} \Abk{I_j} = \sum_{s \ge 0} \sum_{t \ge 0} C_{s, t}(\bar{x}_{s, t}) = \sum_{s \ge 0} \sum_{t \ge 0} w_{s, t}(\bar{x}_{s, t}) \frac{f_j(\bar{x}_{s, t})}{p_{s, t}(\bar{x}_{s, t})} \end{equation*}

サブパスの生成

ある経路 $ \bar{x}_{s, t} $ が生成される確率密度 $ p_{s, t}(\bar{x}_{s, t}) $ は次のように2つのサブパスそれぞれを生成する確率密度 $ p_s^L $ と $ p_t^E $ の積で表されます。

\begin{equation*} p_{s, t}(\bar{x}_{s, t}) = p_s^L(\by_0 \by_1 ... \by_{s - 1}) \; p_t^E(\bz_{t - 1} ... \bz_1 \bz_0) \end{equation*}

サブパスの端点が決まれば、接続辺は決定的に決まるので接続に関する確率密度は無く、単純な積となっています。
経路 $ \bar{x}_{s, t} $ によるウェイト無しの寄与 $ C_{s, t}^*(\bar{x}_{s, t}) $ は次のように表すことができます。

\begin{equation*} C_{s, t}^*(\bar{x}_{s, t}) = \alpha_s^L c_{s, t} \alpha_t^E \end{equation*}

ここで $ \alpha_s^L, \alpha_t^E $ はそれぞれ光線サブパスと視線サブパスのみから求まる寄与の部分的な要素です。 $ c_{s, t} $ はサブパスの接続頂点が作る辺 $ \by_{s - 1} \bz_{t - 1} $ から求まる量となっています。 $ C_{s, t}^*(\bar{x}_{s, t}) $ は式\eqref{eq:unweighted_contribution}の形でも表したように、最終的にはある経路に関するmeasurement contribution functionをその経路が生成される確率密度 $ p_{s, t}(\bar{x}_{s, t}) $ で割った値となります。
この節では、それぞれのサブパスの生成確率密度 $ p_s^L, p_t^E $ と寄与 $ \alpha_s^L, \alpha_t^E $ の求めかたについて順々に解説します。

視線サブパス
(a) 視線サブパス
光線サブパス
(b) 光線サブパス
図3. 2つのサブパス

サブパスを生成する確率密度

光線サブパスの1つ目の頂点 $ \by_0 $ は光源面をサンプリング、視線サブパスの1つ目の頂点 $ \bz_0 $ はレンズ面(もしくはセンサー面)をサンプリングすることでそれぞれ得られます。これらの面積測度に関する確率密度 $ p_A(\by_0),\; p_A(\bz_0) $ はそのまま計算できます。それぞれのサブパスの2つ目の頂点 $ \by_1,\; \bz_1 $ に関しては、光源上の点 $ \by_0 $ からの光の出射方向をサンプリング、レンズ上の点 $ \bz_0 $ からの光の入射方向をサンプリングすることで得られます。前者は特に問題無いと思いますが、後者の確率密度の求め方は少しややこしくなっています。「被写界深度(Depth of Field)」で解説しています。また、前者についても無限遠光源を扱う場合には1点目を含めて特殊な扱い方が必要になります。「無限遠光源の扱い方」で解説しています。これらの確率密度 $ p_{\sigma^\perp}(\by_0 \RAR \by_1),\; p_{\sigma^\perp}(\bz_0 \RAR \bz_1) $ は投影立体角測度に関して表されています。面積測度に関する確率密度 $ p_A(\by_1),\; p_A(\bz_1) $ に次のように変換することができます。

\begin{equation*} p_A(\by_1) = p_{\sigma^\perp}(\by_0 \RAR \by_1) G(\by_0 \LRAR \by_1) \end{equation*} \begin{equation*} p_A(\bz_1) = p_{\sigma^\perp}(\bz_0 \RAR \bz_1) G(\bz_0 \LRAR \bz_1) \end{equation*}

ここで、$ G(\by_0 \LRAR \by_1),\; G(\bz_0 \LRAR \bz_1) $ は幾何項を表しています。

次に、3つ目の頂点以降の確率密度の求めかたですが、これ以降はどちらのサブパスもBSDFにおける反射・透過方向のサンプリングが続きます。その確率密度は2点目と同様に、$ p_{\sigma^\perp}(\by_{i - 2} \RAR \by_{i - 1}),\; p_{\sigma^\perp}(\bz_{i - 2} \RAR \bz_{i - 1}),\;\; i \ge 3 $ で表されます。面積測度への変換も同様に1つ前の頂点との間の幾何項をかけることで行います。
$ i $ 個目までの頂点を含んだサブパスを構築する確率密度 $ p_i^L,\; p_i^E $ は、次のようにそれぞれの頂点をサンプリングする確率密度の積で表されます。

\begin{eqnarray*} p_1^L &=& p_A(\by_0) \\ p_i^L &=& p_A(\by_{i - 1}) p_{i - 1}^L \\ &=& p_{\sigma^\perp}(\by_{i - 2} \RAR \by_{i - 1}) G(\by_{i - 2} \LRAR \by_{i - 1}) p_{i - 1}^L \hspace{5mm} \mbox{for} \;\; i \ge 2 \end{eqnarray*} \begin{eqnarray*} p_1^E &=& p_A(\bz_0) \\ p_i^E &=& p_A(\bz_{i - 1}) p_{i - 1}^E \\ &=& p_{\sigma^\perp}(\bz_{i - 2} \RAR \bz_{i - 1}) G(\bz_{i - 2} \LRAR \bz_{i - 1}) p_{i - 1}^E \hspace{5mm} \mbox{for} \;\; i \ge 2 \end{eqnarray*}

実際には方向のサンプリングに加えて、ロシアンルーレットによってサブパスの構築を確率的に打ち切ることになるので、継続確率も考慮に加える必要があります。

サブパスの寄与率

サブパスを構築する確率密度の次は、それぞれのサブパスの部分的な寄与について解説します。最初の頂点における寄与の大きさ $ \alpha_1^L, \alpha_1^E $ は次のように表されます。

\begin{equation*} \alpha_1^L = \frac{L_e^{(0)}(\by_0)}{p_A(\by_0)} \end{equation*} \begin{equation*} \alpha_1^E = \frac{W_e^{(0)}(\bz_0)}{p_A(\bz_0)} \end{equation*}

2つ目の頂点以降の寄与は次のようになります。

\begin{equation*} \alpha_i^L = \frac{f_s(\by_{i - 3} \RAR \by_{i - 2} \RAR \by_{i - 1})}{p_{\sigma^\perp} (\by_{i - 2} \RAR \by_{i - 1})} \alpha_{i - 1}^L \hspace{5mm} \mbox{for} \;\; i \ge 2 \end{equation*} \begin{equation*} \alpha_i^E = \frac{f_s(\bz_{i - 1} \RAR \bz_{i - 2} \RAR \bz_{i - 3})}{p_{\sigma^\perp} (\bz_{i - 2} \RAR \bz_{i - 1})} \alpha_{i - 1}^E \hspace{5mm} \mbox{for} \;\; i \ge 2 \end{equation*}

ただし2頂点目はBSDFではなく、光源やレンズからの方向のサンプリングによって生成されるため、$ i = 2 $ の場合は光線サブパスに関して $ f_s(\by_{i - 3} \RAR \by_{i - 2} \RAR \by_{i - 1}) = L_e^{(1)}(\by_0 \RAR \by_1) $、視線サブパスに関して $ f_s(\bz_{i - 1} \RAR \bz_{i - 2} \RAR \bz_{i - 3}) = W_e^{(1)}(\bz_0 \RAR \bz_1) $ とします。ここで $ L_e(\by_0 \RAR \by_1) = L_e^{(0)}(\by_0) L_e^{(1)}(\by_0 \RAR \by_1) $ です。つまり $ L_e^{(0)}(\by_0) $ と $ L_e^{(1)}(\by_0 \RAR \by_1) $ あわせて光源から放射される放射輝度を表しています。同様に、$ W_e(\bz_0 \RAR \bz_1) = W_e^{(0)}(\bz_0) W_e^{(1)}(\bz_0 \RAR \bz_1) $ であり、あわせてレンズ(センサー)に入射する放射束に対するセンサー応答を表しています。$ L_e^{(0)}(\by_0),\; W_e^{(0)}(\bz_0) $ が位置に関する要素、$ L_e^{(1)}(\by_0 \RAR \by_1),\; W_e^{(1)}(\bz_0 \RAR \bz_1) $ が方向に関する成分を表しています。

3頂点目以降はBSDFのサンプリングが続きます。ここで注意してほしい点が、BSDF内の頂点の記述順です。どちらのサブパスにおいてもBSDFの頂点順は現実の光と同じように光源から視点に近づく方向となっています。BRDFは相反性を持っているため問題にはなりませんが、BTDFのことを考えるとBSDFを評価する際にはこの点に気を遣う必要があります。

measurement contribution functionに含まれる幾何項 $ G $ は面積測度に関する確率密度にも同じものが含まれるためキャンセルされて上記の式には現れなくなります。残った確率密度は投影立体角に関して記述されていますが、これを単純な立体角測度に関して表し直すこともでき、その場合は次のようになります。差はわずかですが、こちらのほうがパストレーシングでレンダリング方程式に触れている方には直感的かもしれません。

\begin{eqnarray*} \alpha_i^L = \frac{f_s(\by_{i - 3} \RAR \by_{i - 2} \RAR \by_{i - 1}) \abs{\vec{n}_{\by_{i - 2}} \cdot \vomega_{\by_{i - 2} \by_{i - 1}}}}{p_{\sigma} (\by_{i - 2} \RAR \by_{i - 1})} \alpha_{i - 1}^L \hspace{5mm} \mbox{for} \;\; i \ge 2 \\ \alpha_i^E = \frac{f_s(\bz_{i - 1} \RAR \bz_{i - 2} \RAR \bz_{i - 3}) \abs{\vec{n}_{\bz_{i - 2}} \cdot \vomega_{\bz_{i - 2} \bz_{i - 1}}}}{p_{\sigma} (\bz_{i - 2} \RAR \bz_{i - 1})} \alpha_{i - 1}^E \hspace{5mm} \mbox{for} \;\; i \ge 2 \end{eqnarray*}

また、確率密度と同様にロシアンルーレットを行なっている場合は、分母の確率密度にサブパスの構築を継続する確率も含める必要があります。

サブパスの接続

光線サブパス、視線サブパスの生成後にはそれぞれの各頂点を接続して完全な光輸送経路を構築しますが、その経路の寄与には前節で示したように、接続辺に依存する量 $ c_{s, t} $ も含まれます。
$ c_{s, t} $ は次のように両端のBSDFと2点間の幾何項で表されます。

\begin{equation*} c_{s, t} = f_s(\by_{s - 2} \RAR \by_{s - 1} \RAR \bz_{t - 1}) \; G(\by_{s - 1} \LRAR \bz_{t - 1}) \; f_s(\by_{s - 1} \RAR \by_{z - 1} \RAR \bz_{z - 2}) \hspace{5mm} \mbox{for} \;\; s, t \ge 1 \end{equation*}

ただし、$ s = 1 $ の場合や $ t = 1 $ の場合は前節で示したように、BSDFの項は実際には光源の発光放射輝度やセンサー応答の方向成分になります。また、ときにはサブパスを生成している際に、完全な光輸送経路が完成することがあります。具体的には、光線サブパスの場合はレンズ(センサー)面まで到達した場合、視線サブパスの場合はいずれかの光源面まで到達した場合が該当します。その場合の $ c_{s, t} $ は次のように表されます。

\begin{eqnarray*} c_{0, t} &=& L_e(\bz_{t - 1} \RAR \bz_{t - 2}) \\ c_{s, 0} &=& W_e(\by_{s - 2} \RAR \by_{s - 1}) \end{eqnarray*}

ここまでの解説で、経路 $ \bar{x}_{s, t} $ によるウェイト無しの寄与 $ C^*_{s, t}(\bar{x}_{s, t}) $ と、その経路の確率密度 $ p_{s, t}(\bar{x}_{s, t}) $ を求めることができます。次節ではMISウェイトの計算について解説します。

MISウェイトの計算

光線サブパスの $ s $ 個目の頂点と視線サブパスの $ t $ 個目の頂点を接続して作られる光輸送経路 $ \bar{x}_{s, t} $ と同じ経路が他の様々な戦略によっても作られることになります。他の戦略 $ i $ によって経路 $ \bar{x}_{s, t} $ をサンプリングする確率密度 $ p_i $ を次のように記述します。

\begin{equation*} p_i = p_{i, (s + t) - i}(\bar{x}_{s, t}) \hspace{5mm} \mbox{for} \;\; i = 0, \ldots, s + t \end{equation*}

$ p_{i, (s + t) - i}(\bar{x}) $ として表されていることからもわかるように、これは前節で説明した通り、頂点数 $ i $ 個の光線サブパスと頂点数 $ s + t - i $ 個の視線サブパスの組み合わせによって $ \bar{x}_{s, t} $ (と同じ経路)を構築する確率密度となっています。$ p_s = p_{s, t} $ が実際に経路を構築した戦略の確率密度となります。
もう一度注意点として書いておくと、あるサブパスの組を考えたときに、ある形の経路 $ \bar{x} $ のサンプリング戦略全てが現れることはまずありません。例えば今は2つのサブパスの $ s $ 個目、$ t $ 個目の頂点の接続を考えていますが、$ s + 1 $ 個目、 $ t - 1 $個目の頂点を接続してみても基本的には $ \bar{x}_{s, t} $ と「同じ形」の経路にはなりません。このとき $ s + 1 $ 個目、 $ t - 1 $個目の頂点を接続する戦略はおそらく別の経路を作っていますが、経路の構築は確率的に行うので、$ \bar{x}_{s, t} $ と同じ形の経路も生成し得ることでしょう。他の戦略による確率密度 $ p_0(\bar{x}_{s, t}) \ldots p_{s - 1}(\bar{x}_{s, t}) $、$ p_{s + 1}(\bar{x}_{s, t}) \ldots p_{s + t}(\bar{x}_{s, t}) $ はそれを表しています。

パワーヒューリスティック($ \beta = 2 $)を使う場合のMISウェイトの計算は次のようになります。

\begin{equation} w_{s, t}(\bar{x}_{s, t}) = \frac{p_s(\bar{x}_{s, t})^2}{\sum_{i = 0}^{s + t} p_i(\bar{x}_{s, t})^2} \label{eq:power_heuristic} \end{equation}

例えば生成した光線サブパスと視線サブパスの頂点数がロシアンルーレットの結果、それぞれ $ 4, 3 $ になった場合を考えます。それぞれの各頂点の組み合わせ $ (s, t) \;\; 0 \le s \le 4,\; 0 \le t \le 3 $ ごとにMISウェイトの計算と寄与の蓄積を行いますが、そのうちの、 2つのサブパスの3つ目と2つ目の頂点を接続して完全な経路 $ \bar{x}_{3, 2} $ がつくられる場合を例にして考えてみましょう。
分子の確率密度は今考えている戦略のものとなるので、$ p_3(\bar{x}_{3, 2}) = p_{3, 2}(\bar{x}_{3, 2}) $ になります。分母に来る確率密度は $ \bar{x}_{3, 2} $ と同じ経路を別の戦略(現在の戦略も含む)によってサンプリングした場合の値となります。具体的に書くと、$ p_{0, 5}(\bar{x}_{3, 2}),\; p_{1, 4}(\bar{x}_{3, 2}),\; p_{2, 3}(\bar{x}_{3, 2}),\; p_{3, 2}(\bar{x}_{3, 2}),\; p_{4, 1}(\bar{x}_{3, 2}),\; p_{5, 0}(\bar{x}_{3, 2}) $ 、これら6つの値を計算します。

ところで、実際に接続しているサブパスの組では作り得ない戦略を考えてしまって良いのかな、と疑問を持つ方がいるかもしれません。前述の例で考えると、この戦略にかかるMISウェイトを計算するためには、$ (0, 5), (1, 4), (2, 3), (3, 2), (4, 1), (5, 0) $ の戦略による確率密度を考える必要があります。しかしそれぞれのサブパスの実際の頂点数はそれぞれ $ 4, 3 $ 個しか無いので $ (0, 5), (1, 4), (5, 0) $ の戦略は考えてはいけないのではないか、と思うかもしれません。
これはありがたいことに、正しくロシアンルーレットを使っていれば考えて良いことになります。ロシアンルーレットによってサブパスの長さは有限に抑えることができる一方で、確率的には無限の長さまで考慮していることになるからです。ただし、各戦略の確率密度の中にロシアンルーレットによる継続確率も含めることが重要になります。

MISウェイトの効率的な計算

MISウェイトの効率的な計算
図4. MISウェイトの効率的な計算
$ s = 3,\; t = 3 $ のサブパスの組と $ s = 4,\; t = 2 $ のサブパスの組は、それぞれが途中まで共通した経路を持っている。そのため確率密度の計算は末端の増えた分(緑)、減った分(赤)の追加計算だけで良い。

理論的には上記のように、ある経路を作り得る全ての戦略の確率密度を真面目に計算すればMISウェイトを計算できるのですが、戦略を変えても途中までは同じサブパスということに着目すれば、より効率的な計算が可能となります。例えば図4に示すように、$ s = 3,\; t = 3 $ のサブパスを接続している場合を考えます。$ s = 4,\; t = 2 $ の戦略による確率密度を計算するとき、$ s = 3,\; t = 3 $ のそれぞれの確率密度が既にわかっているのであれば、末端の変化分だけを変更すれば良いことがわかります。光線サブパスに関しては $ s = 3 $ の確率密度に対して、新たに $ \by_3 = \bz_2 $ をサンプリングする確率密度 $ p_A(\by_3) = p_{\sigma^\perp}(\by_2 \RAR \by_3) G(\by_2 \LRAR \by_3) $ を計算して乗じることで延長を考えたサブパスの確率密度がわかります。視線サブパスに関しては $ t = 3 $ の確率密度を、既知である $ p_A(\bz_2) $ で割ることで短縮したサブパスの確率密度がわかります。そして新たに計算したそれぞれのサブパスの確率密度の積が完全な光輸送経路を生成する確率密度となるので、結果として2つの戦略間の確率密度の比を次のように表すことができます。

\begin{equation*} \frac{p_4}{p_3} = \frac{p_A(\by_3)}{p_A(\bz_2)} \end{equation*}

さらに $ s = 5,\; t = 1 $ の戦略の確率密度を考える場合には既に求めた $ s = 4,\; t = 2 $ に対する変化、比を同様にして考えれば良いことがわかると思います。このように、MISウェイト計算を行うサブパスの基準となる確率密度に対して、光線サブパスを延長する方向、逆に短縮(視線サブパスを延長)する方向に累積的に確率密度を計算することで効率的なMIS計算を行うことができます。さらに式\eqref{eq:power_heuristic}を次のように変形することで、基準となる確率密度すら不要になります。

\begin{eqnarray*} w_{s, t}(\bar{x}_{s, t}) &=& \frac{p_s(\bar{x}_{s, t})^2}{\sum_{i = 0}^{s + t} p_i(\bar{x}_{s, t})^2} = \frac{1}{\displaystyle \sum_{i = 0}^{s + t} \Prt{\frac{p_i(\bar{x}_{s, t})}{p_s(\bar{x}_{s, t})}}^2} \\ \frac{1}{w_{s, t}(\bar{x}_{s, t})} &=& \Prt{\frac{p_0}{p_1} \cdots \frac{p_{s - 1}}{p_s}}^2 + \cdots + \Prt{\frac{p_{s - 2}}{p_{s - 1}} \frac{p_{s - 1}}{p_s}}^2 + \Prt{\frac{p_{s - 1}}{p_s}}^2 + \\ && 1 + \vphantom{\frac{1}{1}} \\ && \Prt{\frac{p_{s + 1}}{p_s}}^2 + \Prt{\frac{p_{s + 1}}{p_s} \frac{p_{s + 2}}{p_{s + 1}}}^2 + \cdots + \Prt{\frac{p_{s + 1}}{p_s} \cdots \frac{p_{s + t}}{p_{s + t - 1}}}^2 \end{eqnarray*}

MISウェイトの分子で分母分子を割って変形したので(表記の都合上さらに逆数にして書いています。)、ウェイトを計算している戦略 $ s $ の分母の要素が $ 1 $ となっていることがわかると思います。その後ろの項を見てみると、光線サブパスを延長した場合の確率密度に相当する項が上で説明したように比の形で表されていることがわかります。さらに後ろを見ると、比が連なった形になっていますが、一方は既に計算済みなので、新たに計算する必要のある比は1つだけとなります。前側の項は光線サブパスを短縮する場合に相当しますが、同様に累積的な比の計算になっていることがわかると思います。このように、基準となる確率密度の計算も不要になります。

スペキュラー面の扱い方

スペキュラー面はBSDFと確率密度にディラックのデルタ関数を含むために、注意が必要です。サブパスの寄与計算時と接続時、MISウェイト計算時に、経路がスペキュラー面を含んでいた場合デルタ関数が登場することになりますが、前2つの計算では問題になりません。
サブパスの寄与計算時は既に示しているように、次のような計算を行うことになります。

\begin{equation*} \alpha_i^L = \frac{f_s(\by_{i - 3} \RAR \by_{i - 2} \RAR \by_{i - 1})}{p_{\sigma^\perp} (\by_{i - 2} \RAR \by_{i - 1})} \alpha_{i - 1}^L \hspace{5mm} \mbox{for} \;\; i \ge 2 \end{equation*}

スペキュラーなBSDFのサンプリング・評価を行う場合分母分子にデルタ関数が含まれることになりますが、同じデルタ関数同士でキャンセルされて何らかの比例係数が残るだけなので問題にはなりません。次にサブパス接続時には、これも既に示した通り次の式に従って接続による放射束の伝達率を計算します。

\begin{equation*} c_{s, t} = f_s(\by_{s - 2} \RAR \by_{s - 1} \RAR \bz_{t - 1}) \; G(\by_{s - 1} \LRAR \bz_{t - 1}) \; f_s(\by_{s - 1} \RAR \by_{z - 1} \RAR \bz_{z - 2}) \hspace{5mm} \mbox{for} \;\; s, t \ge 1 \end{equation*}

いずれかの接続頂点がスペキュラーBSDFとなる場合、そもそもこの伝達率はゼロとなります(Next Event Estimationがスペキュラー面を扱えないのと同じ理由)。これは何も双方向パストレーシングの不都合でゼロになるといった訳ではなく、本当にゼロなので計算する必要がありません。

スペキュラー面が問題となるのは3つ目のMISウェイト計算時です。前述の通り、接続時にはスペキュラー成分はゼロにしかならないので、接続頂点においてスペキュラーの心配をする必要はありませんが、いずれかのサブパスが途中でスペキュラーを通過した可能性はあります。MISウェイトの計算ではサブパスを仮想的に延長・短縮しながら累積的に確率密度の比を計算しますが、スペキュラーを通過したサブパスがある場合、最初に比の分母にディラックのデルタ関数が現れることになります。デルタ関数は数値では表せない(無限大)ため、プログラム的にはデルタ関数の係数(フレネル項など)とスペキュラーであることを示すフラグをもたせておきます。デルタ関数が分母に出てきても、さらに延長・短縮を考えれば、今度はキャンセルするだけのデルタ関数が分子にも現れます。そのため、分母にデルタ関数が出てきても係数の値を使って比の計算は行っておきますが、MISウェイト計算の分母に対して値の累積は行いません。
面倒そうなことを書きましたが、スペキュラー面をサンプリングしたときに、確率密度をデルタ関数の係数値として返すようにさえ実装しておけば、後は普通通りにMISウェイトの計算を行うだけです。唯一異なるのは、仮想的に考えている戦略の接続頂点いずれかがスペキュラーを含む場合にMISウェイト計算の分母として値を累積しないだけです。

$ t \leq 1 $ の戦略の寄与の蓄積

視線サブパス側が1頂点以下の場合の問題点
図5. 視線サブパス側が1頂点以下の場合の問題点
$ t \leq 1 $ の戦略では視線サブパスで処理しているピクセルとは無関係なピクセルに寄与を蓄積する必要がある。

視線サブパスの頂点数が1個以下、つまり視線サブパスとして1個だけ生成した頂点と光線サブパスを接続する場合と、光線サブパスが直接レンズやセンサーにヒットする場合、これら2つの戦略に関して注意点があります。それは生成した経路の寄与の蓄積先となるピクセルがランダムに分布することです。視線サブパスの構築においては1点目をレンズ上に生成した後、現在のピクセル位置に応じて2点目の方向がサンプリングされますが、これらの戦略は2点目以降の接続とはならないためです。この場合光輸送経路の最後のセグメントに応じて画像上の位置を逆算する必要があります。視線サブパスの1つ目の頂点と接続する戦略においては $ \by_{s - 1} \bz_0 $が、光線サブパスが直接ヒットする戦略においては $ \by_{s - 1} \by_{s - 2} $ が最後のセグメントとなります。ちなみに、これらの戦略用に別の画像を用意することが考えられ、その画像をlight imageと呼びます。対照的に $ t \ge 2 $ の戦略用の画像をeye imageと呼びます。

上記の理由により、実装が他の戦略に比べてやや面倒になります。そこでいっそ $ t \leq 1 $ の戦略は不採用としてしまう手も考えられますが、これらの戦略による恩恵は分散低減において重要となります。とくに $ t = 1 $ の戦略はコースティクスパスを扱うことに長けているため、この戦略を不採用とするのはあまりにももったいないと言わざるを得ません。$ t = 0 $ の戦略が有用となるケースは一般的に言って少なめですが、光源が指向性を持っている、もしくは小さい場合で、光がシーン中の鏡面反射・透過を経てレンズに向かいやすいような場合には効果的です。なお、ある戦略を不採用とするにはその戦略の寄与の蓄積は当然行わず、他の戦略のMIS計算時の分母にも不採用とする戦略の確率密度を含めないようにします。

最適化

サブパスの確率的な接続

2つのサブパスの接続による経路が寄与を持つためには、接続頂点間に遮蔽物があってはなりません。そのため、接続前にはレイトレースを行って遮蔽物を調べる必要があり、それなりの計算コストになります。また短い経路となる接続のほうが、長い経路となる接続よりも結果への寄与が基本的に大きいということを考えると、前者の接続に多くの計算コストを割くべきです。2つのサブパスの頂点は必ずしも接続して寄与を計算する必要はなく、これまたロシアンルーレットの考え方を用いて確率的な接続を行うことも可能です。その場合に接続が行われるのであれば、寄与を接続確率で割ることで期待値を正しく保ちます。

$ s = 1 $ の戦略の最適化

光線サブパスの1頂点目($ s = 1 $)と、視線サブパスを接続する際、光源の形状や向きによっては光源自体が遮蔽物となって有効な光輸送経路を構築できない場合があります。しかし、接続時には視線サブパスの接続頂点の位置の情報が与えられているため、その情報を基にしてより優れたサンプリング戦略を用いて光線サブパスの1頂点目を作ることが考えられます。1頂点だけなのでレイトレースを行う必要も無く、低コストに行えます。ウェイト無しの寄与については、素直にここで採用した1頂点目をサンプリングする確率密度に基づいて計算するだけで済みます。一方でMISウェイトの計算には注意が必要です。他の戦略の確率密度計算には、この最適化を行わない場合の確率密度の計算を用いる必要があり、逆に別の戦略のウェイト計算時にはこの $ s = 1 $の戦略の確率密度をここで採用する最適化のものとする必要があります。

さいごに

このページでは双方向パストレーシングの理論について紹介しました。単に双方向からトレースして接続するだけではなく、一つの光輸送経路に対して様々な戦略が生まれることに着目して多重重点的サンプリングを見事に組み合わせた素晴らしい手法だと感じます。その分実装は通常のパストレーシングに比べると難しく、理論面の正しい理解が必要ですが、多重重点的サンプリングとパストレーシングのそれぞれをしっかりと理解していればクリアな視点を得られることと思います。実装面の注意点や擬似コードなどは「双方向パストレーシング実装」で解説します。

参考文献

  1. [Hanika2015] Johannes Hanika, Marc Droske, and Luca Fascione - "Manifold next event estimation", 2015
  2. [Veach1995] Eric Veach, Leonidas Guibas - "Bidirectional Estimators for Light Transport", 1995

Today : 00000012 Total : 00056677
Copyright © 2017 shocker.