レイトレーシング時の Adaptive Sampling について
概要
参考文献
- Going Under the Hood: Adaptive Sampling at Heaven7
- Heaven7 のダウンロード
- Heaven7 の動画
内容
- 例えば, 下のように平面の上に 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 ピクセル分のレイトレーシングを行います.