一种基于椭球体扫描的连续碰撞检测方法

文档序号:6619221阅读:236来源:国知局
专利名称:一种基于椭球体扫描的连续碰撞检测方法
技术领域
本发明涉及一种基于椭球体扫描的连续碰撞检测方法。

背景技术
物体在空间中发生接触是自然界中的普遍现象,碰撞检测的任务就是确定两个或多个物体间是否发生接触或穿透。碰撞检测(Collision Detection,CD)也称为干涉检测或者接触检测,是计算机动画、系统仿真、计算机图形学、计算几何、机器人学、CAD/CAM等研究领域的经典问题。在虚拟环境中,由于用户的交互行为和物体的运动,物体间可能经常发生碰撞,此时为了保持虚拟环境的逼真性,需要及时检测到这些碰撞,并计算相应的碰撞响应,更新绘制场景。
连续碰撞检测作为柔性物体碰撞检测的关键技术,近年来被广泛研究并取得较快发展。变形物体因形态复杂、变化多端,实时碰撞检测成为整个仿真系统的瓶颈。其碰撞检测的复杂性主要体现在以下几个方面(1)必须具有检测自我碰撞的能力;(2)数据结构必须尽可能简单并能实时更新;(3)为了仿真物体碰撞的变形等效果,不仅需要检测到碰撞发生的位置,还需要返回穿刺深度等详尽的碰撞信息。
针对柔性物体碰撞检测的上述需求,国内外学者们展开了一系列的研究工作,从九十年代中期至今,该领域的研究工作主要集中在虚拟布料、虚拟手术等领域。其中Larsson T参考文献Larsson T,Akenine T,Collision Detection for Continuously DeformingBodies[J].In Eurographics,2001,325-333等改进了层次包围体树方法;Bridson R参考文献Bridson R,Marino S,Fedkiw R,Simulation of Clothing with Folds andWrinkles[C].In Proc.ACM/Eurographics Symposium on Computer Animation,2003,28-36等采用基于距离场的方法;Baciu参考文献Baciu G,Wong SKW,Sun H.RECODEAn Image-based Collision Detection Algorithm[J].Journal of Visualization andComputer Animation,1999,10(4)181~192.等使用GPU等硬件设备来提高算法的效率。此外国外许多成型的碰撞检测系统也已经在实际工程中得到了应用如PQ(Sphere)、SOLID(AABB)、RAPID(OBB)和Quick-CD(k-Dop)等,但上述系统都是从刚体的碰撞检测算法发展而来的,均通过为物体建立某种类型的层次包围体结构进行相交测试,它们或者限制物体的几何形状或者需要物体的拓扑信息,且在物体变形时其层次结构也需随之更新,很大程度上影响了检测系统的适用范围和检测效率。
连续碰撞检测已被广泛用于柔性物体尤其是布料的模拟,Wingo Sai-Keung Wong参考文献Wong WS,Baciu G,A Randomized Marking Scheme for Continuous Collision Detectionin Simulation of Deformable Surfaces[C].Jun.2006 Proceedings of the 2006 ACMinternational conference on Virtual reality continuum and its applications提出了一种随机标记物体表面三角面片的方法,并在连续碰撞检测过程中加入特征过滤层,以保证每对相交仅处理一次,从而提高碰撞检测算法的效率。Naga K.Govindaraju参考文献Govindaraju NK,Kabul I,Lin MC,Fast Continuous Collision Detection among DeformableModels using Graphics Processors[J].Jan.2007 Computers and Graphics Vol311则利用GPU加速连续碰撞的检测过程,该方法利用GPU进行可见性查询,获得可能发生碰撞的基元集合,并通过碰撞基元分类实现连续自碰撞的检测。
本发明的方法主要基于Fauerby K参考文献Fauerby K,Improved Collision Detectionand Response[EB/OL].http://www.peroxide.dk,Jul,2003中的椭球体扫描的思想,并在多个方面进行了改进以适用于大规模场景中多物体连续碰撞检测的要求。


发明内容
本发明要解决的技术问题是克服了现有技术的不足,提供一种连续的且适用于大规模场景的连续碰撞检测方法,保证绘制的实时性。
本发明采用的技术方案为基于椭球体扫描的连续碰撞检测方法,步骤如下 (1)为虚拟场景中的物体生成椭球包围体,并将物体速度以及其三角面片的顶点坐标变换到椭球空间。
由于在椭球空间内,椭球体表现为一个单位球体而求交过程在椭球空间完成,因而可将连续碰撞检测的问题简化为一个单位球与一个三角面片的求交问题。
为保证包围体的紧致性同时兼顾时间性能,将包围椭球的中心固定在三角面片的中心,3个轴的方向分别与x轴、y轴、z轴平行,并具有最小体积。
(2)对整个场景进行区域划分,即将虚拟空间划分成离散的小区域网格,并根据物体实体的位置计算每一个区域网格包含的物体数量,以及每个物体所处的区域网格。区域网格划分的原则包括使场景内物体的分布相对均匀,且尽可能减少物体穿越多个区域网格的次数,针对单一物体的碰撞检测只需在该物体所在区域网格以及周围相邻的区域网格间进行,由于A物体与B物体碰撞则B物体必与A物体发生碰撞,依此对碰撞检测循环做了可以进一步简化,将三维空间中A物体紧邻的27个区域网格,缩小为8个,即针对A物体的碰撞检测仅在8个紧邻区域网格中进行;此外,在整个外层碰撞检测的循环中,根据物体次序略掉大部分已经检测过的组合。上述特征有效地提高了碰撞检测的效率,具体流程如下 a.针对每个物体,获取其所在的区域号以及与其相邻的区域号。
b.根据获取的所有区域号,得到整个子区域之中的所有物体。
c.循环进行单一物体与相邻区域中其他物体间的连续碰撞检测。
(3)单一物体与相邻区域中其他物体间进行连续碰撞检测,即对三角面片进行扫描球体求交测试,当一次碰撞检测结束后,如物体位置更新则同时更新区域网格包含的物体数量及物体所属的区域网格。具体流程如下 对构成单一物体的所有三角面片,和相邻区域中其他物体的所有三角面片,循环进行以下处理,为表述方便,对每轮循环,定义单一物体的三角面片为ΔA,相邻区域中其他物体的三角面片为ΔB。
a.判断三角面片ΔA的扫描球体经过的路径是否穿过三角面片所在的平面,如果扫描球体在一段时间内没有穿过三角面片所在的平面,则直接判定三角面片与物体不可能发生碰撞,无需进行后续的碰撞检测; b.如果三角面片ΔA的扫描球体经过的路径穿过三角面片ΔB所在的平面,即发生碰撞,求解碰撞点坐标并判断该碰撞点是否位于三角面片ΔB内部;本发明综合采用了角度判别方法和面积判别方法的优化方法,该方法针对向量的加减、点乘,叉乘等比较耗时的运算进行了有效地简化,整个判别过程仅有加法和乘法运算。
c.如果碰撞点在三角面片ΔB内,不需要进行扫描测试,直接返回碰撞点信息; d.如果球与平面的交点在三角面片ΔB内,直接返回碰撞点信息; e.如果碰撞点不在三角面片ΔB内,则需要进行扫描测试,包括对顶点的扫描和对边的扫描,如通过扫描判定发生碰撞,则返回碰撞点信息; f.碰撞检测完毕后,记录碰撞信息,并处理下一次进行碰撞检测的时刻。本发明采用以下思路进行了流程改进以当前返回的碰撞时间和碰撞点位置信息,作为一次碰撞预测,表明当前各个区域网格内最可能发生碰撞的时刻,从预测的最可能发生碰撞的时刻和物体因运动可能导致区域网格越迁的时刻中选取较小的一个,作为下次碰撞检测开始的时间,在此时刻之前,不再进行碰撞检测,节省下的时间可以提供给绘制循环使用,从而有效地提高绘制帧频。
本发明与现有技术相比的优点在于 (1)本发明综合考虑椭球体扫描的时间性能及包围椭球体的紧致程度,给出了一种优化的包围椭球体生成方法,该方法在紧致性接近最优的前提下,兼顾了时间性能。
(2)本发明在分析场景物体碰撞频率的基础上,给出了一种优化的碰撞点是否落入三角面片区域的判定方法。该方法结合了面积判定与角度判定的优势,同时通过算法分析将处理流程简化为简单的加法和乘法运算,避免了耗时的矢量及三角函数运算,此外,本发明还根据实际系统中碰撞频率的特点改进和调整判定流程,通过快速排除不可能发生碰撞的情况提高了判定效率。
(3)传统的基于椭球体扫描的碰撞检测在检测不到碰撞时,存在重复计算,本发明本发明引入了基于空间子区域划分的索引结构并对流程进行了改进,以当前返回的碰撞时间和碰撞点位置信息,作为一次碰撞预测,表明当前各个区域网格内最可能发生碰撞的时刻,从预测的最可能发生碰撞的时刻和物体因运动可能导致区域网格越迁的时刻中选取较小的一个,作为下次碰撞检测开始的时间,在此时刻之前,不再进行碰撞检测,这一改进一方面可以有效地减少碰撞检测的次数,另一方面可将所节省下的时间提供给绘制循环使用,从而有效地提高绘制帧频。
综上所述,本发明采用优化的椭球体扫描方法进行连续碰撞检测,针对于大规模多物体的虚拟场景的应用,给出了效率较高的解决方案,为场景的实时绘制提供了有力支撑。



图1为本发明方法的流程图; 图2为椭球体的构建和模型信息表示; 图3为空间区域划分后根据一定次序,可优化每次的子区域; 图4为在发生碰撞时,只需捕捉首次碰撞发生即可; 图5左为求解球的碰撞点,右为求解平面碰撞点; 图6为角度判定位置; 图7为面积判定位置; 图8为交点是否落在三角形内部的判定流程,左优化前流程,右为优化后流程; 图9为3种椭球生成方法的用时与生成的椭球体积对比; 图10为球与三角面片所在平面进行的正面碰撞测试; 图11为本发明方法与其他方法在点三角形求交测试的效率比; 图12为碰撞预测在不同场景规模下的效率对比; 图13为不同区域网格化分条件下物体碰撞次数; 图14为本发明方法的绘制效果图;
具体实施例方式 如图1所示,本发明的具体实施方法如下 (1)为虚拟场景中的物体生成椭球包围体,并将物体速度以及其三角面片的顶点坐标变换到椭球空间。
a.椭球包围体的构造 为了保证包围体的紧致性,设三角面片的三个顶点为p1=[p1,x,p1,y,p1,z]T、p2=[p2,x,p2,y,p2,z]T、p3=[p3,x,p3,y,p3,z]T,定义该三角面片的最优包围椭球满足该球的3个轴的方向分别与x轴、y轴、z轴平行,该球具有较小的体积,具体流程如下 首先求解三角形的中心G=[Gx,Gy,Gz]T 然后以中心作为椭球中心,定义椭球方程令三角面片的三点均位于椭球上,有 从而解出参数a、b、c,上述方法所所构建的椭球空间如图2所示; b.椭球空间速度以及三角面片的坐标做相应的变换 本发明方法基于三维向量空间的理论,首先需要构造出一个特殊的椭球空间,然后将这个椭球空间通过变换为一个单位球空间再进行碰撞检测。该单位球是一个半径为1的空间,同时也可以视为一个半径向量为(1,1,1)的椭球。
椭球空间的构建是通过以椭球半径向量作为空间基底实现的,由前面所述,椭球半径向量为[a,b,c]T(右上角的T表示向量转置,下同),则确定基底向量为v1=[a,0,0]T,v2=
T,v3=
T。此时,在椭球坐标系下的半径向量变为[1,1,1]T。
将一个R3空间(三维实空间,下同)中的已知点坐标转化为椭球空间中坐标的方法如下, 注意到R3(三维实空间,下同)中的基底e1=[1,0,0]T,e2=
T,e3=
T与椭球空间中基底v1,v2,v3满足以下关系 从而可以得到基底变换矩阵CBM(Change Basis Matrix)如下式所示 利用变换矩阵CBM便可以将R3坐标系下的向量(如物体的速度及三角面片顶点坐标)se=[se,x,se,y,se,z]T转化为椭球坐标系下的坐标sv=[sv,x,sv,y,sv,z]T,sv=CBM·se,即 由于在椭球空间内,椭球体表现为一个单位球体而求交过程在椭球空间完成,因而可将连续碰撞检测的问题简化为一个单位球与一个三角面片的求交问题; (2)对整个场景进行区域划分,即将虚拟空间划分成离散的小区域网格,并根据物体实体的位置计算每一个区域网格包含的物体数量,以及每个物体所处的区域网格。针对单一物体所在区域网格以及周围相邻的区域网格进行连续碰撞检测,具体流程如下 a.针对每个物体,获取其所在的区域号以及与其相邻的区域号。
b.根据获取的所有区域号,得到整个子区域之中的所有物体。
c.进入步骤(3) 网格区域划分与整体算法效率有关,本发明方法的区域网格划分遵循以下原则,即使物体分布相对均匀,且尽可能减少物体穿越多个区域网格的次数。
上述流程中,由于A物体与B物体碰撞则B物体必与A物体发生碰撞,因此碰撞检测循环还可以进一步简化,可以将三维空间中A物体紧邻的27个区域网格,缩小为8个,原理如图3所示,此外在整个外层碰撞检测循环的过程中,还可根据物体判断的次序,忽略掉已经检测过的内容,上述优化可以把效率提高到原来的3倍以上。
(3)单一物体与相邻区域中其他物体间进行连续碰撞检测,即对三角面片进行扫描球体求交测试,当一次碰撞检测结束后,如物体位置更新则同时更新区域网格包含的物体数量及物体所属的区域网格。具体流程如下 对构成单一物体的所有三角面片,和相邻区域中其他物体的所有三角面片,循环进行以下处理,为表述方便,对每轮循环,定义单一物体的三角面片为ΔA,相邻区域中其他物体的三角面片为ΔB。
a.判断三角面片ΔA的扫描球体经过的路径是否穿过三角面片ΔB所在的平面,如图4所示。
定义三角面片ΔA的三个顶点为p1,p2,p3,按逆时针方向构成,椭球空间中,包围体简化成单位球体,设椭球体的中心起始坐标(ΔA的重心)为sb以及速度vs,在单位时间t内,椭球体的运动可以通过如下公式表示,其中C(t)表示t时刻椭球体中心的坐标 C(t)=sb+vst,t∈
在单位时间t内不断变化的球心位置,描述了球的运动,由于球心一直位于速度方向上,故称为扫描球体。
从三角面片ΔB可获取其所属平面的法向量N以及平面上一点Cp,定义函数df(p)=N·(p-Cp),其中符号“·”表示点积运算(下同),显然,|df(p)|为p到三角面片ΔB所在平面的距离;当p位于三角面片ΔB所在的平面上时,有df(p)=0。
如扫描球体与三角面片ΔB所在的平面有交点,设在t0时刻,球的前端与三角面片ΔB所在平面发生碰撞,在t1时刻球的后端离开三角面片ΔB所在平面。因此当t∈[t0,t1],扫描球体与三角面片ΔB所在的平面相交。在椭球空间中,由于球的半径为1,故可以得到以下方程 df(C(t0))=1,df(C(t1))=-1 有N·[C(t0)-Cp]=1,N·[C(t1)-Cp]=-1 有N·[sb+vst0-Cp]=1,N·[sb+vst1-Cp]=-1 有 注意到上述公式存在一种特殊情况,即N·vs=0,出现此种情况的原因是球体沿着平面的平行方向运动,有两种可能,一种可能是球心到平面的距离始终小于1,说明球体一直嵌入在三角面片ΔB所在的平面内,这种情况下设定t0=0,t1=1;另一种可能是球心到平面距离始终大于1,这种情况下碰撞绝对不会发生,可以结束本次碰撞检测。
定义一轮连续碰撞检测的时间片单位为
,即每轮仅检测从当前时刻到当前时刻加1时刻之间可能发生的碰撞,那么当t0和t1时刻均处于时间片外时,可以迅速确定在当前时间片内扫描球体不会与三角面片ΔB所在平面任何点发生接触,因而也不会与三角面片ΔB发生碰撞,此时可以结束本次碰撞检测;否则,判定有碰撞发生,且碰撞发生的时刻tcollision∈[t0,t1]。
b.如果三角面片ΔA的扫描球体经过的路径穿过三角面片ΔB所在的平面,即发生碰撞,求解碰撞点坐标并判断该碰撞点是否位于三角面片ΔB内部; 如果发生碰撞,则需要求出球所在运动方向上与三角面片ΔB所在平面首先发生接触的位置(即碰撞点)。定义该点坐标为p1,由前文的计算已知这个时刻是t0,下面的公式给出了发生碰撞的具体坐标p1=sb-N+vst0,其中N为ΔB所在平面的法向量,sb-N指示出首次碰撞发生的方向,如图5所示。
当碰撞点坐标求出以后,需要判定该碰撞点是否在三角面片ΔB内部,本发明给出了一种综合采用了角度判别方法和面积判别方法的优化方法,该方法针对向量的加减、点乘,叉乘等比较耗时的运算进行了有效地简化。
首先进行角度判别如图6所示,以三角形端点A为起点,形成角∠BAC,计算点D是否落在∠BAC所夹的空间内,连结点AD,注意到如果点D落在∠BAC内,则有∠BAC=∠BAD+∠DAC。因为任何一个三角形的内角小于180°,故sin∠BAD,sin∠DAC均为非负,因此有三角公式变形有以下推论 cos∠BAC=cos(∠BAD+∠DAC)=cos∠BADcos∠DAC-sin∠BADsin∠DAC ≤cos∠BADcos∠DAC 而当D点未落在角∠BAC内部,则点D必然落在边AB或边AC的外侧,有∠BAD=∠BAC+∠CAD或者∠CAD=∠CAB+∠BAD cos∠BAD=cos(∠BAC+∠CAD)=cos∠BACcos∠CAD-sin∠BACsin∠CAD ≤cos∠BACcos∠CAD cos∠CAD=cos(∠CAB+∠BAD)=cos∠CABcos∠BAD-sin∠CABsin∠BAD 或≤cos∠CABcos∠BAD 由上两式变形可以得到两个判别式,即 cos∠BAD-cos∠BACcos∠CAD,记为判别式1 和cos∠CAD-cos∠CABcos∠BAD,记为判别式2 即当cos∠BAD-cos∠BACcos∠CAD<0,D落在AC边的外侧; 当cos∠CAD-cos∠CABcos∠BAD<0,D落在AB边的外侧; 因此作为在∠BAC内的条件,应该有判别式1大于等于0且判别式2大于等于0。
为处理方便,实际计算时将判别式1,2分别变形为 |AC|2|AB||AD|cos∠BAD-|AC|2|AB||AD|cos∠BACcos∠CAD(判别式1) |AB|2|AC||AD|cos∠CAD-|AB|2|AC||AD|cos∠CABcos∠BAD(判别式2) 进一步变形为 (AC·AC)·(AB·AD)-(AC·AB)·(AC·AD)(判别式1) (AB·AB)·(AC·AD)-(AB·AC)·(AB·AD)(判别式2) 上述变形的目的是为了避免了耗时的角度求解和余弦计算,变形后仅需3次向量AB,AC,AD的求解运算和5次向量的点积运算,这些运算仅涉及乘法和加法,因而可提高处理的效率。
角度判别结束后进行面积的判别当检测到点D在∠BAC在内部时,还需要判断点D是否在BC边以内。此时可以用面积判别的方法,如果有S(ΔABC)≥S(ΔABD)+S(ΔACD)如图7左所示,则说明点D在三角形ABC内部;否则,如图7右所示,D在三角形外部。
如角度的判别过程中,两判别式均大于0,可将判别式进一步变形 判别式1=|AC|2|AB||AD|cos∠BAD-|AC|2|AB||AD|cos∠BACcos∠CAD =|AC|2|AB||AD|sin∠BACsin∠CAD=(|AC||AB|sin∠BAC)(|AC||AD|sin∠CAD) 判别式2=|AB|2|AC||AD|cos∠CAD-|AB|2|AC||AD|cos∠CABcos∠BAD =|AB|2|AC||AD|sin∠CABsin∠BAD=(|AB||AC|sin∠CAB)(|AB||AD|sin∠BAD) 即(|AC||AB|sin∠BAC)(|AC||AD|sin∠CAD)=判别式1 (|AB||AC|sin∠CAB)(|AB||AD|sin∠BAD)=判别式2, 又由于S(ΔABC)≥S(ΔABD)+S(ΔACD)等价于判断 (|AB||AC|sin∠BAC)2≥(|AC||AB|sin∠BAC)(|AC||AD|sin∠CAD) +(|AB||AC|sin∠CAB)(|AB||AD|sin∠BAD) 记为判别式3,有 (|AB||AC|)2[1-(cos∠BAC)2]≥判别式1+判别式2 即(|AB||AC|)2-(|AB||AC|cos∠BAC)2]≥判别式1+判别式2 最终,判别式3可表示为 (AB·AB)·(AC·AC)-(AB·AC)2≥判别式1+判别式2 这一变形使得面积判别仅需要在角度判别的基础上增加3次简单的向量点积运算及2次数值乘法和1次数值加法运算即可。
试验表明,在大规模虚拟场景的应用中,点落在三角形内部的比例约为30%左右,故应尽量排除碰不上的情况,从而进一步优化流程,碰撞点是否在三角面片内部的优化前后的判别流程如图8所示,根据该流程判别的结果,若碰撞点在三角面片ΔB内部,则进入步骤c,否则进入步骤d。
c.如果碰撞点在三角面片内,直接返回碰撞点信息,包括碰撞点位置p1,碰撞点距椭球体的中心起始坐标(ΔA的重心)为sb的距离t0||vs|| d.如果碰撞点不在三角面片内,则需要进行扫描测试,包括对顶点的扫描和对边的扫描,两种情况分别采用如下方法 首先进行扫描球体与三角面片的顶点发生碰撞的检测,显然,在发生碰撞的瞬时,扫描球体的中心到三角形顶点的距离为球体的半径(单位1)。因此,判断碰撞的准则为扫描球体的中心到三角形顶点的距离是否等于1,对三角形ΔB的某一顶点p,令 (C(t)-p)·(C(t)-p)=12 该方程经过化简与变形后,为一个一元二次方程,At2+Bt+C=0,其中 若该一元二次方程存在有效解,因为与三角面片ΔB距离为1的扫描球体球心的位置在扫描球体运动方向上可能出现2次,通常第一次碰撞发生在较短的时间,因此选择较小的时刻tmin作为碰撞发生时刻。此时,碰撞点的相关信息为碰撞点位置p,碰撞点距椭球体的中心起始坐标(ΔA的重心)为sb的距离tmin||vs||;否则,若该一元二次方程不存在有效解,则判定扫描球体与三角面片的顶点不可能发生碰撞。
然后进行扫描球体与三角面片的边发生碰撞的检测。设三角面片ΔB的三个顶点为pB1、pB2、pB3,以边pB1,pB2为例(其余两边可类似处理),引入以下两矢量定义, 边矢量E=pB2-pB1 椭球体的中心起始坐标到顶点pB1矢量Ds=pB1-sb 扫描球体与边的相交检测,首先检测扫描球体与边pB1,pB2所在的直线是否有交点,同样可以获得一个一元二次方程,At2+Bt+C=0,其系数如下 解得最小的tmin作为扫描球体与边沿所在直线的最早碰撞点,对pB1,pB2所在的直线进行参数化表示L(r),直线上两点对应参数r=0,及r=1为两个端点,且有L(0)=pB1,L(1)=pB2,从而可计算tmin时刻对应得L(r)直线上的参数r0 若r0∈
则说明碰撞发生在线段内部。即此时的tmin为有效解,从而得到碰撞点位置pB1+r0E12,碰撞点距椭球体的中心,起始坐标(ΔA的重心)为sb的距离tmin||vs||;否则,若r0不属于
,则表明tmin为无效解,则判定扫描球体与三角面片的边不可能发生碰撞; e.碰撞检测完毕后,记录碰撞信息,并处理下一次进行碰撞检测的时刻; 传统的基于椭球体扫描的碰撞检测采用离散的时间片,即在碰撞流程中,求解一元二次方程时,只选取落在时间片内的合理的根。如果没有根落在当前的时间片内,则终止当前周期的碰撞检测,更新场景的物体位置信息,进入下一时间片;如果有落在当前的时间片的根,则把时间片改小,求出精确的碰撞点和相关碰撞信息,触发碰撞响应模块,更新场景物体的位置。在下一次碰撞检测的过程中,将时间片还原。
上述方法在检测不到碰撞时,同样需要求解方程,存在重复计算,本发明采用以下思路进行流程改进以当前返回的碰撞时间和碰撞点位置信息,作为一次碰撞预测,表明当前各个区域网格内最可能发生碰撞的时刻,从预测的最可能发生碰撞的时刻和物体因运动可能导致区域网格越迁的时刻中选取较小的一个,作为下次碰撞检测开始的时间,在此时刻之前,不再进行碰撞检测,节省下的时间可以提供给绘制循环使用,从而有效地提高绘制帧频。
图9为优化椭球体实验结果,实验方法是在初始化场景前,为10000个面片生成椭球体并比较所生成椭球体的平均体积。所采用的三种生成方法是利用包围盒构建椭球的方法,本发明的生成方法及以及最优的椭球生成法。实验结果如图9所示。采用包围盒构建椭球的方法最为粗糙但用时短,本发明的生成方法比前一方法多花费将近一倍的时间,但是所生成椭球的平均体积减小了20%左右,比最优的椭球生成法的体积仅差5%;与最优的椭球生成法相比,本发明的生成方法在平均体积接近的前提下,节省了生成时间。
图10-图12为三角面片内部判定实验结果,在大约100000次的球与三角面片所在平面进行的碰撞测试中,有将近70000次的情况,椭球与三角面片未发生直接碰撞。只有不到1/3的情况,球与平面的交点落在3角面片内部(如图10所示),因此,本发明针对未发生碰撞情况的优化是有效的。在碰撞发生的情况下,对四种点与面片关系进行测试,碰撞发生的次数分别为4000,8000,12000,16000,24000,40000,结果如图11所示,图中综合法指的是综合采用角度判别和面积判别不采用优化流程的方法,而优化综合方法指在综合法纪处上采用优化流程的方法。在碰撞发生时综合法比优化的方法有细微的时间优势。这是由于综合法采用的是直接的逻辑运算,没有分步排除碰撞不上的情况,在检测到碰撞的时候效率略高。另外,这两种方法明显好于面积法和向量法,因此后面主要讨论这两种方法的细微区别。在场景中对4000-40000次的碰撞检测进行实验(包括碰撞发生与碰撞不发生的情况)对比综合法和优化综合法的优劣,如图12所示,由于优化综合法是在综合法的基础上进行的次序调整和碰撞排除优化,因此在整体碰撞效率上再进行的实验标志着实际碰撞检测的效率。可知在考虑到碰撞不发生可能性约占2/3的前提下,优化综合法在整体性能上比综合法有所提高,用时的节省大约为5%左右。
图13为区域划分优化实验的结果,区域划分的思想用于碰撞检测,要求大量的空间用于存储,并在管理场景时需要额外的时间。但在减少碰撞次数方面优势明显。如图13所示区域网格数为1时(未划分),10000和20000物体碰撞需判定的次数从量级上高了很多,而在采用16分或32分划分区域的网格时,量级已经从数百万次降到不到30万次的检测,提高了效率。区域方法产生优势的原因是在于将整体碰撞物体集合分成多个子集,通过区域判定和额外的空间维护操作,减少了碰撞检测的次数。
在基于前述区域划分的基础上进行碰撞预测优化,对10000次以上碰撞检测进行整体实验,统计采用碰撞预测及时间片更新机制可剔除的无效碰撞检测数量比例,实验结果如表1所示。
表1采用碰撞预测及时间片更新机制所剔除的无效碰撞检测所占比例 实验结果表明,当区域划分为边长1时(不划分区域网格),采用碰撞预测的优化措施可以剔除63%的无效碰撞检测。而区域划分边长增大的情况下,无效碰撞的数量急剧减少。到16分区域的时候,无效碰撞检测已不足2%。可见在区域划分的情况下,采用碰撞预测提高的效率约为2%。区域分的越细,优化的效果越不明显。当区域划分比较少时,碰撞预测更能发挥优势的原因是存在更多的潜在碰撞,而随着空间区域划分增多,潜在的碰撞已经被空间区域划分排除了一部分,因此效率有所下降。另外,在空间划分区域的越细,每个时间片跨越区域的可能性越大,因此每个时间片都要重新进行碰撞检测,使碰撞预测模块的使用率下降。
图14给出的是将本发明方法应用用于包含2000个物体以上的复杂场景中的绘制效果,绘制效率可以达到实时。
权利要求
1、基于椭球体扫描的连续碰撞检测方法,其特征在于步骤如下
(1)为虚拟场景中的物体生成椭球包围体,并将物体速度以及其三角面片的顶点坐标变换到椭球空间;
(2)对整个场景进行区域划分,即将虚拟空间划分成离散的小区域网格,并根据物体实体的位置计算每一个区域网格包含的物体数量,以及每个物体所处的区域网格;针对单一物体所在区域网格以及周围相邻的区域网格进行连续碰撞检测;
(3)单一物体与相邻区域中其他物体间进行连续碰撞检测,即对三角面片进行扫描球体求交测试,当一次碰撞检测结束后,如物体位置更新则同时更新区域网格包含的物体数量及物体所属的区域网格。
2、根据权利要求1所述的基于椭球体扫描的连续碰撞检测方法,其特征在于所述的步骤(1)中,构造了一种包围椭球,在保证包围体的紧致性的前提下兼顾了时间性能。
3、根据权利要求1所述的基于椭球体扫描的连续碰撞检测方法,其特征在于所述的步骤(2)中进行了空间区域网格划分,网格划分的原则包括使场景内物体的分布相对均匀,且尽可能减少物体穿越多个网格的次数,针对单一物体的碰撞检测只需在该物体所在区域网格以及周围相邻的区域网格间进行,由于A物体与B物体碰撞则B物体必与A物体发生碰撞,依此对碰撞检测循环做了可以进一步简化,将三维空间中A物体紧邻的27个区域网格,缩小为8个,即针对A物体的碰撞检测仅在8个紧邻区域网格中进行;此外,在整个外层碰撞检测的循环中,根据物体次序略掉大部分已经检测过的组合;具体流程如下
(2.1)针对每个物体,获取其所在的区域号以及与其相邻的区域号;
(2.2)根据获取的所有区域号,得到整个子区域之中的所有物体;
(2.3)循环进行单一物体与相邻区域中其他物体间的连续碰撞检测。
4、根据权利要求1所述的基于椭球体扫描的连续碰撞检测方法,其特征在于所述的步骤(3)在单一物体与相邻区域中其他物体间进行连续碰撞检测,采用以下流程并在局部进行了优化
对构成单一物体的所有三角面片,和相邻区域中其他物体的所有三角面片,循环进行以下处理,为表述方便,对每轮循环,定义单一物体的三角面片为ΔA,相邻区域中其他物体的三角面片为ΔB
(3.1)判断三角面片ΔA的扫描球体经过的路径是否穿过三角面片ΔB所在的平面;
(3.2)如果三角面片ΔA的扫描球体经过的路径穿过三角面片ΔB所在的平面,即发生碰撞,求解碰撞点坐标并判断该碰撞点是否位于三角面片ΔB内部;
(3.3)如果碰撞点在三角面片ΔB内,直接返回碰撞点信息;
(3.4)如果碰撞点不在三角面片ΔB内,则需要进行扫描测试,包括对顶点的扫描和对边的扫描,如在椭球体扫描过程中检测到碰撞,则返回碰撞点信息;
(3.5)碰撞检测完毕后,记录碰撞信息,并处理下一次进行碰撞检测的时刻;采用以下思路进行了流程改进以当前返回的碰撞时间和碰撞点位置信息,作为一次碰撞预测,表明当前各个区域网格子区域内最可能发生碰撞的时刻,从预测的最可能发生碰撞的时刻和物体因运动可能导致区域网格越迁的时刻中选取较小的一个,作为下次碰撞检测开始的时间,在此时刻之前,不再进行碰撞检测,节省下的时间可以提供给绘制循环使用,从而有效地提高绘制帧频。
全文摘要
本发明涉及一种基于椭球体扫描的连续碰撞检测方法。为避免碰撞检测过程中的穿透现象并确保碰撞响应的完成,该方法在传统的椭球体扫描方法基础上,对算法步骤进行了优化,并针对基于区域划分的物理引擎任务分配模式给出了基于区域标记的快速索引机制。另外,在碰撞检测的过程中采用预测机制,有效地减少了仿真循环中碰撞检测的调用次数。本发明对处理流程所做的优化,适用于大规模虚拟环境中的连续碰撞检测应用。
文档编号G06T1/00GK101593364SQ200910087900
公开日2009年12月2日 申请日期2009年6月25日 优先权日2009年6月25日
发明者兵 何, 博 王, 赵沁平, 郝爱民, 王莉莉 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1