Answers:
自然界中的体积(也称为参与介质)的出现是由悬浮在周围的流体(例如空气或水)中的细小颗粒(例如灰尘,水滴或浮游生物)引起的。这些粒子是固体物体,光线会像在正常表面上一样折射或反射这些物体。从理论上讲,参与的媒体因此可以由仅具有表面相交的传统光线跟踪器处理。
当然,这些粒子的绝对数量使得单独地实际跟踪它们成为不可能。取而代之的是,它们可以用统计模型来近似:由于粒子非常小,并且粒子之间的距离远大于粒子大小,因此可以将光与粒子的各个相互作用建模为统计独立的。因此,用连续量替换单个粒子是一个合理的近似值,该连续量描述了空间中该特定区域的“平均”光粒子交互作用。
对于基于物理的体积光传输,我们用具有两个特性的连续参与介质替换了难以想象的许多粒子:吸收系数和散射系数。这些系数对于光线追踪非常方便,因为它们使我们能够计算光线与介质相互作用的概率(即撞击粒子之一的概率)与距离的关系。
吸收系数表示为。说轻想去旅游的射线牛逼参与介质内米; 即不打颗粒中的一种,并通过它被吸收- -使它通过未吸收的概率是ë - 吨·&σ 一个 `。随着t的增加,我们可以看到该概率变为零,也就是说,我们在介质中传播的时间越长,击中和吸收物体的可能性就越大。非常类似的事情保持散射系数σ 小号:所述射线的概率不触及粒子和飞散是ë - 吨·&σ 小号; 也就是说,我们在介质中传播的时间越长,我们击中粒子并散布到不同方向的可能性就越大。
通常,这两个量被折叠成一个单一的消光系数,。行驶的概率吨通过介质不与它相互作用的米(既不被吸收或散射)随后ë - 吨·&σ 吨。在另一方面,用后的介质相互作用的概率吨米,1 - ë - 吨·&σ 吨。
光线的散射方式由相位函数描述,并取决于粒子的性质。瑞利相位函数描述了来自小于光波长(例如我们的大气层)的球形粒子的散射;Mie相位函数描述了大小与波长相似的球形颗粒的散射(例如,水滴);在图形中,通常使用Henyey-Greenstein相位函数,最初将其应用于星际尘埃的散射。
,射线照例穿过了它,并照常与表面相互作用。
这篇文章只是参与媒体渲染的一小部分。除其他外,我完全忽略了空间变化的系数(云,烟等所需的系数)。如果您有兴趣,Steve Marschner的笔记是很好的资源。通常,参与的媒体很难有效地呈现,而且您可以比我在此描述的复杂得多。有体积光子贴图,光子束,扩散近似,联合重要性采样等。在粒度媒体上也有有趣的工作 描述了当统计模型崩溃时该怎么做,即粒子相互作用不再在统计上独立。
一种解决方法-并非完全是“转到”解决方案,但可以很好地工作,它是找到射线在体积中传播的距离,并使用某些密度函数的积分来计算有多少“填充”击中。
这是示例实现的链接:http : //blog.demofox.org/2014/06/22/analytic-fog-density/
取决于音量效果。
可以通过仅计算光线进入和光线离开距离来模拟不属于散射的均匀体积效应。
否则,您需要对光线路径进行整合,也称为光线行进。为了避免需要拍摄二次射线,射线行进通常与某种缓存一起使用,例如深度图,深图,砖图或用于阴影的体素云等。通过这种方式,您不必随意行进整个场景。通常对卷过程纹理进行类似的缓存。
也可以将纹理转换为具有一些合适的软边纹理的表面图元,例如盒子,球体或平面。然后,您可以使用普通渲染技术解决体积效果。问题在于,您通常需要大量的原语。另外,图元的形状可能显示为过于均匀的采样。