光线追踪:仅使用单光线而不是反射和光线。折射射线

时间:2012-03-28 10:58:46

标签: c++ c tracing raytracing

我目前正在尝试理解Kevin Beason开发的光线追踪器(小丘: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 个答案:

答案 0 :(得分:3)

这是蒙特卡罗射线示踪剂。它的优点是你不会产生指数增加的光线数量 - 这可能发生在一些简单的几何形状中。不利的一面是你需要对大量样本进行平均。通常,您会进行采样,直到与真实值的预期偏差“足够低”。计算出需要多少样本需要一些统计数据 - 或者您只是需要大量样本。

答案 1 :(得分:2)

据推测,他依靠超级采样像素并相信平均颜色会大致正确,尽管不那么准确。

即。通过一个像素点燃4条光线,平均反射2条,折射2条 将它们组合起来得到反射和折射的一条光线的近似值。