我正在用C ++为学校编写双向路径跟踪编码,我有一些问题(我在网上找不到有用的解释)
1)为什么EyePath还有一个顶点?
2)当我在EyePath创建过程中计算直接照明时,是否需要考虑前一个顶点的值?我问的是因为我在代码上看到了它但看起来很奇怪。
3)我不太了解如何连接两条路径。随机?每个人都和大家一起?目前我随机连接一个顶点和另一个顶点。
4)PBRT书根据Eyepath和LightPath长度实现贡献。我是否需要知道几何体中的所有物体都是漫反射的?
5)每次弹跳都会在半球中随机产生新光线吗?
所有对象都是漫反射的。
目前,我得到15个样本的结果。
答案 0 :(得分:1)
1)为什么EyePath还有一个顶点? 那是你眼睛/相机上的位置样本。对于针孔摄像机,它是一个固定点,但对于有限孔径的薄镜头摄像机,需要进行采样。
5)每次弹跳都会在半球中随机产生新光线吗? 这就是BRDF的用途。如果你不在乎重要的采样,那么半球上的随机均匀是最简单的。无论如何,请阅读PBRT书中的蒙特卡洛抽样章节。
我猜你是蒙特卡洛射线追踪的新手。双向路径跟踪是基于路径跟踪,光跟踪和重要性采样的高级算法。因此,在进行双向编码之前,请确保您已经理解了这些技术〜
PS:刚刚找到了双向路径跟踪实现的详细解释(9部分系列):http://rendering-memo.blogspot.com/2016/03/bidirectional-path-tracing-1-kickoff.html