我目前正在尝试理解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);有人能解释一下只投射一条光线而不是投射两条光线的缺点吗?我从来没有听说过这种技术,我很好奇它的权衡是什么,因为它可以极大地降低复杂性。
发布于 2012-03-28 19:15:05
这是一台蒙特卡洛光线跟踪器。它的优点是你不会产生成倍增长的射线--在一些简单的几何图形中可能会出现这种情况。缺点是,您需要对大量样本进行平均。通常,您需要采样,直到与真实值的预期偏差“足够低”。计算出需要多少样本需要一些统计数据--或者你只需采集大量样本。
发布于 2012-03-28 19:07:53
据推测,他依赖于超采样像素,并相信平均颜色将大致正确,尽管不是那么准确。
即通过一个像素发射4条光线,平均2条光线被反射,2条光线被折射。
将它们组合在一起以获得反射和折射的光线的近似值。
https://stackoverflow.com/questions/9906093
复制相似问题