OptiXのパイプライン

下図はOptiXのパイプライン構造を示したものだ。

OptiXのパイプライン。灰色のマスがプログラマブルシェーダを表している

[Host]はバッファ、テクスチャ、変数を管理し、[Entry Points]で実際のレイを投げる(Castする)処理を開始する。

[Ray Generation Program]がレイの投げ方を定義するプログラマブルシェーダになる。[Exception Program]はこのフェーズでの例外処理を定義するプログラマブルシェーダだ。

[rtTrace]で、実際のレイトレーシング処理を実行するブロックになる。

[Traversal]は飛ばされたレイを進め、レイの衝突を管理するブロックだ。この中の[Intersection Program]はレイと他者との衝突を判定するプログラマブルシェーダだ。[Any Hit Program]はレイと衝突した後、レイをこの後の処理をどう取り扱うのかを定義するプログラマブルシェーダだ。例えば半透明オブシェクトの衝突ならばレイは突き進むだろうし、不透明オブジェクトならばレイはここで止まることになる。

[Ray Processing]は投げたレイについて[Traversal]が返した結果に対して処理を行うブロックだ。[Closest Hit Program]は[Intersection Program]で衝突が判定された後の最初の処理を定義するプログラマブルシェーダだ。例えば3Dグラフィックス用途のレイトレーシングならば、その衝突したオブジェクトの材質に合わせたライティングを計算したり、テクスチャを適用することになる。[Miss Program]は投げたレイが何にも衝突しなかったときの処理を定義するプログラマブルシェーダだ。例えば無限遠にある背景テクスチャ、環境マップなどの適用はここで行うことになる。