什么是光线追踪、光线投射、光线行进和路径追踪之间的区别?

18
据我所知,标题中提到的所有技术都是渲染算法,它们看起来非常相似。所有基于光线的技术似乎都围绕着通过每个图像像素投射光线来表示真实光线。这样可以呈现非常逼真的图像。
事实上,我正在制作一个简单的程序,它可以根据《周末光线追踪》使用光线追踪技术呈现此类图像。
现在问题是我想给这个程序命名。我使用了“光线追踪器”这个词,因为这是书中使用的词语。
然而,我听说了很多不同的术语,我很想知道光线追踪、光线匹配、光线投射、路径追踪以及其他常见的光线相关算法之间的区别。我在网上找到了一些比较这些技术的文章,但它们只比较了其中两个,并且一些定义重叠,所以我想问一下关于这四种技术的问题。

2
好的,这个问题不是关于一段代码的,但由于它涉及渲染,因此与编程密切相关,并且可能对网站用户有用。 - janekb04
3
@BDL也许只有我一个人这样认为,但是弄清非常相似的渲染算法之间的区别与编程有什么关系呢?这甚至不是对任何教程或文档的请求... - Spektre
1个回答

16

我的理解是:

  1. 光线投射

    使用光栅图像来表示场景,通常在第一次碰撞时停止(不考虑反射和光线分裂),并且不一定按像素点进行光线投射(通常按屏幕的行或列进行)。其3D版本称为体素空间光线投射,但地图不是体素空间,而是使用两个光栅图像RGB、Height

    更多信息请参见:

  2. (背向)光线追踪

    这通常遵循光线物理属性,因此光线会分为反射和折射,并且通常在一定数量的碰撞后停止。场景可以用BR网格或解析方程或两者同时表示。

    更多信息请参见:

    back意味着我们从相机到场景(以像素为单位)投射光线,而不是从光源到任何地方... 这样可以大大加快过程,但代价是错误的照明(但可以通过在此基础上增加其他方法来补救)...

其他技术我不太确定,因为我没有使用过这些技术(至少是有意识的):

  1. 路径追踪

    是一种优化技术,通过蒙特卡罗(随机)方法避免递归射线在光线跟踪时的分裂。因此它并不会将射线分裂,而是在两个选项之间随机选择(类似于光子在现实世界中的行为),然后将多个渲染帧混合在一起。

  2. 射线步进

    是一种优化技术,通过使用符号距离函数(SDF)来确定沿着射线安全前进的位置,以加快射线跟踪速度,使其不会撞到任何东西。但它仅限于分析场景。


1
射线行进并不一定能加速使用SDF的光线追踪。实际上,仅渲染一个简单的三角形就需要调用多次相当复杂的函数。它更适合处理没有良好射线截距函数、处理反射、扭曲空间或重复空间的对象。一个更适合射线行进的好例子是Menger海绵,利用了许多重复反射。 - Dalton
加速带符号距离场的体积渲染算法被称为“球追踪”。射线行进可能指沿着射线在多个点采样体积的整个算法类别,但也常用作等距采样的名称,以便将其与其他更专业的方法进行比较。 - pbsds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接