我正在测试镜面反射路径跟踪器。用我自己的代码渲染的图像看起来非常嘈杂,我认为它们看起来像是变化。如果采样有问题,应如何修改程序。据我了解,点光源是经过特殊处理的,因此采样结果应为恒定值。因此,我认为噪声不是由光采样引起的。

当场景中只存在无光泽的材质时,也会有变化,但不是很糟糕,并且可以看到全局照明效果。那怎么回事呢?


镜面兔子:





雾面兔子:




对于镜面兔子图像,spp为4。由于它是点光源,因此wi直接设置为点光源和交点之间的向量在计算直接照明时,因此实际上没有“采样”。计算散射方向时,BRDF与墙相交时是无光泽的,当光线照射到兔子时,BRDF是镜面反射。

哑光BRDF是余弦加权采样,而镜面反射仅使用完美的反射方向。

评论

采样后,萤火虫会变黑吗?还是卡在白色上?这表明已经输出了NAN。

@PaulHK是的,它们变得更暗,但仍然存在。有什么建议吗?

#1 楼

如果您的兔子纯粹是镜面反射镜,则由于镜面反射镜BSDF是增量BSDF,因此直接在阴影点采样光不会有任何贡献。对于镜像方向以外的任何方向,它通常求值为零。如果它是有光泽的BSDF,则pdf值可能很小,因此蒙特卡洛估计器$ \ frac {f(X)} {P(X)} $会爆炸(通常是萤火虫的来源,即pdf很小,功能很大)。

如果是镜面方向,则应该只看到黑色兔子直接照明,而只是周围场景的反射多次弹跳。镜面反射兔子的多次反弹不应引起萤火虫,因为如果您在粗糙表面上基于余弦项采样,则估计量将变为$ \ frac {L_i(X)f_r(X)\ cos(\ theta_i)} { \ text {pdf}(\ theta_i)} $,其中$ \ theta_i $是在粗糙表面使用BSDF采样的采样方向。 pdf和$ \ cos(\ theta_i)$应该完全抵消。但是,由于您使用的是点光源,因此您永远无法从BSDF采样,因为该光源是三角形光源,需要显式连接。因此,估算器的pdf始终都是1。大值爬升的唯一方法是分子。因此,我建议您通过逐个增加反弹来检查值,以查看问题何时开始蔓延。