2

我正在尝试进行一些涉及光线追踪的计算,但有点困惑。假设我有一个 n×n 图像,其中包含 N 个几何图元、l 个光源和 kxk 超级采样。在最坏的情况下,我将计算多少个射线交点?如果我添加深度为 d 的反射/折射会怎样?

4

2 回答 2

7

您必须为图像的每个 nxn 像素发射 kxk 射线。对于这些射线中的每一个,您都必须进行碰撞测试,这会以一种非常简单且低效的方式转化为 N 次比较(每次都取决于基元的复杂性)。现在,如果这些光线中的任何一条射到镜面或半透明表面,您必须拆分光线并递归调用。但是,这一次您不进行超级采样,因此您只需在反射/折射方向发送一束光线。对于深度 d,您将发送该数量的额外光线,每个递归调用一条。

所以,总共:k^2 xn^2 x d。

这还不包括相交计算,它不会增加更多的光线,但会增加很多复杂性。

然而,有许多简化。

  • 自适应多重采样,减少 k^2 因子。
  • 像素插值,减少 n^2 因子。
  • 使用一些空间分区结构,如 BSP 和/或 OctTree 进行碰撞测试。
  • 使用一些启发式方法来减少递归。
于 2012-05-16T13:21:17.277 回答
2

然而,这并不是一个完整的答案......请参阅这篇文章:http: //blogs.msdn.com/b/lukeh/archive/2007/10/01/taking-linq-to-objects-to-extremes- a-fully-linqified-raytracer.aspx您可能会利用修改后的一些计数代码来在您进行跟踪时自动将这些统计信息提供给您:P

于 2012-05-16T13:27:34.307 回答