OpenGL で実際のレイ トレーシングを試すことはお勧めしません。そのためには多くのハックやトリックが必要であり、私に尋ねても、これを行う意味がまったくないからです。GPU でレイ トレーシングを実行する場合は、CUDA や OpenCL などの任意の GPGPU 言語を使用する必要があります。
問題をもう少し詳しく説明すると、レイトレーシングの場合、二次光線を追跡し、ジオメトリとの交差をテストする必要があります。したがって、シェーダー内で巧妙な方法でジオメトリにアクセスする必要がありますが、フラグメント シェーダー内では、ジオメトリを何らかのテクスチャに「コード化」して保存しないと、ジオメトリにアクセスできません。頂点シェーダーもこのジオメトリ情報をネイティブには提供しません。また、ジオメトリ シェーダーは隣接するシェーダーしか認識していないため、ここで問題がすでに発生しています。次に、適切なフレームレートを得るために加速データ構造が必要です。ただし、たとえばシェーダー内の Kd ツリーをトラバースすることは非常に困難であり、私の記憶が正しければ、この問題だけを取り上げた論文がいくつかあります。ただし、本当にこのルートに進みたい場合は、このトピックに関する論文がたくさんあるので、それらを見つけるのはそれほど難しくありません.
レイ トレーサーが優れたパフォーマンスを発揮するには、非常によく設計されたアクセス パターンとキャッシュが必要です。ただし、GLSL 内ではこれらをほとんど制御できず、パフォーマンスの最適化は非常に困難になる可能性があります。
もう 1 つの注意点は、少なくとも私の知る限りでは、GPU でのリアルタイム レイ トレーシングは静的シーンにほとんど限定されていることです。動的なシーンが必要な場合は、他のデータ構造 (BVH、iirc など) が必要ですが、それらを常に維持する必要があります。何も見逃していなければ、この問題だけで現在も多くの研究が進行中です。