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

正規表現を用いた光輸送経路の表記と分類

このページはレイトレ Advent Calendar 2016のの記事として制作しました。
フォトンマッピングなど各種アルゴリズムについて議論する際にSDSパスがどうとかこうとかよく聞くことになります。このページでは光輸送経路の表記法について紹介します。

このページでは、反射・透過イベントに基づいて正規表現を用いた光輸送経路の表記法について紹介します。

正規表現による光輸送経路の表記

モンテカルロレイトレーシングの各種アルゴリズムには、うまく扱うことのできる、または苦手となる光の経路の種類がそれぞれ存在します。似たような種類の経路を短く統一的に表記できるとアルゴリズムについて議論する上で便利です。経路の分類を決める要因としては、反射・透過特性や可視性が考えられますが、前者に関しては文字列の表現に用いられる正規表現(regular expression)が一般的に使われます。
例えば、光源から出た光が1回だけ拡散反射を経て、目に届くような経路は次のように表されます。

\begin{equation*} LDE \end{equation*}

ここで、$ L $ は光源(Light)を、$ E $ は目(Eye)もしくはセンサーを表しており、$ D $ が拡散反射・透過(Diffuse)を表しています。
1回の完全鏡面反射・透過(Specular)を経て目に届く光は記号 $ S $ を用いて次のように表されます。

\begin{equation*} LSE \end{equation*}

$ D $ と $ S $ に加えて明示的に光沢反射・透過(Glossy)を表す文字として $ G $ を使ったりしますが、基本的には $ D $ と $ S $ の2種類を使うことが多いです。この場合光沢反射は $ D $ に分類されます。そのため $ D $ は拡散、というよりは非完全鏡面と呼んだ方が良いかもしれません。
これらの表記を組み合わせて次のように経路を表すこともできます。

\begin{equation*} LSDE \end{equation*}

これは光源から出た光が1回完全鏡面反射(透過)した後に1回の拡散反射(透過)を経て目に届く経路を表しています。このような表記はいくらでも長く書くことができて、例えば次のようなケースも考えられます。

\begin{equation*} LSDDDDSSSDSDSSDDE \end{equation*}

このような単純な羅列だけだと、似たような経路だとしてもそれぞれ別の表記が必要で面倒です。そこで次のように、正規表現を用いてコンパクトかつ一般的に様々な経路を表す手段が用いられます。これを「Heckbertの正規表現記法」と呼びます。

\begin{equation*} L(S|D)+D.D*S?E \end{equation*}

正規表現で用いられる基本的な要素を全部含めたかったのでとんでもない表記になっていますが、正規表現の要素自体は一般的なものなので詳細は調べていただくとして、一応少しだけ説明しておきます。
$ (S|D) $ は $ S $ か $ D $ であることを表しており、「$ + $」は1つ前の要素が「1個以上」連続で存在することを表します。つまり $ (S|D)+ $ で $ S $ か $ D $ が連続で1つ以上あること($ DSD $ や $ DD $、$ SSD $、$ S $ など)を表します。見落としやすいですが、「$ . $」は任意の一文字を表します。が、光輸送経路の表記においては基本的に $ S $ か $ D $ (と $ G $)のいずれかとなります。「$ * $」は「$ + $」と似ていて1つ前の要素が「0個以上」連続で存在することを表します。この場合1つ前の要素が $ D $ なので拡散反射・透過が0回以上連続で続くことを意味します。最後に「$ ? $」は1つ前の要素が1個存在する、または存在しない、を表します。
このように正規表現を用いることで様々な経路を1つの表記でまとめることができます。例えば、次に示すような経路は全て上記の正規表現にマッチします。

\begin{eqnarray*} & LDSSDDDSE & \\ & LSSSSSDDDDDDDDE & \\ & LSDSDDSE & \end{eqnarray*}

よく聞くコースティクス、集光模様は次のように一般的に書きあらわすことができます。

\begin{equation*} LS+DE \end{equation*}

つまり、コースティクスは光源から出た光が1回以上鏡面反射して最後に1回だけ拡散反射して目に届く経路、ということになります。机の上に置いたグラスの隣に落ちるコースティクスを考えるとわかりやすいと思います。そこでは何回かグラスで鏡面反射・透過した光が机で拡散反射して目に届きます。ここでは、十分反射・透過が鋭ければコースティクスが出るので $ LG+DE $ と表現しても良いでしょう。

ところで、一般的に言ってパストレーシングはコースティクスの表現が苦手です。光源が点光源かつ通過する鏡面反射・透過物体が完全鏡面の場合にはコースティクスをレンダリングすることができません。しかし面光源の場合には一応分散は酷くてもレンダリングすることができます。いずれも経路を正規表現で表すと同じ $ LS+DE $ なのですが、何が違うのでしょうか。

Full-path Regular Expression

前節の最後の疑問点に対する答えは、光源の位置の特性ということになります。面光源は光源上の位置が広がりを持っている一方で、点光源ではただ一点に定まります。そのため点光源の場合、パストレーシングでは有効な光経路をサンプリングすることができません。
正規表現を用いた光輸送経路の表記法はこのような光源の特性、またセンサー側の特性も含めるように拡張することができます。これをfull-path regular expression (訳は...何だろう)と呼びます。例えば、面光源によるコースティクスをピンホールカメラで観測しているような経路は次のように表されます。

\begin{equation*} LDD \; S+D \; DSE \end{equation*}

ここで、面光源を表しているのは最初の3文字で、2文字目の $ D $ は光源位置に関する特性、3文字目の $ D $ は光源から出射される光の方向に関する特性を表しています。ピンホールカメラは最後の3文字で表され、光源側とは逆に、1文字目の $ D $ が方向に関する特性、2文字目の $ S $ が位置に関する特性を表しています。この設定を点光源に変えた場合の表記は次のようになります。

\begin{equation*} LSD \; S+D \; DSE \end{equation*}

パストレーシングで完全な光輸送経路を構築する戦略としては、入射方向をサンプリングして光源にヒットした場合に寄与を計算する方法(このように生成される経路をimplicit pathと呼びます。)と、明示的に光源上の1点をサンプリングして接続するNext Event Estimation (explicit path)のいずれかがありましたが(その両方を組み合わせることもできる。=>多重重点的サンプリング)、これらの戦略を経路の表記と併せて次のように書くとします(とりあえず筆者の独自表記)。

implicit path

\begin{equation*} LD - DS+DDSE \end{equation*}

explicit path

\begin{equation*} LDD - S+DDSE \end{equation*}

先にexplicit pathのものから見てみます。これは、光源の手前の鏡面まで視点側から作った経路( $ S+DDSE $ )と、光源上からサンプリングした点 $ LDD $ を接続して完全な光輸送経路を構築する戦略を表しています。$ LDD $ と書くとなんとなく光源上の位置のサンプリング以上のことを行なっているような気がするかもしれません。筆者の場合、これは仮想的な拡散面 $ D $ を反射して拡散面 $ D $ (実際には反射や透過の分布ではなく、放射の分布)を得た、という風に他の頂点と同様に考えることで理解できた気がします。次にimplicit pathですが、これは視点側から光源面まで至る完全な経路を構築する戦略を表しています。これも上の書き方だと光源側の何らかのサンプリングを行なっていそうに見えるかもしれません。が、仮想的な面という同様の考え方を用いれば、光源側は仮想的な面だけで終わっているので実際には経路全体が視点側からの構築になっていることになります。

パストレーシング実装」でも説明したように、Next Event Estimationで接続する物体表面が完全鏡面の場合には寄与は必ずゼロになります。上の表記を使って言えば $ D - S $ の接続に完全鏡面が含まれるから寄与がゼロ、ということになります。この考え方は経路の記法において一般的に言うことができて、光源側の経路と視点側の経路の接続に完全鏡面が含まれる場合にはそのサンプリング戦略では寄与をとれないことを表します。上記のimplicit pathの場合は両端ともに $ D $ であるため、寄与を計算することができます。
点光源を考えると、それぞれの戦略によるコースティクスパスは次のように表されます。

implicit path

\begin{equation*} LS - DS+DDSE \end{equation*}

explicit path

\begin{equation*} LSD - S+DDSE \end{equation*}

この場合にはimplicit / explicit pathどちらの場合も接続辺の端点に $ S $ が含まれてしまうため、パストレーシングでは点光源の場合のコースティクスの寄与を一切計算することができないということになります。ちなみに双方向パストレーシングの場合には、取り扱う様々な戦略の一つに $ LSDS+D - DSE $ が含まれるため寄与の計算が可能です。またフォトンマッピングは、解釈はいくつかあるとは思いますが、$ LSDS+ - DDSE $ というパターンの $ S $ 側を無理やり $ D $ に置き換えるようなアプローチなので一応計算が可能となります。

光源とセンサーの分類

$ LDD $ 一般的な面光源。
$ LDS $ 指向性を持った面光源。
窓から差し込む太陽光などを、窓自体を光源として考える場合に相当。
$ LSD $ 理想的な点光源やスポットライト。
$ LSS $ 理想的なレーザービーム。
$ DDE $ 大きさを持ったレンズ。
$ SDE $ 理想的な平行投影レンズ。
$ DSE $ 理想的なピンホールレンズ。
$ SSE $ 理想的なスポットメーター。

Full-path regular expressionにおいて、各種光源や計測機器の特性を表記すると上の表のようになります。現実の光源面やセンサー面は2次元の広がり(平面という意味では無い)を持っていますが、それが点(0次元)になってしまう場合が2文字目の $ S $ に相当します。線状の光源など1次元の広がりを持ったケースも考えることができ、さらに拡張した表記もあるのですがここでは述べません。

参考文献

  1. [Veach1998] Eric Veach, Leonidas J. Guibas - "ROBUST MONTE CARLO METHODS FOR LIGHT TRANSPORT SIMULATION", 1998

Today : 00000012 Total : 00056677
Copyright © 2017 shocker.