我在D(http://dsource.org/projects/stacy)中编写了一个相对简单的raytracer / path跟踪器,但是即使进行了全面优化,每条射线仍需要数千个处理器周期。我还有什么其他办法可以加快速度吗?更笼统地说,您知道射线追踪的良好优化/更快方法吗?
编辑:这就是我已经在做的。
最佳答案
光线跟踪器速度的典型一阶改进是某种空间分区方案。仅基于您的项目大纲页面,看来您还没有这样做。
可能最常用的方法是八叉树,但最好的方法可能是方法的组合(例如,空间分区树和类似邮箱的事物)。边界框/球体测试是一种快速廉价且令人讨厌的方法,但您应该注意两点:1)在许多情况下它们没有多大帮助; 2)如果您的对象已经是简单的基元,那么您将不会获得太多 yield (甚至可能会失败)。您可以更容易(比octree更好)实现用于空间分区的常规网格,但是它仅对稍微均匀分布的场景(就表面位置而言)非常有效
很大程度上取决于您表示的对象的复杂性,内部设计(即是否允许局部变换,对象的引用副本,隐式曲面等)以及您要达到的精度。如果要编写具有隐式曲面的全局照明算法,则权衡可能与为网格物体或其他对象编写基本的raytracer时有所不同。我没有详细研究您的设计,因此不确定您是否已经想到了上面的内容。
像任何性能优化过程一样,您将必须首先进行度量以找到实际花费时间的地方,然后进行改进(按需优先选择算法,然后根据需要进行代码填充)