光线跟踪器如何渲染诸如烟,雾或云之类的体积效果?与实体对象不同,它们没有定义明确的表面来计算与之的交点。

#1 楼

概述

自然界中的体积(也称为参与介质)的出现是由悬浮在周围的流体(如空气或水)中的微小颗粒(例如灰尘,水滴或浮游生物)引起的。这些粒子是固体物体,光会像在正常表面上一样折射或反射这些物体。从理论上讲,参与的介质因此可以通过仅具有表面相交的传统射线跟踪器进行处理。

统计模型

当然,这些粒子的绝对数量使其无法实现实际单独跟踪它们。取而代之的是,它们可以用统计模型来近似:由于粒子非常小,并且粒子之间的距离远大于粒子大小,因此可以将光与粒子的各个相互作用建模为统计独立的。因此,用连续量替换单个粒子是一个合理的近似值,该连续量描述了空间中特定区域的“平均”光粒子相互作用。

对于基于物理的体积光传输,我们替换难以想象的是,具有连续参与介质的许多粒子具有两个特性:吸收系数和散射系数。这些系数对于射线追踪非常方便,因为它们使我们能够计算射线与介质相互作用的概率(即撞击粒子之一的概率)与距离的关系。

吸收系数表示为$ \ sigma_a $。假设有一束光线希望在参与的媒介中传播$ t $米;使其不被吸收的概率(即不击中一个粒子并被其吸收)的概率为$ e ^ {-t \ cdot \ sigma_a} $`。随着t的增加,我们可以看到该概率变为零,也就是说,我们在介质中传播的时间越长,击中物体并被其吸收的可能性就越大。散射系数$ \ sigma_s $的情况也非常相似:射线未击中粒子而被散射的概率为$ e ^ {-t \ cdot \ sigma_s} $;也就是说,我们在介质中传播的时间越长,我们越有可能击中粒子并向不同的方向散射。

通常,这两个量被折叠成一个消光系数, $ \ sigma_t = \ sigma_a + \ sigma_s $。 $ t $米穿过介质而不与介质相互作用(既不吸收也不分散)的概率为$ e ^ {-t \ cdot \ sigma_t} $。另一方面,在$ t $米后与媒体互动的可能性为$ 1-e ^ {-t \ cdot \ sigma_t} $。

使用参与媒体渲染

在基于物理的渲染器中使用此方法的方式如下:当射线进入介质时,我们有可能将其停止在介质内部并使之与粒子相互作用。对交互概率$ 1- e ^ {-t \ cdot \ sigma_t} $进行采样重要度,得出距离t $$这告诉我们,射线在撞击粒子之前先在介质中传播了$ t $米,现在发生了以下两种情况之一:射线被粒子吸收(概率$ \ frac {\ sigma_a} {\ sigma_t} $ ),或者分散(概率$ \ frac {\ sigma_s} {\ sigma_t} $)。

光线如何散射由相位函数描述,并取决于粒子的性质。瑞利相位函数描述了来自小于光波长(例如我们的大气层)的球形粒子的散射; Mie相位函数描述了大小与波长相似的球形颗粒的散射(例如水滴);在图形中,通常使用Henyey-Greenstein相位函数,最初将其应用于星际尘埃的散射。

现在,在图形中,我们通常不渲染无限媒体的图片,而在内部渲染媒体也包括硬表面的场景。在这种情况下,我们首先完全跟踪射线,直到射线撞击下一个表面,完全忽略了参与的介质。这给了我们到下一个曲面$ t_ {Max} $的距离。然后,我们如上所述对介质中的相互作用距离$ t $进行采样。如果$ t \ lt t_ {Max} $,则射线在到达下一个曲面的途中撞击粒子,我们要么吸收它,要么散射它。如果$ t \ geq t_ {Max} $,则射线照常穿过它并像平常一样与曲面相互作用。用参与媒体渲染;除其他外,我完全忽略了空间变化的系数(云,烟等所需的系数)。如果您有兴趣,Steve Marschner的笔记是很好的资源。通常,参与的媒体很难有效地呈现,而且您可以比我在此描述的复杂得多。有体积光子贴图,光子束,扩散近似,联合重要性采样等等。在粒度介质上也有有趣的工作,描述了统计模型崩溃后应该采取的措施,即粒子相互作用不再在统计上独立。

#2 楼

一种实现方法-并非完全是“转到”解决方案,但可以很好地工作,它是找到射线在体积中传播的距离,并使用一些密度函数的积分来计算有多少“填充”点击。

这是一个示例实现的链接:
http://blog.demofox.org/2014/06/22/analytic-fog-density/

#3 楼

取决于音量效果。

不均匀散射的体积效应可以通过仅计算光线进入和光线出口的距离来模拟。被称为雷行军。为了避免需要拍摄二次射线,光线行进通常与某种缓存一起使用,例如深度图,深度图,砖图或用于阴影的体素云等。这样一来,您就不必随意行进整个场景。通常对卷过程纹理进行类似的缓存。

还可以将纹理转换为具有一些合适的软边纹理的表面图元,例如框,球或平面。然后,您可以使用常规渲染技术来解决体积效果。这样做的问题是您通常需要大量的原语。此外,图元的形状可能显示为过于均匀的采样。

评论


$ \ begingroup $
仅需注意,您也可以分析地进行光线路径的实际集成,如果不需要,则不必使用光线行进。
$ \ endgroup $
–艾伦·沃尔夫(Alan Wolfe)
15年8月13日在15:29

$ \ begingroup $
@AlanWolfe就是您在统一情况下要做的事情,但是,如果介质参与了几何图形,则您需要做一些更漂亮的事情。无论如何,我没有声称这是所有方法。
$ \ endgroup $
– joojaa
15年8月13日在15:53



$ \ begingroup $
当然,只需添加您的答案即可。当您说均匀情况时,不确定确切含义是什么,但是对于雾而言,它不必是均匀密度,只需集成一些密度函数即可。那是统一案件的意思吗?
$ \ endgroup $
–艾伦·沃尔夫(Alan Wolfe)
15年8月13日在16:05