爆炸的问题因此伪代码应该修改为注意到其中式子中的和。为只选择了其中一条光线即但是在每个方向上只随机选择其中一条光线而不是一束光线虽然可以解决光。线爆炸问题但是同时又会产生噪音太大的问题解决的方法就。是在每个像素中跟踪更多路径的光线最后再取平均。因此再以上的伪代码的基础上再新增一个传入摄像机位置和像素区域在像素。区域内取个样本位置遍历这个样本点对于每一个样本点使其从相机位。置向被观测的这个样本点射出一条光线之后对其进行取的操作注意传入的第二个变量时被观测点到摄像机。
的方向而射线是摄像机到被。观测点的方向存在问题递归终止条件伪代。码中缺少了光线反射的终止条件也就是说一条光线是可以被无数次反射的虽然这与现实中的光线反射相一致但是这会导致算法无法停止。解决方法俄罗斯轮盘赌即假设向某一个方向上有概率发射出一条光线 阿尔及利亚电话数据 最终返回的结果是而当取到概率时返回的结果是。最终得到的式子是一个二项分布而其结果也就是期望值仍然是我们所需要的结果因此在伪代码的修改也只是在中修改添加一个选取光线的概率使设定的一个限定在中当比要大则返回代表着这根。
光线最终未存活该处也是终止条件最终返回结果再除以一个即可存在问题产生的原因可以参考下图如果我。们进行均匀采样对于较大的光源来说被观测点可能。只需要打出根光线就能打到光源而对于。极小的光源来说可能需要打出根光线才能找到光源其间会导致大量的光线浪费解决方法直接在光源上进行采样即所有的采。样点均在光源上从光源上进行采样。样就不会导致光线的浪费。注意点之前蒙特卡洛积分要求是在被观测点上采样被观测点上积分因此如果在光源上采样则需要转换到在光源上积分才能使用蒙特卡洛。
|