什么是Ray Marching?Sphere Tracing是同一件事吗?


31

许多ShaderToy演示程序共享Ray Marching算法来渲染场景,但是它们通常以非常紧凑的样式编写,我找不到任何简单的示例或解释。

那么,雷·马兴(Ray Marching)是什么?一些评论表明这是“球形跟踪”的一种变体。这种方法的计算优势是什么?

Answers:


34

TL; DR

它们属于同一个求解器家族,其中球体跟踪是射线行进的一种方法,即家族名称。

Raymarching定义

射线行进是一种与传统射线跟踪类似的技术,在该技术中,表面函数不容易解决(或者如果没有数字迭代方法,则不可能解决)。在光线追踪中,您只需要查找光线的交点,而在光线行进中,您可以前进(或来回)前进,直到找到交点,并有足够的样本或您要尝试解决的任何问题。尝试将其认为是用于表面查找的牛顿拉普森方法,或求积分以集成变化的函数。

如果您执行以下操作,这可能会很有用:

  • 需要渲染不均匀的体积
  • 渲染隐式函数,分形
  • 渲染其他类型的参数曲面,这些参数曲面提前不知道交点,例如视差映射
  • 等等

传统射线行进

图片1:传统射线行进进行表面寻找

相关文章:

球体追踪

球跟踪是一种可能的射线行进算法。并非所有的光线行进都使用这种方法的好处,因为它们无法转换为这种方案。

球面跟踪用于渲染隐式曲面。隐式表面是在连续功能的某个级别上形成的。本质上解决方程

F(X,Y,Z) = 0

由于如何在每个点上都可以解决此功能,因此可以继续进行估算,以适合当前的行进步骤(或者如果不是十分合理的话)。然后,您知道下一次行进距离至少要这么大。这样,您可以采用自适应光线行进步骤来加快过程。

球形跟踪具有自适应步长

图2:实际的球体跟踪*,注意步长如何自适应

有关更多信息,请参见:

*也许在2D中应该称为圆跟踪:)


1
:我会推荐这篇文章从Scratchapixel一个深入的解释scratchapixel.com/lessons/advanced-rendering/...
user18490

@ user18490年代到Scratchapixel链接已经转移到scratchapixel.com/lessons/advanced-rendering/...。该网站的其余部分(scratchapixel.com/index.php)看起来也很有用。
WillC

15

射线行进是一种迭代的射线相交测试,您可以沿着光线进行步进并测试相交,通常用于查找具有实体几何的相交,其中内部/外部测试快速。

在此处输入图片说明
具有浮雕纹理的渲染几何图像

如果您真的不知道可能在何处发生交点,则固定步长是很常见的,但是有时会使用诸如二进制或割线搜索之类的求根方法。通常使用固定的步长来查找第一个交点,然后进行二进制搜索。我首先遇到了逐像素位移贴图技术中的射线行进。非高度场表面细节的浮雕贴图是一本好书!

在此处输入图片说明

它通常与空间跳跃一起使用,这是一种加速技术,其中一些预处理可以提供一个安全距离,使您可以沿射线移动而不会与几何图形相交,或者更好的是,没有相交然后离开几何图形,以便您错过它。例如,圆锥步映射和松弛圆锥步映射。

球面追踪可能是指隐式射线-球面相交测试,但这也是约翰·哈特(@ Harojaa)提到的约翰·哈特(John Hart)的空间跳跃技术的名称,并由威廉·唐纳利(William Donnelly)使用(具有距离函数的按像素位移映射),其中3D纹理编码不存在几何形状的球体半径。


哈,你去了,从别人那里拿照片比自己画照片更有效率。
joojaa

@joojaa是的,如果您记得他们在哪里,那会更快,但是您自己却没有那种可喜的感觉:P。另外,我在Chrome中有一个愚蠢的子像素渲染错误,因此文本都是彩色的。
jozxyqk 2015年

1
好吧,亚像素渲染是没有被要求的。然而。
joojaa 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.