我试图在路径跟踪器中实现折射和传输,但是我不确定如何实现它。首先,一些背景:

当光撞击表面时,它的一部分会反射,而一部分则会折射:


多少光会反射与折射的关系由菲涅耳方程给出。


在递归光线跟踪器中,简单的实现方式是拍摄光线进行反射和反射,然后进行加权求和使用菲涅耳。
$$ \ begin {align *}
R&= Fresnel()\\
T&= 1-R \\
L _ {\ text {o }}&= R \ cdot L _ {\ text {i,reflection}} + T \ cdot L _ {\ text {i,refraction}}
\ end {align *} $$

但是,在路径跟踪中,我们仅选择一条路径。这是我的问题:


我该如何选择以无偏见的方式反射或折射

我的第一个猜测是根据以下情况随机选择菲涅耳。又名:

float p = randf();
float fresnel = Fresnel();
if (p <= fresnel) {
    // Reflect
} else {
    // Refract
}


这正确吗?还是我需要某种校正因子?因为我不走两条路。

评论

俄罗斯轮盘赌

#1 楼

TL; DR

是的,您可以那样做,只需将结果除以选择方向的概率即可。

完整答案

在路径跟踪器中进行采样的主题实际上允许反射和折射的材料都稍微复杂一些。

让我们先从一些背景开始。如果在路径跟踪器中允许使用BSDF(而不仅仅是BRDF),则必须在整个球体上进行积分,而不仅仅是正半球。蒙特卡洛样本可以通过多种策略生成:对于直接照明,可以使用BSDF和光采样;对于间接照明,唯一有意义的策略通常是BSDF采样。采样策略本身通常包含有关对哪个半球进行采样的决定(例如,是否计算反射或折射)。

在最简单的版本中,光采样通常不太关心反射或折射。它根据光源的特性对光源或环境图(如果有)进行采样。您可以通过仅选择材料具有非零贡献的半球来改善环境图的采样,但是通常忽略其他材料属性。请注意,对于理想的平滑菲涅耳材料,光采样无效。

对于BSDF采样,情况要有趣得多。您描述的情况涉及理想的菲涅尔曲面,其中只有两个起作用的方向(因为菲涅尔BSDF实际上只是两个增量函数的总和)。您可以轻松地将积分分为两部分的总和-一部分反射,另一部分折射。正如您提到的那样,由于我们不想在路径跟踪器中双向导航,因此我们必须选择一个。这意味着我们只想选择一个数字就可以估算出数字的总和。这可以通过离散蒙特卡洛估计来完成:随机选择加数之一,然后除以被选中的概率。在理想情况下,您希望采样概率与加数成正比,但是由于我们不知道它们的值(如果我们知道它们的值,就不必估计总和),因此,我们忽略了一些因素。在这种情况下,我们将忽略入射光量,而仅使用菲涅耳反射率/透射率作为我们的估计值。方向与菲涅耳反射率成正比,并且在某个点上将该方向的结果除以拾取方向的概率。估算器将如下所示:

$$
\ frac
{L_ {i} \ left(\ omega_ {i} \ right)F \ left(\ theta_ {i } \ right)}
{P \ left(\ omega_ {i} \ right)} =
\ frac
{L_ {i} \ left(\ omega_ {i} \ right) F \ left(\ theta_ {i} \ right)}
{F \ left(\ theta_ {i} \ right)} =
L_ {i} \ left(\ omega_ {i} \ right )
$$

其中$ \ omega_ {i} = \ left(\ phi_ {i},\ theta_ {i} \ right)$是选定的入射光方向,$ L_ {i} \ left(\ omega_ {i} \ right)$是入射辐射量,$ F \ left(\ theta_ {i} \ right)$是反射情况下的菲涅耳反射率,或者是1-折射情况下的菲涅耳反射率,$ P \ left(\ omega_ {i} \ right)$是拾取方向的离散概率,等于$ F \ left(\ theta_ {i} \ right)$。

如果使用更复杂的BSDF模型,例如基于微观方面,抽样稍微复杂些,但通常也可以应用将整个积分分为有限个子积分之和,然后再使用离散蒙特卡洛的方法。

评论


$ \ begingroup $
这很有趣,但是我很困惑。您能否阐明“通过选择方向的概率将该方向的结果相除”是什么意思?如果不是二进制选择而是从连续分布中选择方向,则概率不为零吗?
$ \ endgroup $
– trichoplax
16年5月23日15:00



$ \ begingroup $
@trichoplax:是的,但是在那段中,我仅描述了用于(电介质)菲涅耳BSDF的采样技术-理想的平滑表面,它是两个Dirac delta函数的总和。在这种情况下,您将以某种离散的概率选择一个方向。如果是非增量(有限)BSDF,则根据概率密度函数生成方向。不幸的是,增量和非增量情况必须分别处理,这会使代码有些混乱。可以在例如Walter等人的文章中找到有关采样微面BSDF的更多详细信息。等[2007]文件。
$ \ endgroup $
– ivokabel
16年5月23日在16:37

$ \ begingroup $
@RichieSams:Walter等。等[2007]基本上仍然是电介质粗糙表面的最新技术,但要使其正常工作,您需要一个良好的采样,该采样最近由Heitz和D'Eon在2014年发表的论文“基于微面的重要采样的BSDF”中发表。使用可见法线的分布”。并请注意,这是一个单散射模型,它忽略了微刻面之间的相互反射,从而使其在较高的粗糙度值下明显变暗。有关更多详细信息,请参见我的问题“单散射微面BSDF模型中的能量损失补偿”。
$ \ endgroup $
– ivokabel
16-5-23在16:53



$ \ begingroup $
只想指出,如果您按照问题提示选择概率= fresnel(),那么当您除以概率时,就可以抵消通常会乘以的菲涅耳因子。因此(在离散形式中,两狄拉克的情况),最终得到的光线贡献根本不包含任何菲涅耳因子。这是标准的重要性抽样理论,但是我想指出这一点是一个潜在的令人困惑的问题。
$ \ endgroup $
–内森·里德(Nathan Reed)
16年5月23日在18:22

$ \ begingroup $
@Nathan,我将您的通知纳入了答案。
$ \ endgroup $
– ivokabel
16年5月24日在11:27