我目前正在尝试理解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);
任何人都能解释一下只投射一条光线而不是两条光线的缺点吗?我从来没有听说过这种技术,我很好奇这种权衡是什么,因为它会导致复杂性的大幅降低。
答案 0 :(得分:3)
这是蒙特卡罗射线示踪剂。它的优点是你不会产生指数增加的光线数量 - 这可能发生在一些简单的几何形状中。不利的一面是你需要对大量样本进行平均。通常,您会进行采样,直到与真实值的预期偏差“足够低”。计算出需要多少样本需要一些统计数据 - 或者您只是需要大量样本。
答案 1 :(得分:2)
据推测,他依靠超级采样像素并相信平均颜色会大致正确,尽管不那么准确。
即。通过一个像素点燃4条光线,平均反射2条,折射2条 将它们组合起来得到反射和折射的一条光线的近似值。