GPU加速的基于物理的布料仿真
研究基于物理的布料仿真方法,可用于本项目构建三维人体模型相对应的着装模型,该类方法的核心问题在于提升仿真速度及仿真效果。
碰撞检测用来检测表示布料的三角形网格上哪些三角形之间发生了碰撞,以便进一步对这些碰撞对进行碰撞处理,是布料仿真中不可缺少的一部分。为了提高仿真效率,碰撞检测分为三部分进行:高层碰撞剔除,低层碰撞剔除以及精确碰撞检测。我们在高层碰撞剔除中主要针对布料的自碰撞检测做了相关工作。基于传统的法向锥测试,我们提出了非投影的法向锥自碰撞检测方法。通过平面上的一个顶点与该平面边界边的关系来判断该平面区域是否存在自碰撞。我们还提出一种分层的遍历模式,大大减少了法向锥测试的次数与占用空间。在碰撞处理方面,我们利用碰撞响应优化求解器相邻迭代间的时空连续性,针对基于GPU的交互式布料仿真提出了一种增量式碰撞处理方法。我们采用增量式连续碰撞检测方法追踪变形顶点并与空间哈希技术相结合,使用一个非线性的基于GPU的碰撞区域(impactzone)求解器来解决穿透。我们的方法能够模拟复杂的布料变形,且比先前的方法加速7至10倍。
在仿真效果方面,材质属性的设定与仿真效果关系密切,从我们先前的研究看,弹簧-质点模型中简单地设定一个弹性系数并不完全符合布料的实际情况,容易发生超过应变极限(strain limit)的过拉伸现象。虽然能够通过增加约束等手段防止过拉伸现象,但这也表明在拉伸超过一定范围时,应力并非线性增长。为此我们用分段线性函数来表达应力与拉伸的关系,以兼顾计算效率与效果。在碰撞检测方面,我们提出了一种精确而稳健的可变形模型自碰撞检测方法。一方面,我们提出了一种采用表面法向锥和副法向锥进行法向锥测试的新方法。另一方面,我们将剔除标准与包围盒层次结构(BVH)结合起来,并以此为基础提出了一种层次遍历方案。与之前基于包围和层次结构的双锥法不同,我们的方法可以可靠地检测所有自碰撞,并且与其他高层剔除方法相比获得了明显的加速。
如图所示,我们提出的GPU加速的碰撞处理算法能够仿真复杂的多层不规则形状的布料,且在一块NVIDIA GeForce GTX 1080显卡下速度达到2-8帧每秒,比先前的算法加速7-10倍。
