您必须首先确保使用非常快的算法(实现它们可能会很痛苦,但是您想做什么以及要走多远以及应该多快,这是一种权衡)。
来自我的更多提示 - 不要使用邮箱技术,在论文中有时会讨论它们由于计数开销而无法与实际架构很好地扩展 - 不要使用 BSP/Octtrees,它们相对较慢。-不要使用 GPU 进行光线追踪,它对于反射和阴影、折射和光子映射等高级效果来说太慢了(我只将它用于着色,但这是我的啤酒)
对于一个完整的静态场景,kd-Trees 是无与伦比的,而对于动态场景,有一些聪明的算法可以在四核上很好地扩展(我不确定上面的性能)。
当然,为了获得真正好的性能,您需要使用非常多的 SSE 代码(当然不会有太多的跳转),但对于不是“那么好”的性能(我在这里谈论的可能是 10-15%)编译器内在的东西就足够了实施你的 SSE 东西。
还有一些关于我正在谈论的一些算法的不错的论文:
《Fast Ray/Axis-Aligned Bounding Box - Overlap Tests using Ray Slopes》(very fast very good paralelisizable (SSE) AABB-Ray hit test)(注意,论文中的代码并不是全部代码,只是google一下标题纸,你会找到的)
http://graphics.tu-bs.de/publications/Eisemann07RS.pdf
“使用动态边界体积层次结构的光线追踪可变形场景”
http://www.sci.utah.edu/~wald/Publications/2007///BVH/download//togbvh.pdf
如果您知道上述算法的工作原理,那么这是一个更强大的算法:
“在动态场景中使用预先计算的三角形集群进行加速光线追踪”
http://garanzha.com/Documents/UPTC-ART-DS-8-600dpi.pdf
我还使用 pluecker-test 来确定快速(不准确,但好吧,你不能拥有所有)如果我击中一个多边形,在 SSE 及更高版本上工作得非常好。
所以我的结论是,那里有很多很棒的论文,涉及很多与光线追踪相关的主题(如何构建快速、高效的树以及如何着色(BRDF 模型)等等),这是一个真正的“实验”这个神奇而有趣的领域,但你也需要有很多空闲时间,因为它非常复杂但很有趣。