图3 GPU光线跟踪流程图
将光线跟踪过程从递归方式变为循环方式后,尽管程序逻辑变得更加复杂,但从效率上90 来看,循环的方式因为减少了函数调用开销,实际上比递归方式具有更高的效率。
从逻辑上来看,光线之间是类似于二叉树的结构。但在进行光线跟踪时,并不适合使用静态二叉树的遍历算法。由于反射光线和折射光线的生成需要父光线与物体的交点信息,每条光线的颜色计算同样也需要交点信息,而求交运算是影响光线跟踪速度最主要的一个因素,因此,光线的生成和颜色的计算应该同时进行。若采用二叉树的方式存储光线之间的关95 系,则还需要再遍历一遍二叉树来计算颜色,造成重复计算交点。另一方面,尽管可以采用
保存交点的方式,但由于二叉树的结构特点,其占用的储存空间随着迭代次数的增加将成指数增长。而采用本文的堆栈方式,既可以不增加求交点的次数,也使得需要的存储空间与迭代次数保持了线性关系。
本文实现的光线跟踪渲染器的效果图如图4所示。
100
图4 渲染效果图 (分辨率 = 800×800,迭代深度 = 5)
4 性能优化
105 尽管光线跟踪渲染器已经能够在CUDA平台上正常运行,但由于CUDA的一些固有特
点,程序还有很大的优化空间。本文主要从数据传输和内存访问两个方面尝试对前文实现的光线跟踪渲染器进行了优化。
4.1 数据传输的影响
尽管采用了在GPU端完全执行程序的方式避免了场景数据的来回传输,但是在光线跟110 踪结束后,图像数据将从CUDA全局内存中被复制到内存中。在实际通过GDI或者OPENGL
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新人文社科CUDA光线跟踪渲染器的实现和优化(5)全文阅读和word下载服务。
相关推荐: