因此,我最近在路径跟踪器中基于下一个事件估计实现了多重要性采样。

问题出在没有MIS的情况下,我得到的图像类似于



通过设置light_sample *= 1/light_pdf; // Note no mis_weight
,仅返回此样本即可获得。没有BRDF采样。

与上面定义的MIS一样,我得到的图像更暗,如


原因肯定是mis_weight的原因。从我在互联网上收集到的信息来看,我的MIS代码还可以,但是从理论上讲似乎并不正确。例如,假设我们首先执行了光采样并获得了mis_weight。之后,当我们尝试进行BRDF采样时,射线没有与任何光源相交,从而导致light_pdf = 0。我们忽略了这一估计。既然我们忽略了这一估计,那么在甚至没有使用多个估计量的情况下,对mis_weight的轻量样本进行加权,这是不对的,当我们甚至没有使用BRDF pdf进行任何估计时,权重的总和等于1吗? />
Imo,仅当BRDF采样也会导致光线与光源相交时,才应使用mis_weight中的light_sample因子。

谁能解释这些结果是否正确代码有问题吗?

编辑:-还有另一种情况,有点令人困惑。我目前正在使用启发式(基本上是功率/距离)从多盏灯中选择1盏灯。如果“光采样”和“ BRDF采样”选择了不同的光源怎么办。 MIS仍然有效吗?由于PDF会发生变化,导致权重不再能加到1

EDIT2:-Stefan在这里指出了一个错误,就是我在钳制辐射。这就解决了这个问题,并改变了我为MIS获得的结果。我仔细检查了PBRT的实现,它与我的类似。我仍在使用MIS获得较暗的图像,但是现在我得到的萤火虫越来越多,我想我读到MIS减少了萤火虫?更新了图像。似乎萤火虫在MIS中较少,但是反射似乎很难收敛。

请注意,反射很难收敛。两个图像均为1000 spp。顶部没有MIS。




我要删除代码段并为整个内核添加指向github的链接。核心功能是evaluateDirectLightingshadingsampleLights。链接到代码的位置是“这里”。

-发现一个错误。在计算brdf样本时,我使用的是直接照明方程式。 (乘以$ \ cos(\ theta ^ {\ prime})$并除以$ r ^ 2 $)。因为我们最初是通过BSDF采样的,所以删除了它,它是在立体角而非面积上不可或缺的。图像变亮了一点。仍然不知道MIS是否按预期工作。请参阅答案。

EDIT3:-还添加了一个发行版。因此,如果有人愿意,他们可以尝试更改“ * .cl”文件中的代码并运行该程序以查看结果。 (您必须具有受OpenCL 1.1支持的GPU或CPU)

EDIT4:-这是我现在正在做的概述。

首先我选择一个光源使用简单的启发式方案(例如距离,强度,面积和余弦衰减角)进行倍数转换。我像这样适当地设置灯光的权重

$ light \ _pdf =重量/面积$

其中权重在0-1范围内。 />接下来,我追踪射线以查看光源是否可见。如果是,我使用直接照明方程式(面积上的积分)计算$ light \ _sample $。

然后,我计算给定射线的BRDF PDF。但是我使用Lafortune的算法。如果随机数落在镜面反射颜色下,则通过修改后的Phong PDF进行采样,否则通过余弦进行采样。

权重使用幂启发法计算, light \ _pdf ^ 2 + brdf \ _pdf ^ 2)$

然后将MIS估算器计算为

$ light \ _sample = light \ _sample *重量/ light \ _pdf $

之后,我开始进行BRDF采样。我根据之前在轻度采样计算中所做的操作,再次通过Phong / Cosine进行采样。如果采样的射线没有击中任何光源或不是同一光源。我将$ brdf \ _sample $设置为零。如果成功,我将$ light \ _pdf $设置为与以前相同的值。如上所述计算权重,并使用原始方程式(在立体角上积分)计算brdf样本。

EDIT5:-在提出lightxbulb建议后,我认为问题已解决。

请注意,图像看起来可能有很大不同,但这是因为我同时执行了Tonemapping + Gamma校正:)
使用MIS 700spp


没有MIS 700spp >

评论

您不应该在brdf_pdf中包含余弦简化术语。

我使用余弦加权半球采样,因此BRDF PDF应该是cos(theta)/ pi

可能是巧合,但您的漫反射表面是否恰好是PI的深色倍?
@PaulHK-这意味着什么?我不认为它实际上是PI乘以较暗,而是mis_weight乘以较暗/较亮。因为正如我所说,只要删除mis_wieght并除以light_pdf,我就会得到更明亮的图像。

真的是在黑暗中拍摄,我在这里看到了其他问题,解决方案令人惊讶地是。

#1 楼

在我的整个回答中,有时会使用[MIS,section_number]引用https://sites.fas.harvard.edu/~cs278/papers/veach.pdf中的一些结果。

您可以如果您不关心使用MIS组合估计量为何有效的数学解释,请跳过以下推导。
我必须从MIS的目的开始。通常的想法是,您要通过蒙特卡洛估算一些整数$ I = \ int _ {\ Omega} {f(x)\,d \ mu(x)} $,并且有各种采样pdf(在我们的示例中pdf表示灯光上的采样点,pdf表示来自brdf的采样方向。另外,您想使用多种技术进行采样,然后以最佳方式(在某种意义上)组合贡献。为简单起见,我将只限于两个pdf:$ p_L(x),p_B(x)$相对于同一度量$ \ mu(x)$。

您还具有加权函数$ w_1(x),w_2(x):\ Omega \ rightarrow [0,1],w_1(x)+ w_2(x)= 1 $以及$ n $独立且相同地分布( iid)对$ x_ {p_L,i}进行采样:i = 1,...,n $根据$ p_L $和$ m $ iid样本$ x_ {p_B,j}:根据$ p_B $ j = 1,...,m $,我们可以将MIS结合使用Monte Carlo来估计积分$ I $:
$$ I = \ int_ {\ Omega} {f(x)\,d \ mu(x)} = \ int _ {\ Omega} {f(x)(w_1(x)+ w_2(x))\,d \ mu(x)} \\
= \ int _ {\ Omega} {\ frac {w_1(x)f(x)} {p_L(x)} p_L(x)\,d \ mu(x)} + \ int _ {\欧米茄} {\ frac {w_2(x)f(x)} {p_B(x)} p_B(x)\,d \ mu(x)} \\
= E \ left [\ frac {w_1( X_ {p_L})f(X_ {p_L})} {p_L(X_ {p_L})} \ right] + E \ left [\ frac {w_2(X_ {p_B})f(X_ {p_B})}
{p_B(X_ {p_B})} \ right] \\
= \ frac {1} {n} \ sum_ {i = 1} ^ {n} {E \ left [\ frac {w_1( X_ {p_L,i})f(X_ {p_L,i})} {p_L(X_ {p_L,i})} \ right]} + \ frac {1} {m} \ sum_ {j = 1} ^ { m} {E \ left [\ frac {w_2(X_ {p_B,j})}
{p_B(X_ {p_B,j})} \ right]} \\
= E \ left [\ frac {1} {n} \ sum_ {i = 1} ^ {n} {\ frac {w_1(X_ {p_L,i})f(X_ {p_L,i}) } {p_L(X_ {p_L,i})}} \ right] + E \ left [\ frac {1} {m} \ sum_ {j = 1} ^ {m} {\ frac {w_2(X_ {p_B, j})f(X_ {p_B,j})}
{p_B(X_ {p_B,j})}} \ right] \\
有了这个结果,首先要注意的是,两个pdf都是相对于同一度量$ \ mu(x)$定义的。但是,我相信在您的代码和概述中,您是针对面积$ p_L $采样的pdf是相对于面积度量定义的,而针对brdf $ p_B $采样的pdf是针对立体角度度量而定义的。两者之间的关系是$ d \ sigma(x \ rightarrow y)= \ frac {\ cos \ theta_y} {|| xy || ^ 2} dA(y)$,其中$ x \ in \ mathbb {R} ^ 3 $是您要为其计算照明的当前点(即您的交点),而$ y \ in \ mathbb {R} ^ 3 $是某些光源表面上的一个点。另外$(x \ rightarrow y)= \ frac {yx} {|| yx ||} $只是从$ x $到$ y $的单位方向向量,$ \ cos \ theta_y = n_y \ cdot(y \ rightarrow x)$是光表面的正常$ n_y $(也是单位长度)在$ y $和$-(x \ rightarrow y)$之间的夹角余弦。更具体地说,您作为light pdf生成的东西实际上是选择light $ weights [i] / sum $的概率乘以在光源上均匀选择了您选择$ 1 / area $的点的概率。您的代码和概述中似乎缺少对面积(或反之亦然)的立体角转换,也就是说,您的pdf是相对于面积度量的,而您将它与pdf(brdf)结合是相对于面积的立体角测量,从我上面的推导中可以明显看出这是错误的。要获得相对于面积度量而不是立体角度量的brdf pdf,可以使用:$ p _ {\ omega}(\ omega)\,d \ sigma(\ omega)= p_A(y)\,dA(y )$,然后使用度量$ p_A(y)= p _ {\ omega}(\ omega)\,d \ sigma(\ omega)/ dA(y)= p _ {\ omega}(\ omega)\ frac之间的关系{\ cos \ theta_y} {|| xy || ^ 2} $。您可以参考[MIS,2.3]公式(9)。\ approx \ frac {1} {n} \ sum_ {i = 1} ^ {n} {\ frac {w_1(x_ {p_L,i})f(x_ {p_L,i})}} {p_L(x_ {p_L ,i}}}}
+ \ frac {1} {m} \ sum_ {j = 1} ^ {m} {\ frac {w_2(x_ {p_B,j})f(x_ {p_B,j })}
{p_B(x_ {p_B,j})}}
$$
由于$ w_1(x)+ w_2(x)= 1 $,第二个等式成立的地方第四项来自期望值的定义,第五项成立,因为$ X_ {p_L,i} $是根据$ p_L $独立且相同地分布(iid),而类似地,$ X_ {p_B,i} $是iid根据$ p_B $。由于期望的性质(因积分是线性算子这一事实而产生),第六个成立。最后的近似等式来自于强大的大数定律(样本的平均值几乎可以肯定地收敛到期望值,并且样本数达到无穷大)。


现在在实际操作中,您需要知道何时应用误称。有几种情况发生。最初,对于第一束光线,您不应该使用MIS,因为您不应该直接对任何光线进行采样。此外,如果最后一次反射是完全确定性的(理想的反射/折射),则也不应使用MIS,因为在这种情况下对光进行采样是没有用的。最后,如果您通过对bsdf进行采样击中了灯光,则应使用MIS来添加此贡献,然后将bsdf pdf转换为面积测量值,然后通过使用light pdf和使用渲染方程的面积公式估算器。对灯光进行采样时,还应该使用MIS,再次计算面积公式估算器。最后,如果您有点光源,则只能通过NEE进行采样,因此您不应该使用MIS。另外,“从那以后,我开始进行BRDF采样。”我对您的解释一无所知。

评论


$ \ begingroup $
感谢您的详细撰写。因此,简而言之(1),我需要使用面积而不是立体角的积分来计算轻度和brdf样本。 (2)我还需要计算该区域的BRDF PDF。我实际上在做(1),但将其更改为立体角积分,并注意到图像变得更亮。好吧,反正很快就会报告。
$ \ endgroup $
–gallickgunner
19年2月24日在18:33

$ \ begingroup $
您可以选择两个公式之一:面积或立体角。这意味着您所有的pdf(甚至不在权重范围内)都应该与该公式以及您使用的渲染公式公式以及因此要计算的估算器相匹配。好消息是,除了权重的pdf之外,其他任何内容都不需要更改。由于我认为您的大多数东西已经采用了立体角公式(您的brdf pdf和估算器),因此只需将浅pdf转换为立体角(乘以$ r ^ 2 / \ cos \ theta_y $)。
$ \ endgroup $
–lightxbulb
19年2月24日在18:47

$ \ begingroup $
谢谢您的回答。我认为大多数问题都已解决。检查更新图像。萤火虫似乎也不少,或者只是它们太多而无济于事。我将尝试使用不同的场景参数。我也听不懂您对第一射线的看法,不应该使用MIS。我认为您的意思是天真的路径跟踪。我正在使用NEE。
$ \ endgroup $
–gallickgunner
19年2月24日在19:43

$ \ begingroup $
第一束光线(从相机发出)不应该使用NEE,因为您会碰到任何可见的东西。萤火虫甚至没有减少的事实是很奇怪的(尽管这不是不可能的),所以我仍然有我的疑问。
$ \ endgroup $
–lightxbulb
19年2月24日在20:02

$ \ begingroup $
关于萤火虫的消逝,我认为萤火虫在我的场景中出现的真正原因是因为反射球体显示出明亮光源的图像。与光源的实际大小相比,这是非常小的。因此,当光线撞击墙壁时会反弹,只有极少数光线最终会反射到反射球体上的光源图像上,从而在某些样本中产生令人难以置信的高色彩。这听起来好像我是双浸灯(来自NEE的是第一盏灯,来自反射球的是第二盏灯)听起来是错误的,但从未见过这样的情况:人们忽略了GI中的光反射。
$ \ endgroup $
–gallickgunner
19年2月24日在21:07

#2 楼

许多人都对直接照明的MIS犯错的第一件事是,对于光采样和BSDF采样,必须始终考虑相同的光源。例如,如果您在光采样期间对光$ L_i $进行采样,并且从BSDF采样中产生的光线命中$ L_j $,则您无法将它们混合在一起,因为不能将概率一起用于权重。

评论


$ \ begingroup $
回答了我在编辑部分中提到的观点。尽管主要问题仍然存在。
$ \ endgroup $
–gallickgunner
19年1月8日在16:08