论文部分内容阅读
织物动态模拟在角色动画、路径规划、三维游戏、医学手术以及人机交互等诸多领域都有广泛应用。大量应用表明,实现织物动态实时模拟的关键在于加速物理模拟过程和碰撞检测过程。然而,基于CPU的算法改进加速程度有限,很难达到实时。随着图形硬件的飞速发展,基于GPU的并行算法设计成为图形学领域的研究热点。本文工作正是基于GPU的特性,研究并提出织物模拟和自碰撞检测的并行算法,进而在GPU平台上实现了织物动态的实时模拟系统。在织物模拟算法中,采用弹簧-质点系统对织物建模,并通过显式欧拉迭代更新质点状态。算法定义每个线程计算一个质点,线程与质点一一对应并行计算。由于模型结构中每个弹簧连接两个质点,为了避免每根弹簧被计算两遍,我们设计了弹簧力矩阵。另外,模型中边界质点和非边界质连接弹簧的个数并不相同,我们利用权值矩阵统一了所有质点的计算公式,使其更加符合GPU高并行、低判断的特性。针对碰撞检测问题,本文提出了一种基于质点的并行自碰撞检测算法。算法以质点而非三角形作为自碰撞检测的基本单元,用球体包围以质点为中心的局部区域,再用AABB包围球体的运动轨迹,在GPU上进行包围盒的相交测试。为了平衡每个线程的计算量,文中设计了平摊算法,使每个线程进行相同数量的相交测试。本文的检测算法只需通过一遍“渲染”即可完成自碰撞检测:线程在进行相交测试时,仅保存计算所得的第一次碰撞信息,而不需要计算出所有的碰撞对。在一遍“渲染”后,每个线程都得到了当前图元第一次发生碰撞的时间和对象信息,进而输出结果到碰撞响应和渲染阶段。本文在GPU的CUDA平台上实现了算法所描述的织物动态模拟系统。系统完成初始化之后,每一帧的模拟计算、碰撞检测和渲染都在GPU上进行,CPU仅起到调度和控制的作用。在具体实现中,我们还设计并应用了多种优化方法,如:层次四叉树、只读数据绑定纹理对象、基于质点的法向锥等。实验结果验证了算法的正确性和有效性,其中模拟过程的平均性能比CPU实现提高了30倍,碰撞检测过程提高了18倍以上。