【发布时间】:2012-04-11 23:04:42
【问题描述】:
我目前正在尝试了解 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);
谁能解释一下只投射一条光线而不是同时投射两种光线的缺点?我从来没有听说过这种技术,我很好奇它的取舍是什么,因为它可以大大降低复杂性。
【问题讨论】:
-
您是否看过 this presentation,它解释了所有内容并明确链接到该网站?
-
是的,我已经阅读了演示文稿,非常棒!我正在寻找的是关于仅投射单条射线如何影响算法效率的更深入的解释。为什么他决定对于不超过 2 的深度,两条射线都应该被评估,而不是事后评估(即,为什么它恰好是 2 或者它或多或少是随机的,有什么理由吗?)。
-
或多或少是随机的,但这个想法可能是您将从最初的几次反射和吸收中获得最大的颜色强度。你反射/折射得越远,贡献就越微不足道。
标签: c++ c trace raytracing