当前位置: 首页 > 专利查询>浙江大学专利>正文

一种基于SIMD的k-DOP包围盒碰撞检测方法技术

技术编号:6882827 阅读:738 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种基于SIMD的k-DOP包围盒碰撞检测方法,包括:(1)使用SIMD指令构建BVH;(2)构建BVTT,使用SIMD指令对BVTT进行包围盒重叠测试;(3)对包围盒进行精确碰撞检测。本发明专利技术通过利用SIMD的指令级并行处理能力,减少了碰撞检测操作过程中的指令数目,加速了包围盒构造或重构、BVH建立或更新以及包围盒重叠测试的过程,缩短了碰撞检测的时间,与传统的碰撞检测方法相比可获得约4倍的速度提升,具有良好的兼容性,可与任务级并行处理形成有效互补,从而提高了整体的并行加速比,尤其适应用于机器人运动路径规划、物理仿真、视频游戏等技术领域中。

【技术实现步骤摘要】

本专利技术属于计算机检测
,具体涉及一种基于SIMD(单指令多数据流)的 k-DOP包围盒碰撞检测方法。
技术介绍
包围盒层次结构(BVH)是一种针对三角形网格模型进行高效碰撞检测的重要工具。各种BVH,如球(Sphere)树,轴对齐包围盒(AABB)树,定向包围盒(OBB)树,离散定向多面体(k-DOP)树等,这些层次结构通常采用自顶向下的方法进行构造,被广泛应用于刚体或柔性物体的碰撞检测。而柔性物体的BVH的快速更新技术(如重新整理、动态或选择性重构等),已成为本领域诸多研究者的关注热点。对于柔性物体,除了需要考虑包围盒的紧凑性外,包围盒整理和重构的效率也至关重要。图1为AABB、8-D0P和OBB三种包围盒的示意图,对于简单的包围盒如Sphere、 AABB,其整理和构造十分快捷,但紧凑性较差;对于复杂的包围盒如0ΒΒ,虽然较为紧凑,但整理和构造的计算量较大;作为折中选择,k-DOP兼具紧凑性和高效性,因此常被用于柔性物体的包围盒层次结构。目前传统的k-DOP包围盒碰撞检测方法,都是采用串行的实现方式来完成碰撞检测,k-D0P包围盒在重构和整理过程中的指令数目过多,执行起来非常耗时,且实时性差,在机器人运动路径规划、物理仿真、视频游戏等实时性要求较高的应用中,无法满足相应的碰撞检测要求。
技术实现思路
本专利技术提供了一种基于SIMD的k-D0P包围盒碰撞检测方法,充分利用SIMD的指令级并行处理能力,加速了包围盒构造或重构、BVH(包围盒层次结构)建立或更新以及包围盒重叠测试的过程,大大提高了碰撞检测速度。一种基于SIMD的k-D0P包围盒碰撞检测方法,包括如下步骤(1)使用SIMD指令对待检测的三角形网格柔性场景模型中的每个三角形构造对应的k-D0P包围盒,进而建立所述的三角形网格柔性场景模型的包围盒层次结构;(2)根据所述的包围盒层次结构,构建包围盒测试树,使用SIMD指令对包围盒测试树进行包围盒重叠测试,输出存在包围盒重叠的叶节点;(3)对输出的叶节点对应的两个k-D0P包围盒内的三角形对进行精确碰撞检测。优选的技术方案中,所述的步骤(1)中,当进行第η次碰撞检测时,包围盒层次结构是根据第η次碰撞检测时刻每个三角形的空间位置,使用SIMD指令对上一次碰撞检测过程中的包围盒层次结构中最底层的k-D0P包围盒进行重构,进而使用SIMD指令自底向上对上一次碰撞检测过程中的包围盒层次结构进行整理更新而成的,η为大于1的自然数;相应的提高了碰撞检测速度。优选的技术方案中,所述的步骤O)中,当进行第η次碰撞检测时,所述的包围盒测试树为上一次碰撞检测过程中的包围盒测试树;相应的提高了碰撞检测速度。优选的技术方案中,所述的k-DOP包围盒为16-D0P包围盒,保证了碰撞检测过程的高效性。本专利技术的有益技术效果是通过利用SIMD的指令级并行处理能力,减少了碰撞检测操作过程中的指令数目,加速了包围盒构造或重构、BVH建立或更新以及包围盒重叠测试的过程,缩短了碰撞检测的时间,与传统的碰撞检测方法相比可获得约4倍的速度提升,具有良好的兼容性,可与任务级并行处理形成有效互补,从而提高了整体的并行加速比。附图说明图1(a)为AABB包围盒的示意图,图1(b)为8-D0P包围盒的示意图,图1 (c)为 OBB包围盒的示意图。图2为本专利技术碰撞检测方法的步骤流程示意图。图3为16-D0P包围盒在浮点向量中的数据布局图。图4(a)为BVH的结构示意图,图4(b)为BVTT的结构示意图。具体实施例方式为了更为具体地描述本专利技术,下面结合附图及具体实施方式对本专利技术的碰撞检测方法进行详细说明。如图2所示,一种基于SIMD的16-D0P包围盒碰撞检测方法,包括如下步骤(1)使用SIMD指令构建BVH。使用SIMD指令对待检测的三角形网格柔性场景模型中的每个三角形构造对应的 16-D0P包围盒,进而建立三角形网格柔性场景模型的包围盒层次结构;当进行第η次碰撞检测时,包围盒层次结构是根据第η次碰撞检测时刻每个三角形的空间位置,使用SIMD指令对上一次碰撞检测过程中的包围盒层次结构中最底层的16-D0P包围盒进行重构,进而使用SIMD指令自底向上对上一次碰撞检测过程中的包围盒层次结构进行整理更新而成的,η为大于1的自然数。为每个三角形构造对应的16-D0P包围盒首先将被包围三角形的顶点分别在各个方向上进行投影,然后判断这些投影是否落在包围盒的外部,如果落在包围盒外部,需要对该方向上包围盒的范围进行调整,保证该投影恰好落在边界上;对于16-D0P包围盒,任何一个三角形顶点都需要做16次比较,判断这个点是否落在包围盒内部。本专利技术使用SIMD 指令并行地完成这个比较工作,共调用了 mm_min_ps、mm_max_ps、mm_setr_ps这三条SIMD 指令各2次,即可完成16-D0P包围盒的重构。其中,mm_setr_ps指令的作用是将4个浮点数送入1个浮点数向量数据中(如图3所示),mm_min_pS指令用来并行更新在4个方向上投影的最小值,mm_max_ps指令用来并行更新在4个方向上投影的最大值。将每个三角形对应的16-D0P包围盒,作为BVH中最底层的16-D0P包围盒。在第一次碰撞检测时,采用自顶向下的方法构建BVH,首先计算出这些三角形的中心,将这些三角形中心投影到直角坐标系的某个坐标轴上,依据投影的正负,可以把它们分成两部分,分别为它们构造包围盒。然后采用同样的方式,对这两个包围盒进行细分,直到包围盒中只包含一个三角形。如图4(a)所示,有一个由a、b、c、d四个三角形组成的场景Al,首先计算出这些三角形的中心,将这些三角形中心投影到某个坐标轴上,依据投影的正负,可以把它们分成两部分,一部分记为Bi,另一部分记为B2,分别为Bl和B2构造包围盒。然后采用同样的方式,对B1、B2进行细分,直到包围盒中只包含一个三角形。在随后的碰撞检测过程中,只需要对BVH中的非底层的包围盒大小进行重新计算。这是一个自底向上的计算过程,需要将每个非底层的两个子16-D0P包围盒合并为一个大的16-D0P包围盒。本专利技术使用SIMD指令并行地完成这个比较工作,共调用了 mm_min_ ps、mm_max_ps这2条SIMD指令各2次。其中,mm_min_ps用来并行更新在4个方向上投影的最小值,mm_max_ps用来并行更新在4个方向上投影的最大值。(2)构建BVTT,使用SIMD指令对BVTT进行包围盒重叠测试。根据包围盒层次结构,构建BVTT(包围盒测试树),使用SIMD指令对包围盒测试树进行包围盒重叠测试,输出存在包围盒重叠的叶节点;当进行第η次碰撞检测时,包围盒测试树为上一次碰撞检测过程中的包围盒测试树。首先,采用自顶向下的构建方法构造BVTT,如图4所示,在图4(a)中已经对整个场景构造了一个BVH;相应地,图4(b)就是针对图4(a)场景而构建的一个BVTT。BVTT的根节点(Al,Al)就是Al的自碰撞检测对,然后提取出Al的两个子包围盒 Bl和B2,分别对Bl和B2做自碰撞检测,另外还需要检测Bl和B2之间是否发生碰撞,即比较两个16-D0P包围盒之间是否有重叠。这个过程可以概括为在这16个方向上比较两个包围盒是否有交集;如果本文档来自技高网...

【技术保护点】
1.一种基于SIMD的k-DOP包围盒碰撞检测方法,包括如下步骤:(1)使用SIMD指令对待检测的三角形网格柔性场景模型中的每个三角形构造对应的k-DOP包围盒,进而建立所述的三角形网格柔性场景模型的包围盒层次结构;(2)根据所述的包围盒层次结构,构建包围盒测试树,使用SIMD指令对包围盒测试树进行包围盒重叠测试,输出存在包围盒重叠的叶节点;(3)对输出的叶节点对应的两个k-DOP包围盒内的三角形对进行精确碰撞检测。

【技术特征摘要】
1.一种基于SIMD的k-DOP包围盒碰撞检测方法,包括如下步骤(1)使用SIMD指令对待检测的三角形网格柔性场景模型中的每个三角形构造对应的 k-DOP包围盒,进而建立所述的三角形网格柔性场景模型的包围盒层次结构;(2)根据所述的包围盒层次结构,构建包围盒测试树,使用SIMD指令对包围盒测试树进行包围盒重叠测试,输出存在包围盒重叠的叶节点;(3)对输出的叶节点对应的两个k-DOP包围盒内的三角形对进行精确碰撞检测。2.根据权利要求1所述的基于SIMD的k-DOP包围盒碰撞检测方法,其特征在于所述的步骤(1)中,当进行第η次碰撞检测时,包围盒层...

【专利技术属性】
技术研发人员:唐敏童若锋杜鹏赵杰伊
申请(专利权)人:浙江大学
类型:发明
国别省市:86

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1