Performance 光线跟踪器-寻找下一个光线交点的标准方法是什么?它们的优缺点是什么

Performance 光线跟踪器-寻找下一个光线交点的标准方法是什么?它们的优缺点是什么,performance,algorithm,rendering,raytracing,Performance,Algorithm,Rendering,Raytracing,我不是问如何计算光线与特定基本体的交点,而是问当前的方法是什么,以尽可能快地确定场景中数百万基本体中哪一个是光线与之相交的下一个 我听说八叉树和kd树是常用的。我不知道是否还有其他方法也是目前的竞争者 如果使用八叉树,是否只允许每个立方体跟踪其8个子立方体中的任何一个子立方体是否与任何立方体相交?任何未获得相应分支的子多维数据集,以及每个获得相应分支的子多维数据集。因此,我们沿着树往下走,直到找到一个最终节点,该节点提供有限数量的与之相交的基本体?如果构建这样的八叉树,可以通过将光线从起点移动到

我不是问如何计算光线与特定基本体的交点,而是问当前的方法是什么,以尽可能快地确定场景中数百万基本体中哪一个是光线与之相交的下一个

我听说八叉树和kd树是常用的。我不知道是否还有其他方法也是目前的竞争者

如果使用八叉树,是否只允许每个立方体跟踪其8个子立方体中的任何一个子立方体是否与任何立方体相交?任何未获得相应分支的子多维数据集,以及每个获得相应分支的子多维数据集。因此,我们沿着树往下走,直到找到一个最终节点,该节点提供有限数量的与之相交的基本体?如果构建这样的八叉树,可以通过将光线从起点移动到每个立方体中的下降点来跟踪光线,在该点可以验证光线是否与立方体中的几何体相交,或者下降到可以对照少量基本体进行检查的点(光线可能会漏掉哪个,需要一个移动到下一个立方体)


无论如何,如何找到下一个交叉口的问题看起来是一个巨大的性能因素,那么目前最主要的方法是什么,它们的优缺点是什么?

这是一个非常大的主题。你可以在tis网站www.scratchapixel.com上找到一些信息。看看关于加速技术的课程。光线跟踪很慢(实际上是计算机),因此进行简单的光线三角形相交测试,测试场景中的所有三角形,很快就会变得昂贵得令人望而却步。 为了解决这个问题,你可以使用加速结构,你在文章中提到了一些技巧(八叉树,k-d树)。其中一种与另一种的性能是非常主观的,取决于您的实现、您需要它做什么等。BVH和k-d树都被认为是好的。您可以很容易地在web上找到文章,其中作者回顾了不同类型的加速结构及其优缺点等。例如加速结构调查。
现在的趋势是加速结构不存储在内存中,而是在光线投射时动态创建。

当今最广泛使用的加速结构是BVH(*B*ounding*V*volume*H*ierarchies),它们是当前许多研究的主题(2013年High Performance Graphics最佳论文前3名中有2篇发表在BVHs:)

这是一个很好的起点。概念非常简单,将基本体的簇分组到一个边界卷(通常是一个边界框)中,然后将所述边界卷的集群分组为较大的卷,并重复,直到在最高级别上整个场景都有一个单一的边界卷。BVH构建速度快,易于实现,应用广泛

另一种以前很流行的替代方法是k-d树,但是它们比BVH要长一个数量级,并且往往需要更多的内存;八叉树可以工作,但没有广泛使用

最近出现了一系列称为“分治”的非相干光线跟踪方法,这些方法基本上是在光线遍历过程中动态地执行k-d树或BVH构造中通常执行的基本划分。如果场景的某些部分不可用,这可能比构建完全加速结构然后进行跟踪要快一些请删除与它们相交的任何光线(因为在分治方法中,这些基本体永远不需要分区),但每次有一批新的光线要跟踪时,您都必须重复此过程。对于相干光线或主要是静态场景,这种方法不是一个好主意,甚至在为发挥算法优势而定制的场景中,它是否值得值得值得值得怀疑

个人建议:使用BVH