パストレーシング
概要
- 出力画像のピクセルと視点からレイのベクトル(方向)を計算し、レイを飛ばす。
- レイはモデルに衝突するとブロック崩しのように反射する。
- レイが光源と衝突したらピクセルに照度を加算する。
- この照度は双方向反射率分布関数( BRDF )によって低下する。
- レイが範囲外に飛び出したら計算しない。
これを出力画像の全ピクセルに対して行う。 ここまでは古典的なレイトレーシングである。
古典的なレイトレーシングのレイは「ブロック崩しの玉のように反射するだけ」であるが、 パストレーシングでは「反射するたびにレイが分裂する」という処理が加わっている。
パストレーシングではより高画質を得るために、1ピクセルを作るのにレイのベクトル(方向)を微妙にずらして(微分して)何度も何度もレイを飛ばすのである。
レイを飛ばす数は、増やそうと思えばどこまでも増やせるが、そうすると永遠に処理が終わらなくなるので、通常はいわゆる「モンテカルロ法」を用いてあらかじめ決まった数のレイをランダムな方向に飛ばしまくる。そこそこな画像で「1ピクセル100レイ」、ラスタライズ法より明らかに高画質な画像で「1ピクセル5000レイ」と言われている。ハリウッド映画などではそれ以上の病的な数のレイを飛ばしていると言われている。
応用
より高速でそこそこな画像を得る方法として、 ゲームなどで一般的なポリゴンのレンダリング(ラスタライズ法)を事前に行い、 それを視点から真正面の範囲外に1枚の巨大なテクスチャとして配置しておき、 レイがモデルと衝突せずに範囲外に突き抜けた場合はそのテクスチャと衝突した箇所の色をサンプリングするという技法もある。 この技法を使わずクソ真面目にやるとレイとモデルが衝突しなかった箇所にノイズが発生し、 それを穴埋めるには大量のレイを飛ばして補完する必要があり計算量が激増する。
光散乱を考慮したものは「ボリュメトリックパストレース」と呼ばれる。 レイが反射するたびにレイが分裂する感じである。 計算量が激増するので完全に別物扱いである。