【问题标题】:Ask for resource about fast ray-tracing algorithm索取有关快速光线追踪算法的资源
【发布时间】:2011-01-02 00:35:51
【问题描述】:

首先,很抱歉这个粗略的问题,但我不想介绍太多细节,所以我只是要求相关资源,如文章提示

我的程序需要对射线与三角形的交点进行密集计算(有数百万条射线和三角形),我的目标是尽可能快。

我所做的是:

  1. 使用我知道的最快的ray-triangle算法。

  2. 使用八叉树。(来自 Game Programming Gem 1, 4.10. 4.11)

  3. 使用八叉树算法中使用的An Efficient and Robust Ray–Box Intersection Algorithm

它比我应用那些更好的算法之前更快,但我相信它可能会更快,请您指出任何可能使其更快的地方吗?

谢谢。

【问题讨论】:

  • 顺便说一句,有一个“光线追踪”标签;)

标签: performance algorithm geometry raytracing


【解决方案1】:

问这些问题的地方是ompf2.com。一个关于实时(虽然也是非实时)光线追踪主题的论坛

【讨论】:

  • 护目镜,它们什么都不做!
  • 我确实在那个论坛上得到了一些有价值的回复,谢谢。 ompf.org/forum/viewtopic.php?f=4&t=1557
  • 遗憾的是,ompf.org 网站自 2011 年 12 月以来就已死去。请参阅例如 igad2.nhtv.nl/ompf2/index.php
  • igad2 链接现在也失效了
  • 我已经更新了指向 ompf 当前位置的链接
【解决方案2】:

OMPF 论坛是解决这个问题的好地方,但既然我今天在这里......

在 OctTree 遍历中不要使用光线/盒子的交点。您可以将它用于树的根节点,仅此而已。一旦你知道了到根盒子的入口和出口的距离,你就可以计算到 x、y 和 z 分区平面的距离 - 细分盒子的平面。如果到前后的距离分别为 f 和 b,那么您可以通过分析 f,b,x,y,z 距离来确定框的哪些子节点被命中。您还可以确定遍历子节点的顺序并完全拒绝其中的许多。

最多可以击中 4 个孩子,因为光线从一个八分圆开始,并且只有在穿过 3 个分区平面之一时才会改变八分圆。

此外,由于它是递归的,因此您将需要子节点的入口和出口距离。这些距离是从您已经计算的集合 (f,b,x,y,z) 中选择的。

我已经对此进行了很长时间的优化,并且可以肯定地说,对于许多层级的树来说,您的性能仍然可以达到一个数量级。我从你现在的位置开始。

【讨论】:

    【解决方案3】:

    您可以进行多种优化,但所有优化都取决于您的问题的确切领域。就一般算法而言,您走在正确的轨道上。根据域,您可以:

    1. 引入门户系统
    2. 将计算移至 GPU 并利用并行计算
    3. 最近很流行的光线追踪趋势是Bounding Volume Hierarchies

    【讨论】:

    • 我很感兴趣,你能参考你提到的(2)吗?我很想读到这个(我知道,这肯定是可能的),- 你似乎知道你在说什么。
    • 谢谢,Kornel,我记得有一个由 MIT 实现的库,但我就是找不到,你知道任何类似的现有库吗?
    【解决方案4】:

    您已经在使用空间排序和快速相交算法取得了良好的开端。对于一次追踪单条光线,最好的结构之一(用于静态场景)是使用表面积启发式构建的 K-d 树。

    但是,对于真正的高速光线追踪,您需要利用:

    • 相干光线包
    • Frusta
    • SIMD

    我建议您从“Ray Tracing Animated Scenes using Coherent Grid Traversal”开始。它为这种现代方法提供了一个易于理解的示例。您还可以按照参考资料了解这些想法如何应用于 K-d 树和 BVH。

    在同一页面上,还可以查看“光线追踪动画场景中的最新技术”。

    另外一组很棒的资源是这些年来所有的 SIGGRAPH 出版物。这是一个竞争非常激烈的会议,所以这些论文往往是一流的。

    最后,如果您愿意使用现有代码,请查看OpenRT 的项目页面。

    【讨论】:

      【解决方案5】:

      我看到的一个有用资源是journal of graphics tools。根据您的场景,另一个 BVH 可能比八叉树更合适。

      另外,如果您没有使用分析器查看您的表现,那么您应该这样做。 Shark 在 OSX 上非常出色,我在 Windows 上使用 Very Sleepy 获得了不错的效果。

      【讨论】:

      • 是的,谢谢,我有一个简单的内置分析器,足以让我看到瓶颈。
      猜你喜欢
      • 2012-05-23
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      相关资源
      最近更新 更多