レイマーチングは、 3Dコンピュータグラフィックスにおけるレンダリング手法の一種で、レイを反復的に走査することで、各レイを実質的に小さなレイセグメントに分割し、各ステップで何らかの関数をサンプリングします。例えば、ボリュームレイキャスティングでは、この関数は3Dスキャンからデータポイントにアクセスします。球面トレーシングでは、この関数は次のステップまでの距離を推定します。レイマーチングは、光や音波の軌跡を解析的に解くレイトレーシングの代替として、物理シミュレーションでも用いられます。コンピュータグラフィックスにおけるレイマーチングでは、 SDFを用いて最大安全ステップサイズを決定することがよくありますが、これは物理シミュレーションではあまり一般的ではありません。しかし、適応型ルンゲ・クッタ法を用いることで、同様の適応型ステップ法を実現できます。
この技術は少なくとも1980年代に遡り、1989年にケン・パーリンが発表した論文「ハイパーテクスチャ」 [ 1 ]にはレイマーチング法の初期の例が掲載されている。
距離支援レイマーチング
球面トレース

球面トレーシング[ 2 ]、または球面支援レイマーチングでは、光線と符号付き距離関数(SDF)で定義された面との交点を近似します。SDFは各反復処理ごとに評価され、面のどの部分も見逃すことなく、可能な限り大きなステップを踏むことができます。点が面に十分近づくと、閾値が設定され、それ以上の反復処理が中止されます。強力なGPUハードウェアが広く普及するにつれて、この手法はデモシーンやShadertoyの共同制作者であるInigo Quilezによって普及しました。
基本的な3D形状を持つシンプルなシーンでは、レイマーチングはレイトレーシング(空間を移動せずに交差を検出する)に比べて多くの利点はありません。SDFレイマーチングの強みは、例えば、形状のモーフィング、ソフトシャドウの近似、ジオメトリの繰り返し、アルゴリズム的に定義されたシーンなどです。
多くの基本的な3D形状には、符号付き距離関数が存在します。[ 3 ]これらは、モジュロやブール演算などの数学演算を用いて組み合わせることができ、より複雑な曲面を形成できます。例えば、SDFの入力座標の係数を取ることで、そのボリュームを空間全体に敷き詰め、2つのSDFの最大値を取ることで、それらのボリュームの交差面が得られます。SDFは多くのフラクタルに対して定義できるため、球面トレーシングは3Dフラクタルレンダリングによく使用されます。[ 4 ]
キューブアシスト
球面支援レイマーチングと同様の手法で、立方体とタクシー距離を使用してボクセル ボリュームをレンダリングできます。
ボリュームレイマーチング
ボリューメトリック・レイマーチングでは、各レイをトレースすることで、レイに沿って色や密度をサンプリングし、最終的なピクセルカラーに合成します。これは、雲や3D医療スキャンのレンダリングなどでよく使用されます。
遅延シェーディング
スクリーン スペースリフレクション (SSR) やスクリーン スペースシャドウなどのスクリーン スペース エフェクトをレンダリングする場合、レイはG バッファを使用してトレースされ、深度と表面法線データは 2D ピクセルごとに保存されます。
参考文献
- ^ Perlin, Ken (1989年7月)、「ハイパーテクスチャ」(PDF)、コンピュータグラフィックス、23 (3): 253– 262、doi : 10.1145/74334.74359
- ^ハート、ジョン・C.(1995年6月)「球面トレーシング:陰関数面のアンチエイリアスレイトレーシングのための幾何学的手法」(PDF)ビジュアルコンピュータ
- ^クレス、イニゴ。「3D距離関数」。イニゴ・クレス2022-07-08に取得。
- ^ハート、ジョン・C.; サンディン、ダニエル・J.; カウフマン、ルイス・H. (1989年7月)、「レイトレーシングによる決定論的3次元フラクタル」(PDF)、コンピュータグラフィックス、23 (3): 289– 296、doi : 10.1145/74334.74363