Monte Carlo Path Tracing算法实现

内容及要求

开发环境

软件使用说明

程序启动

运行Win32 Release工程(双击Release目录下的MonteCarloPathTracer.exe),程序启动,默认加载解决方案下models路径中的scene01.obj模型文件,并使用Monte Carlo Path Tracing算法对所加载模型进行绘制,其迭代的最终结果如图1所示。在命令窗口中输出显示窗口的大小和当前模型绘制迭代的次数。图2为scene02.obj的绘制结果。

图1 scene01 模型的绘制结果

图2 scene02 模型的绘制结果

数据结构说明

为了使得程序具有良好的层次性,采用了C++面向对象的编程。程序根据不同阶段的需求,设计了如下类,并对其需要完成的功能和特点进行了说明:

加速说明

本文程序根据路径跟踪算法的特点,进行了如下加速:

图3 scene01迭代过程

总结

在程序调试的过程中遇到了很多问题,其中一个问题很难发现原因所在。在scene01的2个球上出现了很多暗块,其表现如图4左图所示。后来进行了单步调试,我才发现路径跟踪的过程中出现了光线反射后的交点和前一个交点的距离只有10-6。这时,我猜想可能是老师上课提到的浮点误差。于是,我在光线起点与场景交点的距离上设置了容忍误差为10-5。这时,我得到了如图4右图所示结果。

图4浮点误差引起的Bug

对于scene02,其绘制结果如图2所示,与标准程序的绘制结果对比,存在较大的差距,我在材质文件中增加了Ke属性,使得球光源能够自发光,并且修改了Ns参数,使其具有比较明显的高亮效果。但是仍然与标准程序的结果存在差异。我认为有可能是材质文件(mtl文件)存在问题。另外因为路径跟踪中应用了直接光照,对于scene02的绘制速度比较慢。

附录:其他场景的运行结果

图5sportsCar模型的绘制结果

图6CornellBox-Glossy模型的绘制结果
Table of Contents