论文部分内容阅读
近年来,随着计算机硬件的快速发展,特别是图形硬件性能的快速提升,计算机图形学有了长足的发展。硬件的改进推动着各种应用需求的扩展和提高,使得渲染的真实感已经成为人们关注的一个热点。全局光照是真实感渲染领域的一个重要内容,而光子映射又是当前模拟全局光照效果最好的算法之一,因此光子映射也就成了一个研究热点。光子映射是一种简单、灵活,但功能强大的全局光照渲染算法,但由于该算法在渲染过程中需要大量的计算而比较耗时,使得渲染速度比较慢,所以长期以来光子映射只能作为一种离线渲染技术,而无法应用于交互或者实时渲染领域。随着近年来计算机图形处理器(GPU)的高速发展,GPU已经具备高效的并行性和灵活的可编程性,以及强大的通用计算能力。现在可以利用其强大的并行计算能力,加速光子映射的渲染过程,从而使得光子映射方法在一定条件下达到实时渲染的性能。本文首先分析和讨论了全局光照以及它的渲染方程,然后探讨了如何将光子映射转化为并行化渲染算法的设计过程,最后根据该过程详细地分析和讨论了光子映射算法在GPU中的实现过程,并对实现中存在的问题和难点,提出了一些改进的方法,具体如下:1、本文在分析并行处理方式的基础上,探讨了光子映射算法中哪些过程可以并行化处理,以及如何将其转化为并行操作,从而使得光子映射成为一个并行渲染方法。文中还进一步讨论了如何合理地将场景数据分配到各个处理器上,使得各处理器的负载尽可能平衡,从而加快光子映射的实现过程。2、深入研究了CUDA的编程模型,分析了在CUDA架构中CPU与GPU之间的关系;然后针对在CUDA中并行化实现光子发射和跟踪过程中出现的任务分配和负载平衡问题,提出了一些解决的方法,并且讨论了用于表示光子图的数据结构,以及如何并行化存储光子来构建光子图。3、针对在实现光子跟踪过程中需要应用递归函数来多次跟踪光子,而目前CUDA却不支持递归函数调用的问题,本文通过引入队列结构来保存和恢复光子跟踪过程中的各种状态,将光子跟踪中的递归思想更改为循环方式实现,很好地解决了递归函数调用的问题。4、在详细分析和讨论光子映射在CPU中的实现过程和探讨光子映射并行化设计方法的基础上,适当地修改了光子映射算法,使其能够通过CUDA完全运行在GPU上,从而利用GPU强大的并行计算能力,加速光子映射的实现过程。本文最后给出了实验结果,并作了结果的分析。