光线追踪:仅使用单条光线而非反射和折射光线。

5
我目前正在尝试理解Kevin Beason开发的光线追踪器(smallpt:http://www.kevinbeason.com/smallpt/),如果我正确地理解了代码,他随机选择反射或折射光线(如果表面既有反射又有折射)。
第71-73行:
return obj.e + f.mult(depth>2 ? (erand48(Xi)<P ?   // Russian roulette
radiance(reflRay,depth,Xi)*RP:radiance(Ray(x,tdir),depth,Xi)*TP) :
radiance(reflRay,depth,Xi)*Re+radiance(Ray(x,tdir),depth,Xi)*Tr);

请问只投射一个光线而不是两个的缺点是什么?我之前从未听说过这种技术,很好奇它的权衡是什么,因为它可以大大减少复杂度。


2
你看过这个演示文稿了吗?它解释了所有的内容,并且在那个网站上有明确的链接。链接为:https://docs.google.com/open?id=0B8g97JkuSSBwUENiWTJXeGtTOHFmSm51UC01YWtCZw - KillianDS
是的,我已经阅读了这个演示文稿,它非常棒!我想要的是更深入的解释,关于只投射单个光线如何影响算法的效率。为什么他决定在深度达到2之前都应该评估两个光线,但之后不需要(即是否有任何理由使其恰好为2,或者它更多还是更少是随意的?)。 - crapper
更多或少的随机,但大概的想法是你会从最初的几次反射和吸收中获得最强的颜色强度。你反射/折射的距离越远,贡献就越微不足道。 - KillianDS
2个回答

3

这是一个蒙特卡罗光线追踪器。它的优点在于不会产生呈指数增长的光线数量——这在一些简单的几何情况下可能会发生。缺点在于需要对大量样本进行平均。通常情况下,您要采样直到期望的偏差值足够小为止。确定所需样本量需要一些统计知识,或者您可以多采集一些样本。


2

他可能依靠超采样像素,并相信平均颜色会大致正确,虽然不是很准确。

也就是说,将4个光线通过一个像素,并且平均两个光线被反射,两个光线被折射。
将它们组合起来,得到一个近似的反射和折射光线。


从代码看来,这看起来差不多正确,请查看(注释)第83、84行。 - George Duckett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接