【发布时间】:2015-06-02 17:59:50
【问题描述】:
三角形是具有非常简单的ray→triangle 相交算法的曲面,只需几个操作即可完成。由于这个原因,它们经常被用作光线追踪应用程序的基元——例如,网格由一组三角形近似。问题是,近似值越详细,您需要的三角形越多,这意味着更多的测试。如果您的对象是一个完美的球体,那么使用三角形可能不是一个好主意,因为有一个 O(1) 算法可以直接测试 ray→sphere 的交点,只需很少的操作。
我的问题是:与三角化方法相比,还有哪些表面具有“具有更快的ray→surface”相交的特性?是否有任何数学结构/对象可以让我们逼近任意 3D 对象的表面并在 O(1) 中检查其交集?
【问题讨论】:
-
你可以用样条补丁或其他东西平铺你的表面。找到一条射线与样条曲线的交点需要一定的时间,但这不是小菜一碟。
-
我认为椭圆体或 3D 盒子更容易,但没有那么精确,您需要使用最适合您的网格形状的最简单的对象 可以使用任何可以用数学公式表示的几何形状...不知道形状(任意网格)就这么难。物体表面拟合是一个非常缓慢的过程,但它可以预先计算一次,因此不会减慢运行时间......
-
具有简单方程的连续光滑表面。例如椭圆体(和球体)和平面,以及圆柱面。不是像长方体这样的角形(它们是 O(面数))
-
@willywonka_dailyblah 是正确的,具有简单方程的连续光滑表面,例如圆锥截面。我将添加轴对齐的边界框:AABB 有快速的相交算法,在运行时间方面可能会更好,可以在由三角形组成的任意长方体上测试相交(大概每个面有 12 个,每个面 2 个)。
标签: algorithm math 3d language-agnostic raytracing