CN106875491A - 一种面向gpu的三角网格碰撞检测方法 - Google Patents
一种面向gpu的三角网格碰撞检测方法 Download PDFInfo
- Publication number
- CN106875491A CN106875491A CN201710076449.XA CN201710076449A CN106875491A CN 106875491 A CN106875491 A CN 106875491A CN 201710076449 A CN201710076449 A CN 201710076449A CN 106875491 A CN106875491 A CN 106875491A
- Authority
- CN
- China
- Prior art keywords
- triangle
- collision
- algorithm
- checking method
- method towards
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Traffic Control Systems (AREA)
Abstract
本发明公开了一种面向GPU的三角网格碰撞检测方法,包括基本碰撞算法部分和算法优化部分。其中,基本碰撞算法的具体步骤包括:步骤11、进行三角形相交测试;步骤12、进行两个物体间的碰撞检测;算法优化部分利用减少内存访问策略和共享内存策略两种策略进行加速,具体步骤包括:步骤21(通过减少内存访问次数的策略,对基本碰撞算法进行优化)、步骤22(通过内存共享的策略,对基本碰撞算法进行优化)、步骤23(结合减少内存访问的次数和内存共享,对基本碰撞算法进行优化)。本发明的一种面向GPU的三角网格碰撞检测方法,适用于中等复杂度的模型,降低了算法复杂度,提高了碰撞检测算法的性能。
Description
技术领域
本发明涉及计算机图形学领域,尤其涉及一种面向GPU的三角网格碰撞检测方法。
背景技术
碰撞检测(Collision Detection,简称CD)技术用于检测空间中的一个或多个几何物体之间是否存在重叠,如果存在则识别重叠特征。碰撞检测算法被广泛地应用在计算机图形学领域的多方面应用中,包括基于物理的动画、几何建模、6-DOF触觉渲染、机器人路径规划、医学成像、交互式计算机游戏等。
随着多核图形处理器(Graphics Processing Unit,简称GPU)这样的大规模并行处理器的快速发展,以及NVIDA推出的通用并行计算架构CUDA(Compute Unified DeviceArchitecture,简称CUDA)。许多基于单处理器的算法已经利用CUDA技术扩展到GPU上。如层次包围盒(Bounding Volume Hierarchy,简称BVH)结构就是提高碰撞检测性能很好的技术。但是由于一般的串行算法对数据依赖较高,从存储器结构访问数据会有延迟。如BVH这类空间数据结构的算法复杂度较高,很多都需要进行预处理或是代价较高的数据结构重构。为了解决这些问题,首先,需要将这些有效的串行算法重新设计适用于大规模的并行处理器,其次,需要在保证碰撞检测性能提高的基础上,摒弃预处理以及代价较高的数据结构重构操作。
因此,本领域的技术人员致力于开发一种面向GPU的三角网格碰撞检测方法,利用对基本的碰撞检测算法的优化在GPU上进行大规模并行计算来对物体进行快速、准确的碰撞检测,算法适用于中等复杂度的模型,涉及基于分离轴的三角形相交测试、减少内存访问优化策略、共享内存优化策略等方法,降低了算法复杂度,提高了碰撞检测算法的性能。
发明内容
有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是开发一种面向GPU的三角网格碰撞检测方法,利用对基本的碰撞检测算法的优化在GPU上进行大规模并行计算来对物体进行快速、准确的碰撞检测,算法适用于中等复杂度的模型,涉及基于分离轴的三角形相交测试、减少内存访问优化策略、共享内存优化策略等方法,降低了算法复杂度,提高了碰撞检测算法的性能。
为实现上述目的,本发明提供了一种面向GPU的三角网格碰撞检测方法,包括基本碰撞算法部分和算法优化部分,其中,
基本碰撞算法的具体步骤包括:
步骤11、进行三角形相交测试;
步骤12、进行两个物体间的碰撞检测;
算法优化部分利用减少内存访问策略和共享内存策略,具体步骤包括:
步骤21、通过减少内存访问次数的策略,对基本碰撞算法进行优化;
步骤22、通过内存共享的策略,对基本碰撞算法进行优化;
步骤23、结合减少内存访问的次数和内存共享,对基本碰撞算法进行优化。
进一步地,步骤11具体为:
步骤111、寻找三角形对之间所有的潜在分离轴;
步骤112、利用分离轴方式进行三角形相交测试。
寻找潜在的分离轴方式:假设有三角形x1x2x3和三角形x4x5x6,π1、π2分别是三角形x1x2x3和三角形x4x5x6的平面法线,ei(i=1,…6)为三角形x1x2x3和三角形x4x5x6的边,令L为潜在的分离轴,对于三维空间的两个三角形,分离测试只要考虑有限集合的潜在的分离轴,这里的分离轴包括π1,π2,ei×ej(i=1,2,3;j=4,5,6),π1×ei(i=1,2,3),π2×ej(j=4,5,6)。
进一步地,如果存在一条潜在分离轴L,通过将两个三角形投影到分离轴L上进行相交测试。三角形x1x2x3在L上的投影区间被设置为三角形x4x5x6在L上的投影区间被设置为当I0与I1两个投影区间不相交,判定两个三角形不相交。特别的,当两个三角形在L上的投影区间满足或者时,这两个三角形显然是不相交的。
进一步地,利用分离轴理论进行三角形相交测试时,相交测试的投影和区间测量方式操作类似,所以,已知任意一个投影区间不相交,就不用进行剩余的分离轴测试。如果所有分离轴测试结束,没有一个区间是分离的,那么这两个凸集必定相交。
进行物体碰撞检测,由于测试的物体是由三角形构成的网状物体,所以利用三角形相交测试方法,将任意物体A和B之间的碰撞检测转化为A与B之间两组三角形之间的相交计算。
进一步地,两个物体间的碰撞检测具体为:每一个CUDA线程读取物体A中的一个三角形a和物体B中的一个三角形b,然后计算它们对应的相交状态;当三角形a和三角形b相交,它们对应的三角形索引号被存储。
进一步地,步骤21具体为:三角形数据被设置为读取一次,多次使用;每一个CUDA线程读取物体A中的一个三角形,同时读取物体B中的K个三角形,每一个CUDA线程进行K次基础碰撞检测。
进一步地,步骤22具体为:从设备内存加载三角形数据到共享内存,然后将数据同步给其他所有CUDA线程,使得每个CUDA线程都可以安全读取到不同CUDA线程填充的共享内存地址;由于共享内存时稀缺资源,每次只能加载两个物体的部分三角形数据进入共享内存。从物体A和B中分别加载K个三角形数据进入共享内存,利用共享内存的数据进行碰撞测试,最后将结果写回设备内存。
进一步地,步骤23具体为:利用共享内存的方式,先从物体A和物体B中分别加载K个三角形数据进入共享内存,然后利用共享内存中的三角形数据进行碰撞检测。碰撞检测时,利用减少内存访问的策略,读取物体A中的一个三角形与物体B中的所有三角形进行碰撞检测,减少不必要数据的传输。
技术效果
1、减少内存的访问次数,保证全局内存和设备内存之间的数据传输频率;
2、使用共享内存,充分利用共享内存中的资源,共享内存的速度比全局内存快,在共享内存中进行碰撞检测,最后将碰撞结果写回设备内存;
3、实现在GPU上进行大规模并行计算来对物体进行快速、准确的碰撞检测,算法适用于中等复杂度的模型,涉及基于分离轴的三角形相交测试、减少内存访问优化策略、共享内存优化策略等方法,降低了算法复杂度,提高了碰撞检测算法的性能。
以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
附图说明
图1是本发明的一个较佳实施例的分离轴方式进行三角形相交测试的示意图,其中(a)给出三维空间中的两个三角形面片,(b)为两个三角形其中一条分离轴测试示意图。
图2是本发明的一个较佳实施例的物体A和物体B在GPU上进行碰撞检测示意图。
图3是本发明的一个较佳实施例的利用减少内存访问优化策略,物体A和物体B在GPU上进行碰撞检测示意图;
图4是本发明的一个较佳实施例的利用共享内存优化策略,物体A和物体B在GPU上进行碰撞检测示意图;
图5是本发明的一个较佳实施例的结合减少内存访问策略和共享内存优化策略,物体A和B在GPU上进行碰撞检测示意图。
图6是本发明的一较佳实施例的从物体A和物体B中分别加载K个三角形进入共享内存进行碰撞检测示意图。
具体实施方式
如图1所示,本发明的一较佳实施例的一种面向GPU的三角网格碰撞检测方法,包括基本碰撞算法部分和算法优化部分,其中,
基本碰撞算法的具体步骤包括:
步骤11、进行三角形相交测试;优选的,使用分离轴进行三角形相交测试;
具体地,步骤11包括:
步骤111、寻找三角形对之间所有的潜在分离轴;
步骤112、利用分离轴方式进行三角形相交测试。
步骤12、进行两个物体间的碰撞检测;
进行物体碰撞检测,由于测试的物体是由三角形构成的网状物体,所以利用三角形相交测试方法,将任意物体A和物体B之间的碰撞检测转化为物体A和物体B之间两组三角形之间的相交计算。
算法优化部分利用减少内存访问策略和共享内存策略,具体步骤包括:
步骤21、通过减少内存访问次数的策略,对基本碰撞算法进行优化;
步骤22、通过内存共享的策略,对基本碰撞算法进行优化;
步骤23、结合减少内存访问的次数和内存共享,对基本碰撞算法进行优化。
基本碰撞算法部分,具体地,如图2(a)所示,x1x2x3为第一个三角形,x4x5x6为第二个三角形。π1,π2分别是第一个三角形和第二个三角形的平面法线。ei(i=1,…,6)为这两个三角形的边。令L为潜在的分离轴,三维场景的两个三角形,分离测试只需要考虑有限个可能的分离轴,这里包括π1,π2,ei×ej(i=1,2,3,j=4,5,6),π1×ei(i=1,2,3),π2×ej(j=4,5,6)。
利用分离轴方式进行三角形的相交测试就是,判断三角形对在所有可能的分离轴上的投影区间是否相交,如果存在一个分离轴上两个投影区间不相交,则这两个三角形不相交;如果找不到一个分离轴使得两个三角形的投影区间不相交,则这两个三角形相交。所以,在利用分离轴进行三角形相交测试时,只要找到两个三角形在任意一个分离轴上不相交,则剩余的分离轴测试就不用进行。
如图2(b)所示,分别为x1x2x3,x4x5x6两个三角形的投影区间。如果存在一个潜在的分离轴L,使得I0,I1不相交,那么判定两个三角形不相交。特别地,当或者时,显然,两个三角形不相交。完整的分离测试是,判断三角形对在所有可能的分离轴上的投影区间是否相交,如果没有一个区间是分离的,那么两个三角形是相交的。实际上,如果任意一个区间已知不相交,那么两个三角形就是不相交的,就不需要再进行剩余的分离轴测试。
如图3所示,物体A和物体B的三角形列表分别在左侧和上侧。每一个CUDA线程读取物体A中的一个三角形a和物体B中的一个三角形b,然后计算他们的相应的相交状态。如果两个三角形相交,他们对应的三角形索引号会被存储以备之后使用。结果的存储利用CUDA线程中的原子内存访问。物体A和物体B分别包含n和m个三角形,三角形成对交叉测试需要nm次。每个物体的顶点以一维数组的形式被存储在设备全局内存。一个顶点需要三个浮点数,一个三角形需要九个浮点数。因此物体A和物体B分别需要分配9n和9m个全局内存。每个线程块需要进行K×K次碰撞测试,测试块内每个线程进行一个基本的碰撞测试。对于一个可变形物体的自碰撞,物体A和物体B是完全相同的,碰撞测试T(i,j)=T(j,i)。为了避免重复的碰撞测试,相交测试只在三角形对中B的索引值大于A的索引时进行。如图3所示,自碰撞检测我们约定j>i。
算法优化部分,具体地,用步骤12中的碰撞检测算法,进行基本碰撞检测时,物体A中的每个三角形从全局内存读取m次,物体B中三角形被读取n次。所有的三角形从全局内存读取了2n×m次。为了减少数据在全局内存和设备之间的传输次数,如图4所示,从物体A中读取一个三角形与物体B中所有三角形进行碰撞检测。每个线程同时读取物体A中一个三角形和物体B中的K个三角形,每个线程进行K个基础碰撞测试。
利用共享内存同样也能减少数据在全局内存和设备之间的传输次数。只有计算能力2.X或以上的GPU上才能使用。我们从设备内存中加载三角形数据到共享内存,然后同步给线程块内所有其他线程。使得每个线程都能安全地读取到不同地共享内存地址。利用共享内存中的数据进行碰撞检测,最后将碰撞检测结果写回设备内存。由于共享内存时稀缺资源,每次只能加载两个物体的部分三角形数据进入共享内存。如图5所示,从物体A和物体B中分别加载K个三角形进入共享内存,进行碰撞检测,每个线程需要进行K×K个基础碰撞检测,最后将结果写回设备内存。
结合步骤21和步骤22中的两种优化方式,如图6所示,从物体A和物体B中分别加载K个三角形进入共享内存进行碰撞检测。碰撞检测时,利用步骤21中提到的减少内存访问的方式,同时读取A中一个三角形和B中K个三角形进行碰撞检测。
综上所述,通过对基本碰撞算法的优化,有效的将物体的碰撞检测在GPU下进行大规模的并行计算方式实现。在降低算法复杂度、提高碰撞检测性能的前提下,能够有效的对中等复杂度的模型进行快速、准确的碰撞检测,同时摒弃了预处理以及代价较高的数据结构重构操作。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (8)
1.一种面向GPU的三角网格碰撞检测方法,其特征在于,包括基本碰撞算法部分和算法优化部分,其中,
所述基本碰撞算法的具体步骤包括:
步骤11、进行三角形相交测试;
步骤12、进行两个物体间的碰撞检测;
所述算法优化部分利用减少内存访问策略和共享内存策略,具体步骤包括:
步骤21、通过减少内存访问次数的策略,对基本碰撞算法进行优化;
步骤22、通过内存共享的策略,对基本碰撞算法进行优化;
步骤23、结合减少内存访问的次数和内存共享,对基本碰撞算法进行优化。
2.如权利要求1所述的一种面向GPU的三角网格碰撞检测方法,其特征在于,所述步骤11具体为:
步骤111、寻找三角形对之间所有的潜在分离轴;
步骤112、利用分离轴方式进行三角形相交测试。
3.如权利要求2所述的一种面向GPU的三角网格碰撞检测方法,其特征在于,寻找潜在的分离轴方式具体为:假设有三角形x1x2x3和三角形x4x5x6,π1、π2分别被设置为是所述三角形x1x2x3和所述三角形x4x5x6的平面法线,ei(i=1,…6)被设置为所述三角形x1x2x3和所述三角形x4x5x6边;令L为潜在的分离轴,分离轴包括π1,π2,θi×θj(i=1,2,3;j=4,5,6),π1×θi(i=1,2,3),π2×θj(j=4,5,6)。
4.如权利要求3所述的一种面向GPU的三角网格碰撞检测方法,其特征在于,所述三角形x1x2x3在直线L上的投影区间被设置为所述三角形x4x5x6在所述潜在的分离轴L上的投影区间被设置为如果存在一条直线L,使得I0与I1两个投影区间不相交,判定两个三角形不相交;当两个三角形在直线L上的投影区间满足或者时,判定两个三角形不相交。
5.如权利要求1所述的一种面向GPU的三角网格碰撞检测方法,其特征在于,所述两个物体间的碰撞检测具体为:每一个CUDA线程读取物体A中的一个三角形a和物体B中的一个三角形b,然后计算它们对应的相交状态;当三角形a和三角形b相交,它们对应的三角形索引号被存储。
6.如权利要求1所述的一种面向GPU的三角网格碰撞检测方法,其特征在于,所述步骤21具体为:三角形数据被设置为读取一次,多次使用;每一个CUDA线程读取所述物体A中的一个三角形,同时读取所述物体B中的K个三角形,每一个CUDA线程进行K次基础碰撞检测。
7.如权利要求1所述的一种面向GPU的三角网格碰撞检测方法,其特征在于,所述步骤22具体为:从设备内存加载三角形数据到共享内存,然后将数据同步给其他所有CUDA线程,使得每个CUDA线程都可以安全读取到不同CUDA线程填充的所述共享内存的地址;从物体A和物体B中分别加载K个三角形数据进入所述共享内存,利用所述共享内存的数据进行碰撞测试,最后将结果写回所述设备内存。
8.如权利要求1所述的一种面向GPU的三角网格碰撞检测方法,其特征在于,所述步骤23具体为:利用共享内存的方式,先从物体A和物体B中分别加载K个三角形数据进入共享内存,然后利用所述共享内存中的三角形数据进行碰撞检测;碰撞检测时,利用减少内存访问的策略,读取物体A中的一个三角形与物体B中的所有三角形进行碰撞检测。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710076449.XA CN106875491A (zh) | 2017-02-13 | 2017-02-13 | 一种面向gpu的三角网格碰撞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710076449.XA CN106875491A (zh) | 2017-02-13 | 2017-02-13 | 一种面向gpu的三角网格碰撞检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106875491A true CN106875491A (zh) | 2017-06-20 |
Family
ID=59165860
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710076449.XA Pending CN106875491A (zh) | 2017-02-13 | 2017-02-13 | 一种面向gpu的三角网格碰撞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106875491A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102609992A (zh) * | 2012-02-12 | 2012-07-25 | 北京航空航天大学 | 基于三角网格变形体的自碰撞检测方法 |
CN104408774A (zh) * | 2014-12-11 | 2015-03-11 | 中国科学院合肥物质科学研究院 | 一种基于gpu加速的实体面片模型间碰撞检测方法 |
CN105205289A (zh) * | 2015-11-02 | 2015-12-30 | 北京航空航天大学 | 一种基于人脑变形仿真的快速连续碰撞检测方法 |
-
2017
- 2017-02-13 CN CN201710076449.XA patent/CN106875491A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102609992A (zh) * | 2012-02-12 | 2012-07-25 | 北京航空航天大学 | 基于三角网格变形体的自碰撞检测方法 |
CN104408774A (zh) * | 2014-12-11 | 2015-03-11 | 中国科学院合肥物质科学研究院 | 一种基于gpu加速的实体面片模型间碰撞检测方法 |
CN105205289A (zh) * | 2015-11-02 | 2015-12-30 | 北京航空航天大学 | 一种基于人脑变形仿真的快速连续碰撞检测方法 |
Non-Patent Citations (2)
Title |
---|
SIMON PABST 等: "fast and scalable CPU/GPU collision detection for rigid and deformable surface", 《EUROGRAPHICS SYMPOSIUM ON GEOMETRY PROCESSING 2010》 * |
石其: "基于GPU的碰撞检测算法研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Liu et al. | Real-time collision culling of a million bodies on graphics processing units | |
Komatitsch et al. | High-order finite-element seismic wave propagation modeling with MPI on a large GPU cluster | |
CN103106120B (zh) | 具有冲量传播的多线程物理引擎的电路装置、系统及其方法 | |
CN103914868B (zh) | 虚拟现实下的海量模型数据动态调度与实时异步加载方法 | |
Kim et al. | Quasi-triangulation and interworld data structure in three dimensions | |
WO2008067483A1 (en) | Ray tracing a three dimensional scene using a grid | |
CN104112291A (zh) | 用于光线追踪渲染的并行相交测试及着色的架构 | |
Teichmann et al. | Polygonal Approximation of Voronoi Diagrams of Set of Triangles in Three Dimensions | |
CN106846460A (zh) | 一种三维bim 图像的实现方法及装置 | |
Tang et al. | Parallel hybrid mesh adaptation by refinement and coarsening | |
US7203917B2 (en) | Efficient distributed SAT and SAT-based distributed bounded model checking | |
Yu et al. | A robust Delaunay-AFT based parallel method for the generation of large-scale fully constrained meshes | |
Li et al. | Fast and robust GPU-based point-in-polyhedron determination | |
Danczyk et al. | Finite element analysis over tangled simplicial meshes: Theory and implementation | |
CN111814384B (zh) | 高性能数值模拟的前后处理低开销连接数据结构及方法 | |
Giuliani et al. | Face coloring in unstructured CFD codes | |
Hanindhito et al. | GAPS: GPU-acceleration of PDE solvers for wave simulation | |
CN106875491A (zh) | 一种面向gpu的三角网格碰撞检测方法 | |
Weinbub et al. | Shared-memory parallelization of the fast marching method using an overlapping domain-decomposition approach | |
Capozzoli et al. | The success of GPU computing in applied electromagnetics | |
Kaehler | Massively parallel computation of accurate densities for N-body dark matter simulations using the phase-space-element method | |
Dang et al. | A fine-grained parallel model for the fast iterative method in solving eikonal equations | |
US9805497B2 (en) | Collision-culling of lines over polygons | |
CN106846483B (zh) | 基于共享直线段的平面片束排序方法和系统 | |
Chentanez et al. | GPU accelerated grid-free surface tracking |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170620 |