Bur*_*son 6 math 3d graphics raytracing
在使用大量蒙特卡罗样本进行路径追踪的所有简单算法中,跟踪算法的路径部分随机选择返回当前表面的发射值并继续追踪来自该表面半球的另一条射线(例如,这里滑动 ).像这样:
TracePath(p, d) returns (r,g,b) [and calls itself recursively]:
Trace ray (p, d) to find nearest intersection p’
Select with probability (say) 50%:
Emitted:
return 2 * (Le_red, Le_green, Le_blue) // 2 = 1/(50%)
Reflected:
generate ray in random direction d’
return 2 * fr(d ->d’) * (n dot d’) * TracePath(p’, d’)
Run Code Online (Sandbox Code Playgroud)
这只是一种使用俄罗斯轮盘赌终止路径同时保持不偏不倚的方式吗?当然,将所有射线路径的发射和反射特性统计在一起并使用俄罗斯轮盘只是为了决定是否继续跟踪更有意义.
这是一个后续问题:为什么我所看到的这些算法中的一些(如"基于物理的渲染技术"一书)只计算一次发射,而不是考虑对象的所有发射属性?渲染方程基本上是
L_o = L_e + integral of (light exiting other surfaces in to the hemisphere of this surface)
这似乎计算了这个L_o和所有其他L_o的积分中的自发属性,所以算法应该遵循.
阅读幻灯片后(感谢您的发帖),我将尽力修改我的答案。
也许发射和反射属性的处理方式不同,因为反射路径依赖于入射路径,而发射路径则不然(至少对于光谱表面而言)。该算法是否采用贝叶斯方法并使用有关入射角的先验信息作为预测反射角的先验信息?或者这是对所有路径的费曼积分来得出概率?如果不深入研究该理论的细节,很难说清楚。
我之前对黑体的评论是非常不正确的。我看到幻灯片讨论了(R、G、B)组件;黑体发射率在所有波长上积分。
这里有一个后续问题:为什么我看到的一些算法(例如《基于物理的渲染技术》一书中)只计算发射一次,而不是考虑对象上的所有发射属性?渲染方程基本上是
L_o = L_e + (光从其他表面射入该表面的半球)的积分
表面的单一发射率将假设波长或方向上不存在函数关系。我不知道它对于渲染逼真的图像有多大意义。
发布的内容肯定令人印象深刻。我想知道如果将您想到的复杂性包括在内,它们看起来会有何不同?
感谢您提出一个好问题 - 我正在投票。我已经很久没有思考过这样的问题了。我希望我能提供更多帮助。