レイトレーシング時の Adaptive Sampling について

概要

  • この記事では, リアルタイムのレイトレーシングデモである Heaven7 (2000 年 4月) で使われた最適化のテクニックである Adaptive Sampling について簡単に説明します.
  • 主にプログラマ向けの内容です.

参考文献

内容

  • 例えば, 下のように平面の上に 2 つの球が載っているシーンをレイトレーシングで計算するとします.

  • このとき, ある程度大雑把にレイトレーシングしてから, 必要そうなとこだけ細かくレイトレーシングするという手法が Adaptive Sampling です.
  • 下図の灰色の点は実際にレイトレーシングの計算をした点を表していて, これを見ると平面の部分は一定間隔をおいて計算が行われています.
  • 一方で影の境界や球に直接光が当たっている箇所は細かくレイトレーシングの計算をしていることがわかります.

  • 実際には以下の手順で計算しています.
    • 1. 画面を 8x8 ピクセルのブロックに分けます.
    • 2. 8x8 ピクセルのブロックの 4 隅について, その 4 隅に「ヒットしたオブジェクトは何か ?」, 「当たっているライティングの量」, 「テクスチャ座標」を求めます.
    • 3. その 4 隅について「ヒットしたオブジェクトが同一」で, かつ 「当たっているライティングの量がほぼ同じ」場合に, "4 隅のライティングとテクスチャ座標を使って他の点の結果を補間"することで, 他の点でのレイトレーシングの結果を省略します. 例えば, 4 隅のライティングによる補間結果を light, 4 隅のテクスチャ座標の補間結果を tx,ty としたときに color = light * texture[tx,ty] となります.
    • 4. もし 3. の段階で 4 隅の類似性判定に失敗したときは 8x8 のピクセルのブロックを 4 個の 4x4 ピクセルのブロックに分割して, 再帰的に同じことを行い, ブロック 1 個あたりが 2x2 ピクセルになったときには再帰的に分割するのを止めて通常通り 4 ピクセル分のレイトレーシングを行います.
  • 短所
    • ブロックのピクセルの 4 隅の角の差異で検知できない高周波なものは, 計算がスキップされてしまいます.
    • 場合によっては, 4隅の角で差異を検知する/しないを繰り返して, エイリアシングが発生するかもしれないです.