光线跟踪计算

时间:2012-05-16 11:47:24

标签: math graphics raytracing

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

2 个答案:

答案 0 :(得分:7)

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

因此,总计:k ^ 2 x n ^ 2 x d。

这不计算交叉点计算,它不会添加任何光线,但会增加很多复杂性。

然而,有许多简化。

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

答案 1 :(得分:2)

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