我不建议在 OpenGL 中尝试实际的光线追踪,因为你需要很多技巧和技巧,如果你问我,这样做根本没有意义。如果你想在 GPU 上进行光线追踪,你应该使用任何 GPGPU 语言,例如 CUDA 或 OpenCL,因为它使事情变得容易得多(但仍然远非微不足道)。
为了进一步说明问题:对于光线跟踪,您需要跟踪辅助光线并测试与几何体的相交。因此,您需要在着色器中以某种巧妙的方式访问几何体,但是在片段着色器中,如果您不将几何体“编码”存储到某个纹理中,则无法访问该几何体。顶点着色器本身也不会为您提供此几何信息,并且几何着色器只知道邻居,所以这里的麻烦已经开始了。接下来,您需要加速数据结构来获得任何合理的帧速率。但是,在着色器中遍历例如 Kd-Tree 是相当困难的,如果我没记错的话,有几篇论文仅针对这个问题。不过,如果你真的想走这条路,关于这个主题的论文很多,找到它们应该不难。
光线追踪器需要精心设计的访问模式和缓存才能达到良好的性能。但是,您在 GLSL 中对这些功能几乎没有控制权,因此优化性能会变得非常困难。
另一点需要注意的是,至少据我所知,GPU 上的实时光线追踪主要限于静态场景,因为例如 kd-trees 仅适用于(很好)静态场景。如果您想拥有动态场景,您需要其他数据结构(例如 BVH、iirc?),但您经常需要维护这些数据结构。如果我没有遗漏任何东西,那么目前仍然有很多关于这个问题的研究。