作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在尝试理解由 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);
谁能解释一下只转换一条射线而不是转换两条射线的缺点?我从未听说过这种技术,我很好奇它的权衡是什么,因为它会大大降低复杂性。
最佳答案
这是一个蒙特卡洛光线追踪器。它的优点是您不会产生呈指数增长的光线数量 - 这可能会出现在一些简单的几何形状中。缺点是您需要对大量样本进行平均。通常,您会进行采样,直到与真实值的预期偏差“足够低”。计算需要多少样本需要一些统计数据 - 或者您只需要大量样本。
关于c++ - 光线追踪 : Only use single ray instead of both reflection & refraction rays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9906093/
我目前正在尝试理解由 Kevin Beason (smallpt: http://www.kevinbeason.com/smallpt/) 开发的光线追踪器,如果我正确理解代码,他会随机选择反射或折
我是一名优秀的程序员,十分优秀!