一种基于人脑变形仿真的快速连续碰撞检测方法

文档序号:9453274阅读:384来源:国知局
一种基于人脑变形仿真的快速连续碰撞检测方法
【技术领域】
[0001 ] 本发明涉及一种模拟脑部变形过程中的快速连续碰撞检测方法,属于计算机虚拟现实领域。
【背景技术】
[0002]碰撞检测(Collis1n Detect1n,⑶)的目标是确定两个或者多个物体两两之间是否发生接触。物体之间之所以需要进行碰撞检测,是基于现实生活中一个普遍存在的事实:两个不可穿透的对象不能共享相同的空间区域。
[0003]碰撞检测根据时间域划分为三类:静态碰撞检测、离散碰撞检测(DiscreteCollis1n Detect1n, DCD)以及连续碰撞检测(Continuous Collis1n Detect1n, CCD);根据碰撞检测对象的性质,分为刚体的碰撞检测与可变形体的碰撞检测,其中刚体的情况较为简单,然而由于可变形体在场景中的结构不断变化,需要不断地更新物体的结构,同时还要考虑到可变形体的自碰撞情况。大部分现有的碰撞检测算法需要较多的时间来完成物体结构的更新以及自碰撞检测(Self-Collis1n Detect1n, SCD),很难保证实时性的要求。人脑属于可变性软组织,且由于人脑复杂的结构以及在人脑虚拟手术中对精度的高要求,需要基于其特征研究一种能同时满足速度和精度要求的碰撞检测算法。
[0004]由于精度的问题本质是计算量的问题,目前主流的对碰撞检测的加速集中在以下两个方面:
[0005](I)基于邻接关系的剔除算法,利用网格的拓扑信息,减少基元检测中的重复计算。文南犬 1--S.Curtis, R.Tamstorf and D.Manocha, Fast collis1n detect1n for
deformable models using representative-triangles.,Proc.acm Symp.1nteractivedGraphics&Games (2008),61-69.利用网格拓扑信息中的邻接信息构建了一个邻接三角形的孤集(Orphan set),在进行基元检测时,通过孤集过滤掉邻接的三角形对,避免了重复的检测。
[0006](2)基于不同硬件体系的并行加速。其中主要分为利用多核CPU加速与利用
GPU 进行加速。文献 2--M.Tang, D.Manocha and R.Tong, MCCD:Mult1-core collis1n
detect1n between deformable models using front-based decomposit1n, GRAPHMODELS 72(2010), n0.2, 7-23.提出了一种前线分解(Front-based decompose, FBD)的方法,将碰撞检测中的BVTT树遍历转化为对前线列表的遍历,并将其分配到多核CPU
上执行。 文南犬 3--C.Lauterbach, Q.Mo and D.Manocha, GProximity:Hierarchical
GPU - based operat1ns for collis1n and distance queries, COMPUT GRAPH FORUM29 (2010),n0.2,419-428.提出了一种在GPU上并行的碰撞检测算法,并针对GPU的细粒度特性进行了设计。文献 4--S.Pabst, A.Koch and ff.Stra β er, Fast and scalable CPU/
GPU collis1n detect1n for rigid and deformable surfaces, COMPUT GRAPH FORUM29 (2010),n0.5,1605-1612.则利用混合CPU/GPU来对碰撞检测进行加速。
[0007]目前的碰撞检测技术精度高、通用性强,但脑部变形有以下特点:网格精细且分布在较小区域内,变形细微且局限在局部区域。这些特点导致当前的主流方法存在着大量的冗余计算。

【发明内容】

[0008]本发明要解决的技术问题是:克服现有技术的不足,提供一种基于人脑变形仿真的快速连续碰撞检测方法,该方法基于现有的前线分解算法,充分利用脑部变形的细微性与局部性特征,设计了增量的BVH更新算法及负载均衡更好的前线分解算法,同时针对现有的多核CPU/GPU架构进行了并行实现。在满足碰撞结果精度的情况下,能够有效降低时间开销,满足实时性的要求。
[0009]本发明采取的技术解决方案是:一种基于人脑变形仿真的快速连续碰撞检测方法,实现步骤如下:
[0010](I)读入人脑模型的数据,分析模型三角网格的拓扑结构关系,得到人脑模型中邻接三角形的集合:孤集(Orphan Set)并分别对人脑模型的头骨部分、人脑部分构建层次包围盒 BVH (bounding volume hierarchies, BVH);
[0011](2)以外部变形程序输入的顶点坐标更新BVH,利用人脑变形的细微性特征,采用增量的BVH更新算法,并在GPU端并行实现;
[0012](3)进行碰撞检测,遍历包围盒层次树(bounding volume test tree, BVTT)得到包围盒相交的三角形对,利用孤集剔除掉其中相邻的三角形对;在奶17的遍历中,利用变形的时空连续性,采用前线(front line)分解的技术来减少BVTT的遍历,再根据脑部变形的局部性特征,优化前线任务分解算法,由连续分解任务变为离散分解任务,并在多核CPU上并行实现;
[0013](4)对包围盒相交的三角形对进行进一步的基元检测,根据实际需要采用离散碰撞检测或连续碰撞检测,计算出精确的碰撞位置并将结果输出给外部的碰撞响应程序。
[0014]步骤(2)中利用人脑变形的细微性特征,采用增量的更新算法,包括步骤如下:
[0015](2.1)为人脑模型三角网格中的每一个三角形及BVH中的每一个节点设置一个标志位flag ;
[0016](2.2)比较输入的新顶点坐标与原顶点坐标,对变形程度达到阈值e的三角形,设置其flag = 1,否则设置其flag = O ;
[0017](2.3)利用变形后的三角形坐标更新BVH的叶节点,若该三角形的flag = 1,则更新该叶节点,并置该叶节点的flag = I,否则不更新该叶节点并置该叶节点的flag = O ;
[0018](2.4)自底向上按层更新BVH,对每一个非叶节点的BVH节点,判断该节点左右子节点中是否存在flag = I的节点,若存在,则更新节点,并设置节点的flag = 1,否则不更新节点,并设置flag = 0,循环更新每层,直至整个BVH更新完毕。
[0019]步骤(3)中前线分解的技术,包括步骤如下:
[0020](3.1)初始化:遍历BVTT,构建前线,所述前线是满足以下条件的BVTT节点:节点中的两个包围盒(bounding volume, BV)不相交,或其中的BV均为BVH中的叶子节点;
[0021](3.2)前线任务分解:为了每个核的负载均衡,达到更高的效率,将前线列表(front line list)中的前线节点(即计算任务)以离散的方式分解到多核CPU的不同核中;CPU核对分配到的前线节点执行碰撞检测;
[0022](3.3)前线更新:在前线任务分解后并在多核中执行碰撞检测的同时,依据(3.1)中所述的约束条件更新前线列表。
[0023]本发明与现有技术相比的优点
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1