论文部分内容阅读
近年GPU通用计算的发展为虚拟现实领域算法的改进提供了良好的条件,为并行化解决效率问题提供了机遇。CPU+GPU组成的异构计算环境更是为虚拟现实算法中实时性问题的解决提供了更好的方法。虚拟现实技术广泛应用于计算机游戏、计算机辅助教学、计算机辅助设计等领域,并在近十年有巨大的发展。随着人们对虚拟现实系统场景逼真度及高交互性要求的日益提高,系统计算数据量也大幅度提升。其中,场景中物体的碰撞检测计算是整个计算的重要组成部分。因此,解决碰撞检测计算的实时性常常是整个虚拟现实系统高效实现的关键。碰撞检测是判定两个或更多对象是否有一个或多个交点的过程。碰撞检测的研究是计算机图形学、虚拟现实、医学模拟等领域的重要分支。在很多情况下,移动对象在虚拟场景地图中移动不允许发生与某些对象的穿透,实时的碰撞检测算法是解决这类问题的关键。层次包围盒技术与空间划分技术是碰撞检测算法的两个基础方法,它们分别从两个方面降低碰撞检测过程的计算复杂度。尽管这几年碰撞检测研究有了较多有价值的成果,但随着场景与模型规模复杂度的日益提高,同时用户对人机交互的实时性与精确性要求也越来越高,核心算法需要有更高的效率。但是,经典的层次包围盒技术与空间分割技术不能直接使用GPU做加速计算,需要对其进行改进以适应GPU的硬件多线程处理。本文围绕虚拟场景中碰撞检测问题,对提高复杂场景下检测效率进行了分析与研究,在对各种基本碰撞检测算法深入理解的基础上,结合NVIDIA CUDA通用计算平台,以异构编程的思想从下几个方面对算法进行改进:首先,对碰撞检测算法中物体模型包围球层次树以及三角形数据集合的数据结构进行详细分析,再基于CPU+GPU异构计算思想进行问题分解,分层讨论宽阶段的初步检测与大规模多物体检测。在宽阶段碰撞检测算法与窄阶段碰撞检测算法中改进CPU端执行部分以适应GPU端对输入数据的要求,分离出计算密集型的Device (GPU)端部分;然后,创建适合GPU处理的相交测试逻辑,再将场景中物体间相交测试映射到CUDA线程执行模型;最后,根据GPU存储器模型进行效率优化。具体的说,在宽阶段碰撞检测中,CPU负责包围球层次树的构建与遍历,GPU负责一物体包围球层次树与另一物体三角形集合的并行相交测试,剔除不可能相交的三角形集合,得到潜在相交集合;在窄阶段碰撞检测中GPU以上一阶段的数据为输入,对三角形集合进行精确的并行相交测试,并最终得出测试结果。对于多物体场景则先在CPU端对场景对象集合进行分组,以便于后续GPU并行执行,然后,GPU以多趟的方式做物体间检测,并利用并发Kernel提高执行效率。与串行Rapid算法以及GPU并行OBBs CG算法对比的实验结果显示,异构碰撞检测算法在实时性方面有更加出色的表现,而且随着场景模型复杂度的提升,处理时间保持平缓的增长,同时具有较高的稳定性。在多物体场景方面,本方法亦表现出良好的实时性。