CN102253862B - 一种基于SIMD的k-DOP包围盒碰撞检测方法 - Google Patents
一种基于SIMD的k-DOP包围盒碰撞检测方法 Download PDFInfo
- Publication number
- CN102253862B CN102253862B CN 201110104065 CN201110104065A CN102253862B CN 102253862 B CN102253862 B CN 102253862B CN 201110104065 CN201110104065 CN 201110104065 CN 201110104065 A CN201110104065 A CN 201110104065A CN 102253862 B CN102253862 B CN 102253862B
- Authority
- CN
- China
- Prior art keywords
- bounding box
- collision detection
- bounding
- dop
- simd
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 49
- 238000000034 method Methods 0.000 claims abstract description 43
- 238000012360 testing method Methods 0.000 claims abstract description 24
- 238000010276 construction Methods 0.000 claims description 5
- 238000004088 simulation Methods 0.000 abstract description 2
- 230000000295 complement effect Effects 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 5
- 238000007667 floating Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000011282 treatment Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
Images
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种基于SIMD的k-DOP包围盒碰撞检测方法,包括:(1)使用SIMD指令构建BVH;(2)构建BVTT,使用SIMD指令对BVTT进行包围盒重叠测试;(3)对包围盒进行精确碰撞检测。本发明通过利用SIMD的指令级并行处理能力,减少了碰撞检测操作过程中的指令数目,加速了包围盒构造或重构、BVH建立或更新以及包围盒重叠测试的过程,缩短了碰撞检测的时间,与传统的碰撞检测方法相比可获得约4倍的速度提升,具有良好的兼容性,可与任务级并行处理形成有效互补,从而提高了整体的并行加速比,尤其适应用于机器人运动路径规划、物理仿真、视频游戏等技术领域中。
Description
技术领域
本发明属于计算机检测技术领域,具体涉及一种基于SIMD(单指令多数据流)的k-DOP包围盒碰撞检测方法。
背景技术
包围盒层次结构(BVH)是一种针对三角形网格模型进行高效碰撞检测的重要工具。各种BVH,如球(Sphere)树,轴对齐包围盒(AABB)树,定向包围盒(OBB)树,离散定向多面体(k-DOP)树等,这些层次结构通常采用自顶向下的方法进行构造,被广泛应用于刚体或柔性物体的碰撞检测。而柔性物体的BVH的快速更新技术(如重新整理、动态或选择性重构等),已成为本领域诸多研究者的关注热点。
对于柔性物体,除了需要考虑包围盒的紧凑性外,包围盒整理和重构的效率也至关重要。图1为AABB、8-DOP和OBB三种包围盒的示意图,对于简单的包围盒如Sphere、AABB,其整理和构造十分快捷,但紧凑性较差;对于复杂的包围盒如OBB,虽然较为紧凑,但整理和构造的计算量较大;作为折中选择,k-DOP兼具紧凑性和高效性,因此常被用于柔性物体的包围盒层次结构。
目前传统的k-DOP包围盒碰撞检测方法,都是采用串行的实现方式来完成碰撞检测,k-DOP包围盒在重构和整理过程中的指令数目过多,执行起来非常耗时,且实时性差,在机器人运动路径规划、物理仿真、视频游戏等实时性要求较高的应用中,无法满足相应的碰撞检测要求。
发明内容
本发明提供了一种基于SIMD的k-DOP包围盒碰撞检测方法,充分利用SIMD的指令级并行处理能力,加速了包围盒构造或重构、BVH(包围盒层次结构)建立或更新以及包围盒重叠测试的过程,大大提高了碰撞检测速度。
一种基于SIMD的k-DOP包围盒碰撞检测方法,包括如下步骤:
(1)使用SIMD指令对待检测的三角形网格柔性场景模型中的每个三角形构造对应的k-DOP包围盒,进而建立所述的三角形网格柔性场景模型的包围盒层次结构;
(2)根据所述的包围盒层次结构,构建包围盒测试树,使用SIMD指令对包围盒测试树进行包围盒重叠测试,输出存在包围盒重叠的叶节点;
(3)对输出的叶节点对应的两个k-DOP包围盒内的三角形对进行精确碰撞检测。
优选的技术方案中,所述的步骤(1)中,当进行第n次碰撞检测时,包围盒层次结构是根据第n次碰撞检测时刻每个三角形的空间位置,使用SIMD指令对上一次碰撞检测过程中的包围盒层次结构中最底层的k-DOP包围盒进行重构,进而使用SIMD指令自底向上对上一次碰撞检测过程中的包围盒层次结构进行整理更新而成的,n为大于1的自然数;相应的提高了碰撞检测速度。
优选的技术方案中,所述的步骤(2)中,当进行第n次碰撞检测时,所述的包围盒测试树为上一次碰撞检测过程中的包围盒测试树;相应的提高了碰撞检测速度。
优选的技术方案中,所述的k-DOP包围盒为16-DOP包围盒,保证了碰撞检测过程的高效性。
本发明的有益技术效果是:通过利用SIMD的指令级并行处理能力,减少了碰撞检测操作过程中的指令数目,加速了包围盒构造或重构、BVH建立或更新以及包围盒重叠测试的过程,缩短了碰撞检测的时间,与传统的碰撞检测方法相比可获得约4倍的速度提升,具有良好的兼容性,可与任务级并行处理形成有效互补,从而提高了整体的并行加速比。
附图说明
图1(a)为AABB包围盒的示意图,图1(b)为8-DOP包围盒的示意图,图1(c)为OBB包围盒的示意图。
图2为本发明碰撞检测方法的步骤流程示意图。
图3为16-DOP包围盒在浮点向量中的数据布局图。
图4(a)为BVH的结构示意图,图4(b)为BVTT的结构示意图。
具体实施方式
为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明的碰撞检测方法进行详细说明。
如图2所示,一种基于SIMD的16-DOP包围盒碰撞检测方法,包括如下步骤:
(1)使用SIMD指令构建BVH。
使用SIMD指令对待检测的三角形网格柔性场景模型中的每个三角形构造对应的16-DOP包围盒,进而建立三角形网格柔性场景模型的包围盒层次结构;当进行第n次碰撞检测时,包围盒层次结构是根据第n次碰撞检测时刻每个三角形的空间位置,使用SIMD指令对上一次碰撞检测过程中的包围盒层次结构中最底层的16-DOP包围盒进行重构,进而使用SIMD指令自底向上对上一次碰撞检测过程中的包围盒层次结构进行整理更新而成的,n为大于1的自然数。
为每个三角形构造对应的16-DOP包围盒:首先将被包围三角形的顶点分别在各个方向上进行投影,然后判断这些投影是否落在包围盒的外部,如果落在包围盒外部,需要对该方向上包围盒的范围进行调整,保证该投影恰好落在边界上;对于16-DOP包围盒,任何一个三角形顶点都需要做16次比较,判断这个点是否落在包围盒内部。本发明使用SIMD指令并行地完成这个比较工作,共调用了mm_min_ps、mm_max_ps、mm_setr_ps这三条SIMD指令各2次,即可完成16-DOP包围盒的重构。其中,mm_setr_ps指令的作用是将4个浮点数送入1个浮点数向量数据中(如图3所示),mm_min_ps指令用来并行更新在4个方向上投影的最小值,mm_max_ps指令用来并行更新在4个方向上投影的最大值。
将每个三角形对应的16-DOP包围盒,作为BVH中最底层的16-DOP包围盒。在第一次碰撞检测时,采用自顶向下的方法构建BVH,首先计算出这些三角形的中心,将这些三角形中心投影到直角坐标系的某个坐标轴上,依据投影的正负,可以把它们分成两部分,分别为它们构造包围盒。然后采用同样的方式,对这两个包围盒进行细分,直到包围盒中只包含一个三角形。如图4(a)所示,有一个由a、b、c、d四个三角形组成的场景A1,首先计算出这些三角形的中心,将这些三角形中心投影到某个坐标轴上,依据投影的正负,可以把它们分成两部分,一部分记为B1,另一部分记为B2,分别为B1和B2构造包围盒。然后采用同样的方式,对B1、B2进行细分,直到包围盒中只包含一个三角形。
在随后的碰撞检测过程中,只需要对BVH中的非底层的包围盒大小进行重新计算。这是一个自底向上的计算过程,需要将每个非底层的两个子16-DOP包围盒合并为一个大的16-DOP包围盒。本发明使用SIMD指令并行地完成这个比较工作,共调用了mm_min_ps、mm_max_ps这2条SIMD指令各2次。其中,mm_min_ps用来并行更新在4个方向上投影的最小值,mm_max_ps用来并行更新在4个方向上投影的最大值。
(2)构建BVTT,使用SIMD指令对BVTT进行包围盒重叠测试。
根据包围盒层次结构,构建BVTT(包围盒测试树),使用SIMD指令对包围盒测试树进行包围盒重叠测试,输出存在包围盒重叠的叶节点;当进行第n次碰撞检测时,包围盒测试树为上一次碰撞检测过程中的包围盒测试树。
首先,采用自顶向下的构建方法构造BVTT,如图4所示,在图4(a)中已经对整个场景构造了一个BVH;相应地,图4(b)就是针对图4(a)场景而构建的一个BVTT。
BVTT的根节点(A1,A1)就是A1的自碰撞检测对,然后提取出A1的两个子包围盒B1和B2,分别对B1和B2做自碰撞检测,另外还需要检测B1和B2之间是否发生碰撞,即比较两个16-DOP包围盒之间是否有重叠。这个过程可以概括为:在这16个方向上比较两个包围盒是否有交集;如果在某个方向上没有重叠,则停止比较并且判定两个包围盒没有重叠。如果在所有方向上都有重叠,并且B1有子包围盒a和b,则采用与处理B1和B2相同的方法,判断B1的两个子包围盒a和b是否与B2发生碰撞;如果在所有方向上都有重叠,并且B1没有子包围盒,但是B2有子包围盒c和d,则与处理B1和B2相同的方法,判断B2的两个子包围盒c和d是否与B1发生碰撞;如果在所有方向上都有重叠,并且B1和B2都已经是最底层包围盒,没有子包围盒,输出B1与B2对应的叶节点。
本实施方式使用SIMD指令并行地完成16-DOP包围盒间的重叠测试。通过调用mm_cmpgt_ps和mm_cmplt_ps指令,同时可以进行4路比较操作,然后使用mm_movemask_ps判别出如果任意一路重叠测试失败,则可以立即得出这两个16-DOP包围盒不可能发生碰撞的结论。
(3)对包围盒进行精确碰撞检测。
对输出的叶节点对应的两个16-DOP包围盒内的三角形对进行精确碰撞检测。
对两个16-DOP包围盒对应的两个三角形,使用元素测试进行精确计算,得到碰撞发生的第一碰撞时间。这个过程中,将两个三角形之间的碰撞检测问题,转化为顶点与三角形的碰撞检测以及边与边的碰撞检测。
本实施方式通过使用SIMD指令,极大地减少了针对16-DOP包围盒碰撞检测操作过程中的指令数目,缩短了碰撞检测的时间。由于在任何支持SIMD指令的CPU上都可以使用,因此本发明具有很好的兼容性。
Claims (3)
1.一种基于SIMD的k-DOP包围盒碰撞检测方法,包括如下步骤:
(1)使用SIMD指令对待检测的三角形网格柔性场景模型中的每个三角形构造对应的k-DOP包围盒:给每个三角形赋予一个k-DOP包围盒,将三角形的顶点分别在k个方向上进行投影,然后判断这些投影是否落在包围盒的外部,如果落在包围盒外部,需要对该方向上包围盒的范围进行调整,保证该投影恰好落在包围盒的边界上;
进而建立所述的三角形网格柔性场景模型的包围盒层次结构:
在第一次碰撞检测时,采用自顶向下的方法构建包围盒层次结构,首先计算出所有三角形的中心,将所有三角形中心投影到直角坐标系的某个坐标轴上,依据投影的正负,可以把它们分成两部分,分别为它们构造包围盒;然后采用同样的方式,对这两个包围盒中的三角形再进行细分,直到包围盒中只包含一个三角形;
当进行第n次碰撞检测时,包围盒层次结构是根据第n次碰撞检测时刻每个三角形的空间位置,使用SIMD指令对上一次碰撞检测过程中的包围盒层次结构中最底层的k-DOP包围盒进行重构,进而使用SIMD指令自底向上对上一次碰撞检测过程中的包围盒层次结构进行整理更新而成的,n为大于1的自然数;
(2)根据所述的包围盒层次结构,构建包围盒测试树,使用SIMD指令对包围盒测试树进行包围盒重叠测试,输出存在包围盒重叠的叶节点;
(3)对输出的叶节点对应的两个k-DOP包围盒内的三角形对进行精确碰撞检测。
2.根据权利要求1所述的基于SIMD的k-DOP包围盒碰撞检测方法,其特征在于:所述的步骤(2)中,当进行第n次碰撞检测时,所述的包围盒测试树为上一次碰撞检测过程中的包围盒测试树。
3.根据权利要求1所述的基于SIMD的k-DOP包围盒碰撞检测方法,其特征在于:所述的k-DOP包围盒为16-DOP包围盒。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110104065 CN102253862B (zh) | 2011-04-26 | 2011-04-26 | 一种基于SIMD的k-DOP包围盒碰撞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110104065 CN102253862B (zh) | 2011-04-26 | 2011-04-26 | 一种基于SIMD的k-DOP包围盒碰撞检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102253862A CN102253862A (zh) | 2011-11-23 |
CN102253862B true CN102253862B (zh) | 2013-01-30 |
Family
ID=44981142
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110104065 Expired - Fee Related CN102253862B (zh) | 2011-04-26 | 2011-04-26 | 一种基于SIMD的k-DOP包围盒碰撞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102253862B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102446122A (zh) * | 2011-12-21 | 2012-05-09 | 上海电机学院 | 一种基于包围盒树的碰撞检测方法 |
CN102609321B (zh) * | 2012-01-30 | 2014-07-16 | 华南理工大学 | 基于K_DOPs快速连续碰撞检测方法 |
CN103324784B (zh) * | 2013-05-30 | 2016-05-18 | 杭州电子科技大学 | 一种基于局部约束的网格模型碰撞处理方法 |
CN103337091B (zh) * | 2013-05-30 | 2016-02-03 | 杭州电子科技大学 | 一种基于厚度的柔性场景连续碰撞检测方法 |
CN111708361B (zh) * | 2020-05-19 | 2023-09-08 | 上海有个机器人有限公司 | 多机器人碰撞预测方法和装置 |
CN113577773B (zh) * | 2021-07-08 | 2024-01-23 | 武汉指娱互动信息技术有限公司 | 一种碰撞数据处理方法、装置、电子设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101093586A (zh) * | 2007-07-12 | 2007-12-26 | 上海交通大学 | 面向复杂场景实时交互操作的并行碰撞检测方法 |
-
2011
- 2011-04-26 CN CN 201110104065 patent/CN102253862B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101093586A (zh) * | 2007-07-12 | 2007-12-26 | 上海交通大学 | 面向复杂场景实时交互操作的并行碰撞检测方法 |
Non-Patent Citations (4)
Title |
---|
唐敏等.图形硬件加速的柔性物体连续碰撞检测.《计算机学报》.2010,第33卷(第10期),2022-2030. |
唐敏等.基于SIMD指令的柔性物体并行碰撞检测.《计算机学报》.2009,第32卷(第10期),2042-2051. |
图形硬件加速的柔性物体连续碰撞检测;唐敏等;《计算机学报》;20101031;第33卷(第10期);2022-2030 * |
基于SIMD指令的柔性物体并行碰撞检测;唐敏等;《计算机学报》;20091031;第32卷(第10期);2042-2051 * |
Also Published As
Publication number | Publication date |
---|---|
CN102253862A (zh) | 2011-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102253862B (zh) | 一种基于SIMD的k-DOP包围盒碰撞检测方法 | |
AU2020100371A4 (en) | Hierarchical multi-object tracking method based on saliency detection | |
Navarro et al. | A survey on parallel computing and its applications in data-parallel problems using GPU architectures | |
CN102393826B (zh) | 一种基于多核并行处理的柔性场景连续碰撞检测方法 | |
CN102193837B (zh) | 一种基于前线的包围盒碰撞检测方法 | |
CN104360633B (zh) | 一种面向服务机器人的人机交互系统 | |
Allard et al. | Grimage: markerless 3D interactions | |
CN102609992A (zh) | 基于三角网格变形体的自碰撞检测方法 | |
CN103337091A (zh) | 一种基于厚度的柔性场景连续碰撞检测方法 | |
CN104360896A (zh) | 一种基于gpu集群的并行流体仿真加速方法 | |
CN102722910B (zh) | 一种基于分离轴剔除的体网格场景连续碰撞检测方法 | |
CN104715500A (zh) | 一种基于三维动画设计的3d动画制作开发系统 | |
KR101084980B1 (ko) | 상호충돌검사 기반 병렬충돌검사 방법 및 컴퓨터 판독가능 매체 | |
CN101609563A (zh) | 一种三维模型形状特征二叉树的构建方法 | |
CN103324784A (zh) | 一种基于局部约束的网格模型碰撞处理方法 | |
CN102393825B (zh) | 一种基于非共面剔除的柔性场景连续碰撞检测方法 | |
CN102393827A (zh) | 一种基于连续法向锥剔除的柔性场景连续碰撞检测方法 | |
Rahman et al. | Towards accelerated agent-based crowd simulation for Hajj and Umrah | |
CN102708017A (zh) | 一种基于非共线剔除的柔性场景连续碰撞检测方法 | |
CN104463940B (zh) | 一种基于gpu的混合树并行构建方法 | |
Machado et al. | tinyMD: Mapping molecular dynamics simulations to heterogeneous hardware using partial evaluation | |
Yoon et al. | Recent advances in real-time collision and proximity computations for games and simulations | |
Liu et al. | Phusis cloth: A physics engine for real-time character cloth animation | |
CN103049928A (zh) | 并行化实时稠密体素重建方法 | |
CN117130491B (zh) | 混合现实多组协同的方法、系统、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130130 Termination date: 20150426 |
|
EXPY | Termination of patent right or utility model |