GPU碰撞检测

合集下载

2D游戏中常见的碰撞检测处理(仅碰撞体)【持续更新】

2D游戏中常见的碰撞检测处理(仅碰撞体)【持续更新】

2D游戏中常见的碰撞检测处理(仅碰撞体)【持续更新】写在前⾯嗯...打算开始每天写点啥了,不知道能坚持多久。

准备以⼀周为单位来进⾏更新,周⼀~周三写⼀些图形⽅⾯的内容,四~六是和图形没有什么太⼤关联的内容(意会就好),周⽇作为⼀个更新重点试着写⼀些乱七⼋糟的东西。

那么就这样开始更新了w~在现今的游戏中,碰撞检测可以说是⼀个基础的不能再基础的技术。

它关乎能否正确判断玩家的攻击有没有击中⽬标,判断玩家有没有踩在地板上,判断某两个物体有没有碰撞在⼀起,进⽽衍⽣出其它的各种⾏为。

⽽碰撞检测是建⽴在碰撞体上的。

碰撞体是对⼀个物体“边界”的确切描述,它描述了每个需要进⾏碰撞检测的物体的边界,并依靠数学⽅法判断这些边界是否相交,进⽽产⽣碰撞检测的结果。

(“⽼鹰⽤⽖⼦抓到了兔⼦”)如上图所⽰,代表⽼鹰⽖⼦的两个蓝⾊圆和代表兔⼦的淡黄⾊圆“相交”了,由此我们判定鹰抓到了兔⼦,进⾏⼀系列的后续操作。

在这个过程中,我们不在意鹰的⽖⼦具体是什么样⼦的,⽽只在意它的边界在哪⾥。

在这个例⼦中,边界就是⼀个单纯的圆形。

在电⼦游戏发展早期,碰撞体和实际的轮廓之间还存在着巨⼤的差异,只是能够概括其⼤概的边界⽽已。

尽管现在我们有许多丰富的⼿段来让我们的碰撞体尽可能的接近真实的外形,但多数情况下并不会这么做——归根结底,这么做没给游戏的真实程度带来什么太⼤的提升,反⽽还糟蹋了游戏的运⾏速度。

那让我们从⼀个最基本的开始吧。

1)圆形碰撞体圆形碰撞体可以说是最简单的⼀种碰撞体,其计算速度也是最快的,算法也⾮常容易理解。

回想⼀下初中数学中关于两圆“相交”的定义:两圆圆⼼的距离⼤于半径和,我们就可以按照它来判断两圆是否相交。

1bool IsHit(double x1, double y1, double x2, double y2, double r1, double r2)2 {3//勾股定理4return ((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) < (r1+r2)*(r1+r2);5 }它也可以⾮常⽅便的扩展到三维球。

gpu测试基准

gpu测试基准

gpu测试基准GPU测试基准GPU(图形处理单元)是现代计算机中的重要组件之一,它的性能在计算机图形渲染、机器学习和科学计算等领域发挥着重要作用。

为了评估和比较不同GPU的性能,人们开发了各种GPU测试基准。

本文将介绍GPU测试基准的作用、种类以及如何选择和使用它们。

一、GPU测试基准的作用GPU测试基准是一种用于测量和比较不同GPU性能的工具。

通过运行一系列标准测试程序,GPU测试基准可以提供关于GPU性能的详细数据,包括图形处理能力、计算能力和功耗等方面的指标。

这些指标可以帮助用户选择适合自己需求的GPU,并对不同GPU进行性能比较。

二、GPU测试基准的种类目前市面上有许多不同类型的GPU测试基准,主要可以分为以下几类:1.图形性能测试:这类基准主要用于评估GPU在图形渲染方面的性能。

它们通常包括各种3D游戏场景和特效,通过运行这些场景和特效,可以测试GPU的帧率、分辨率和画质等指标。

2.计算性能测试:这类基准主要用于评估GPU在科学计算和机器学习等领域的性能。

它们通常包括一些常用的数学计算和矩阵运算,通过运行这些计算,可以测试GPU的计算速度和并行处理能力等指标。

3.功耗测试:这类基准主要用于评估GPU在功耗方面的性能。

它们通常通过监测GPU的功耗和温度等参数,来评估GPU在不同工作负载下的能效和散热能力。

三、选择和使用GPU测试基准的注意事项在选择和使用GPU测试基准时,需要注意以下几点:1.测试工具的可靠性:选择知名度较高的测试工具,以保证测试结果的准确性和可靠性。

2.测试环境的一致性:测试时需要保证测试环境的一致性,包括硬件配置、驱动程序和操作系统等。

只有在相同的测试环境下,才能进行准确的性能比较。

3.合理选择测试项目:根据自己的需求和关注点,选择适合的测试项目。

如果主要关注图形渲染性能,可以选择图形性能测试;如果主要关注科学计算性能,可以选择计算性能测试。

4.综合考虑多个指标:在比较不同GPU性能时,不仅要关注单一指标,还要综合考虑多个指标。

基于OSG的虚拟现实碰撞检测及GPU并行加速

基于OSG的虚拟现实碰撞检测及GPU并行加速

河北大学硕士学位论文基于OSG的虚拟现实碰撞检测及GPU并行加速姓名:刘京申请学位级别:硕士专业:检测技术与自动化装置指导教师:王洪瑞2011-05摘 要碰撞问题是机器人、动画仿真、虚拟现实、计算几何、CAD/CAM等领域的关键问题之一,而实时性和精确性是衡量一个碰撞检测算法是否优越的重要标准。

尽管国内外已经对碰撞检测问题做了许多有意义的工作,但是随着计算机软硬件及网络等技术的日益成熟,尤其是GPU并行计算技术的快速发展,不同规模程度场景下实时而又精确的碰撞检测问题逐步成为当前研究的热点。

针对大规模复杂场景的碰撞检测问题,本文首先从场景渲染入手,在详细了解OSG 渲染引擎的场景组织方式、渲染流程之后,利用新一代的三维图形渲染系统的功能特性,搭建一个高效的基于场景图的河北大学新校区校园漫游系统。

进而在场景交互方面,通过深入研究基于图像的碰撞检测算法,提出了实时性更好的基于向指定平面投影、模板测试和深度测试的改进型图像空间碰撞检测算法,实现了虚拟校园漫游系统中对漫游角色模型与场景模型之间的快速碰撞检测。

同时引入GPU并行计算,调高了碰撞检测的效率。

对于更加注重于碰撞检测精度的虚拟手术仿真系统来说,本文在基于距离的碰撞检测算法基础之上,通过扫描线确定模型间潜在碰撞区域内的刨分顶点、自适应面刨分、构造刨分三角形、判断刨分点到刨分三角形之间的距离实现了骨锯模型和头盖骨模型间的精确碰撞检测。

该算法不仅能获得碰撞发生位置,还把碰撞区域局限在几个刨分顶点构成的多个刨分三角形之内,同时还继续引入GPU并行计算技术,优化了整个碰撞检测算法,缩短了计算周期。

关键词:虚拟现实碰撞检测 OSG GPU并行计算AbstractAlthough many researchers had done much meaningful work about collision detection, but along with the computer software and hardware and network technology fast developing, especially the GPU parallel computing technology, real-time and accurate collision detection problem with the different scale scenes has became a hot issues.For collision detection problems of large scale and complicated scenes, we firstly organized a virtual campus roaming scene of Hebei university using the function characteristics of new 3d graphics rendering system after in detailed understanding the organized way and rendering process of OSG rendering engine. Then through deeply studying of the collision detection algorithm based on image, designing a improved based on image collision detection with the designated planar projection, stencil test and depth test, realizing the collision detection between roaming role model and scene models of the virtual campus roaming system. Meanwhile introducing the GPU parallel computing, improving the efficiency of collision detection.For the virtual surgery simulation which more focused on collision detection accuracy. In this paper, after researched the collision algorithm based on distance, we competed through the scanning line to compute segmentation vertexes,adaptive surface dividing, constructing dividing triangles, computing the distance between segmentation vertexes and dividing triangles to judge whether skull model and bone saw had collided. This algorithm can not only get the colliding position, but also can confine the collision regional in some dividing triangles. Also we continue to introduce GPU parallel computing technology, optimize the collision detection algorithm, and shorten the computation cycle.Keywords: Virtual Reality Collision Detection OSG GPU parallel computing第1章 绪 论第1章 绪论1.1课题的研究意义1.1.1课题的研究意义自20世纪90年代以来,虚拟现实技术(Virtual Reality,简称VR)作为一种新兴的强大人机交互技术,一直是信息领域研究开发和应用的热点方向之一。

Unity游戏开发中的物理引擎与碰撞检测

Unity游戏开发中的物理引擎与碰撞检测

Unity游戏开发中的物理引擎与碰撞检测引言Unity作为一款广泛应用于游戏开发的引擎,在物理引擎和碰撞检测方面提供了强大的功能。

本文将从物理引擎的基本原理以及碰撞检测的实现方式等方面进行详细介绍。

第一章物理引擎的基本原理物理引擎是指用于模拟和计算游戏中物体的运动和碰撞行为的软件组件。

Unity中的物理引擎主要使用的是基于Newtonian物理模型的Box2D和PhysX。

它们可以模拟物体的质量、位置、速度等物理特性,并在游戏中呈现出真实的物理效果。

1.1 物理引擎的基本原理物理引擎的基本原理是基于牛顿运动定律和能量守恒定律等物理学原理。

其核心是通过不断的迭代计算来模拟物体的运动轨迹。

在每个时间步长内,物体受到力的作用产生加速度,然后通过积分计算得到速度和位置的变化。

1.2 刚体和碰撞体在物理引擎中,物体被分为刚体和碰撞体两种类型。

刚体是指具有质量和位置信息,同时在物理模拟中不会发生形变的对象。

碰撞体则是指具有碰撞体积和形状信息,并参与碰撞检测和响应的对象。

第二章碰撞检测的实现方式碰撞检测是指判断游戏中两个或更多物体是否发生碰撞并做出相应的处理。

Unity中提供了多种碰撞检测的实现方式,包括基于物理引擎的碰撞器、触发器、射线检测以及自定义碰撞检测等。

2.1 碰撞器和触发器碰撞器是指添加到物体上的组件,用于检测物体之间的碰撞。

它可以通过设置形状、大小以及是否触发碰撞事件等参数来实现特定的碰撞效果。

触发器则是一种特殊的碰撞器,它可以检测到碰撞但不会引发物理模拟的响应。

2.2 射线检测射线检测是一种基于物理引擎的碰撞检测方式,在游戏中常用于判断玩家瞄准的目标或者可交互物体。

通过发射一条射线并检测其是否与目标物体相交,可以实现准确的碰撞检测,并获取到碰撞点的位置等信息。

2.3 自定义碰撞检测除了使用物理引擎提供的碰撞检测方式外,Unity还支持自定义碰撞检测的实现。

通过编写脚本和算法,开发者可以实现更加高效和准确的碰撞检测算法,例如利用包围盒、网格碰撞检测等。

GPU性能评测指标

GPU性能评测指标

GPU性能评测指标GPU(图形处理器)是一种专门用于处理图形和图像的硬件设备。

在过去几十年中,随着游戏、计算机图形和数据科学等领域的迅速发展,GPU的重要性日益凸显。

为了评估和比较不同GPU的性能,人们提出了一系列的指标。

以下是一些常用的GPU性能评测指标。

1. 带宽(Bandwidth): 带宽是指GPU内存和GPU核心之间数据传输的速度。

它直接影响GPU的数据处理能力。

带宽通常以GB/s为单位,较高的带宽意味着GPU可以更快地从内存中读取数据并将结果写回内存。

3. 浮点运算性能(Floating Point Performance): 浮点运算性能是指GPU在执行浮点数运算时的能力。

浮点数运算是许多科学计算和图形处理任务中常见的操作之一、浮点运算性能通常以每秒浮点操作次数(FLOPS)或每秒浮点运算功耗比(FLOPS/W)来衡量。

4. 像素填充率(Pixel Fill Rate): 像素填充率表示GPU在单位时间内可以渲染或填充的像素数量。

它通常以像素/秒为单位来衡量,并受GPU架构、核心数、时钟频率等因素的影响。

较高的像素填充率意味着GPU可以更快地进行图形渲染。

5. 纹理采样率(Texture Sampling Rate): 纹理采样率指的是GPU 在单位时间内可以进行纹理采样的次数。

纹理采样是游戏和计算机图形中广泛使用的技术,用于给物体上的表面添加纹理和细节。

较高的纹理采样率可以提高图形质量和真实感。

6. 渲染时间(Rendering Time): 渲染时间是指GPU完成一帧图像的时间。

对于游戏和图形应用程序来说,较低的渲染时间意味着更流畅的动画和更高的帧率。

7. 功耗(Power Consumption): 功耗是指GPU在执行任务时消耗的电能。

随着人们对能源效率的关注不断增加,GPU的功耗越来越重要。

较低的功耗意味着更高的能源效率和更长的电池寿命(对于移动设备而言)。

除了上述指标外,还有一些其他的GPU性能评测指标如:多处理器数目、纹理单元数目、帧缓冲区大小、像素着色器和顶点着色器的数量等。

游戏引擎中的物理模拟与碰撞检测技术

游戏引擎中的物理模拟与碰撞检测技术

游戏引擎中的物理模拟与碰撞检测技术在现今的游戏开发中,物理模拟与碰撞检测技术是不可或缺的一环。

通过精确的物理模拟与碰撞检测,游戏能够更加真实地模拟物体之间的交互行为,提升游戏的逼真程度和玩家的沉浸感。

本文将介绍游戏引擎中常用的物理模拟与碰撞检测技术,并探讨其应用与优化方法。

一、物理模拟技术物理模拟是指通过对物体的力学特性进行计算和模拟,实现物体之间的交互行为。

在游戏引擎中,常用的物理模拟技术包括刚体运动模拟、软体动力学模拟和液体模拟等。

1. 刚体运动模拟刚体运动模拟主要用于模拟游戏中的实体物体,如角色、车辆、建筑等。

通过对刚体的质量、摩擦力、受力等进行计算,能够实现物体在游戏世界中的运动和碰撞行为。

在实现刚体运动模拟时,常用的方法包括欧拉方法、Verlet积分、Runge-Kutta方法等。

2. 软体动力学模拟软体动力学模拟主要用于模拟柔软物体,如布料、绳子等。

与刚体不同,柔软物体的模拟需要考虑其形变、弹性等特性。

在游戏引擎中,常用的软体动力学模拟方法包括有限元方法、弹性体模型等。

3. 液体模拟液体模拟用于模拟游戏中的液体流动行为,如水、烟雾等。

液体模拟相比刚体和软体模拟更为复杂,需要考虑流体的粘性、浮力、表面张力等因素。

在游戏引擎中,常用的液体模拟方法包括基于粒子系统的方法、网格方法等。

二、碰撞检测技术碰撞检测是指判断物体之间是否发生碰撞的技术。

在游戏引擎中,有效的碰撞检测可以保证物体之间的交互行为得到准确模拟,避免物体穿透、粘连等不符合物理规律的情况。

1. 离散碰撞检测离散碰撞检测基于离散的时间步长进行碰撞检测,即在每个时间步长内判断物体是否相交。

常见的离散碰撞检测方法包括包围盒碰撞检测、分离轴测试等。

包围盒碰撞检测通过将物体用包围盒进行近似表示,判断包围盒之间是否相交来判断物体是否相交。

分离轴测试则通过判断物体投影到不同轴向上的投影是否相交来判断物体是否相交。

2. 连续碰撞检测连续碰撞检测是指在物体的移动过程中,判断物体在运动过程中是否会相交。

碰撞检测技术及其常用方法

碰撞检测技术及其常用方法

碰撞检测技术及其常用方法1. 碰撞检测技术概述碰撞检测是计算机图形学、计算机游戏、机器人技术等领域中的一项重要技术,它用于判断物体之间是否发生碰撞,并能提供碰撞所发生的位置、时间和力等信息,是多数计算机图形和游戏中必备的技术。

目前,常用的碰撞检测方法包括离线碰撞检测方法、基于物理引擎的碰撞检测方法和基于光线追踪的碰撞检测方法。

2. 离线碰撞检测方法离线碰撞检测方法是在程序运行前将场景中的物体进行处理,生成一张碰撞检测网格,成为静态碰撞检测网格。

当游戏运行时,物体会被动态地放置在屏幕中,玩家操作游戏角色时,会根据角色的位置和方向,在静态碰撞检测网格中查找可能发生碰撞的物体。

离线碰撞检测方法的特点是计算量小,效率高,但是场景中物体必须事先预处理,难以进行动态载入,而且出现复杂的运动时容易出现错误。

3. 物理引擎碰撞检测方法物理引擎碰撞检测方法是通过模拟物体之间的运动、碰撞等物理过程来实现碰撞检测,需要较为精确的物理模型。

该方法常用于模拟现实世界的物理现象,如重力、摩擦力等,并且能较好地处理物体的动态运动,可适用于不同类型的物体。

物理引擎碰撞检测方法计算量大,需要进行迭代计算,消耗较多的计算资源和内存空间。

而且模型的精度和刚体属性的设置也会影响到碰撞检测的结果。

4. 光线-物体检测方法光线-物体检测方法是通过向场景中发射一条光线,并判断该光线是否与任何有碰撞物体相交来实现碰撞检测的方法。

该方法与离线碰撞检测方法相似,但不同的是它是动态的,光线不会被事先处理。

光线-物体检测方法的优势在于它的计算量相对较小,可以快速处理,并且可以精确计算物体的位置、姿态、速度等信息。

但是它也有弊端,精度不够高,容易误判,并且复杂的场景中可能需要发射多条光线,增加了计算量。

5. 基本碰撞检测方法基本碰撞检测方法,也称为粗略检测,是最基本的碰撞检测方法。

该方法通过检测物体的包围盒或球来判断物体之间是否发生碰撞。

该方法简单、易于实现,并且在许多应用中可满足要求。

虚拟场景中基于空间域的碰撞检测算法

虚拟场景中基于空间域的碰撞检测算法
自虚拟仿真兴起以来,碰撞检测一直是虚拟仿真领域的 研究重点之一,研究人员也为此做了许多有意义的工作,根据 其不同的研究对象,采用不同的研究方法,提出了多种有效的 碰撞检测算法[2]。目前,碰撞检测算法主要分为基于时间域 和空间域两大类。从时间域角度,可分为静态碰撞检测、离散 碰撞检测和连续碰撞检测三大类; 从空间域角度,可分为基于 实体空间的碰撞检测和基于 GPU 的碰撞检测。其中,基于实 体空间的碰撞检测又可分为两类: 空间剖分方法和层次包围 盒方法。本文从空间域的角度对各种碰撞检测算法进行了分 析研究。
1 基于空间分割的碰撞检测算法
基于空间分割的碰撞检测算法的基本思路是: 对整个虚 拟场景空间沿 X、Y、Z 轴方向进行分割,形成一系列空间网 格,只对同处于一个空间网格内的对象之间进行碰撞检测,并 采用层次分 割 的 方 式 提 高 算 法 的 效 率[2]。 对 于 空 间 中 的 静
态对象,只需对其空间分布进行一次预计算; 而对于运动对 象,则需要在每次进行碰撞检测时,对其空间分布进行更新计 算。由此,基于空间分割的碰撞检测算法适用于物体分布变 动不大的虚拟环境中。根据空间分割的方法可分为均匀分割 和非均匀分割。均匀分割是将虚拟场景中的空间划分为大小 一致的单元格,如八叉树; 非均匀分割则采用不同的划分规则 对空间进行非均匀的划分,如 BSP( Binary Space Partitioning) 树和 K-D( K-Dimensional) 树等。 1. 1 基于 BSP 树的碰撞检测算法
关键词: 空间域; 碰撞检测; 空间分割; 层次包围盒; GPU 中图分类号: TP391. 9 文献标志码: A
Collision detection algorithm research based on spatial domain in virtual scene

碰撞检测技术在虚拟现实中的应用研究

碰撞检测技术在虚拟现实中的应用研究

碰撞检测技术在虚拟现实中的应用研究随着计算机技术的飞速发展,虚拟现实(Virtual Reality,简称VR)正在被越来越多人所了解和关注。

VR技术可以让人们感受到身临其境的视听体验,很多人都认为它是未来最具发展潜力的技术之一。

然而,如何让虚拟现实更加真实、更加自然,仍然是一个挑战。

碰撞检测技术(Collision Detection)是VR中非常重要的一项技术,在VR中有着广泛的应用。

本文将探讨碰撞检测技术在虚拟现实中的应用研究,旨在帮助人们更好地了解VR技术的发展和应用。

一、碰撞检测技术简介碰撞检测技术是计算机图形学中的一种技术,可以检测物体之间是否发生碰撞,从而进行相应的计算和控制。

在现实生活中,人类的视觉和触觉感官可以轻松地分辨物体之间是否发生碰撞,但在虚拟现实中,这种感官要素是不存在的。

因此,必须依靠计算机来模拟和检测物体之间是否发生碰撞,从而保证虚拟现实的真实性和自然度。

碰撞检测技术主要包括两种方法:基于物理仿真的碰撞检测和基于几何形状的碰撞检测。

基于物理仿真的碰撞检测是指对物体之间的相互作用力和运动速度等物理参数进行模拟,从而判断物体之间是否会发生碰撞。

这种方法需要进行大量的计算,在效率上存在一定的问题。

基于几何形状的碰撞检测是指对物体的几何形状进行分析,包括面、边、点等要素,从而判断两个物体是否相交或包含。

这种方法可以有效地避免复杂的物理运动计算,提高碰撞检测的效率。

二、碰撞检测技术在虚拟现实中的应用碰撞检测技术在虚拟现实中有着广泛的应用,涉及到场景的建模、物体动态模拟、交互设计等方面。

下面将分别介绍一些具体的应用情况。

1. 场景建模在虚拟现实中,场景的建模是一个非常复杂的过程。

碰撞检测技术可以在建模过程中,检测模型的各个部分之间是否存在相交。

当检测到相交时,可以对模型进行相应的调整,从而使场景更加真实、自然。

例如,在城市建模中,使用碰撞检测技术可以确保建筑物之间的间隔合适,避免出现因建筑物相交而导致的画面混乱不堪的情况发生。

一种优化的机器人碰撞检测算法研究

一种优化的机器人碰撞检测算法研究

Micr ocomputer Applica tions V ol.27,No.5,2011设计与研究微型电脑应用2011年第27卷第5期文章编号:1007-757X(2011)05-0014-05一种优化的机器人碰撞检测算法研究刘燕,陈一民,李启明,赵东阳,周明珠摘要:提出了一种基于Vclip的优化碰撞检测算法,利用Vclip算法对AABB包围盒进行底层碰撞检测计算,用GPU的遮挡查询等特性进行三角形相交测试,以提高对虚拟物体进行碰撞检测的精确性与实时性。

算法已成功应用于课题组自行研制的6自由度小型工业机器人的仿真控制系统中,实验结果表明,其算法具有高效、精确、实时性高等特点,能使控制系统对工业机器人的控制更为流畅。

关键词:碰撞检测,AABB,Vclip,GPU,机器人仿真中图分类号:TP391.41文献标志码:A0引言碰撞检测是机器人仿真控制、计算机动画、计算几何、CAD/CAM等领域的重要研究课题。

目前,三维几何模型和虚拟场景规模的日益复杂,而碰撞在虚拟环境中又是不可避免的重要事件,它对物体在场景中的运动行为影响明显。

因此研究碰撞检测已变得极其重要。

Govindaraju等人[1]在初步检测阶段利用图形硬件等迅速排除大规模场景中明显不相交的物体,但当物体速度很快或三角形面片很多时,检测速度较慢。

文献[2]在片段处理器内对边和三角形进行求交测试,将结果写入深度缓存,最后用遮挡查询返回结果,避免了传统的基于图像的方法存在的精度问题,不足的是不能返回具体的碰撞深度。

在国内,北京理工大学机械与车辆工程学院的郑轶,提出了基于分层次剖分的快速碰撞检测方法[3],运用空间剖分和层次包容盒法减少检测的基本几何元素对数,利用冗余面片索引和模型缓存技术减少内存占用率和计算量,此方法比较适合用于大规模虚拟装配环境。

浙江大学范昭炜等人[4]利用图形硬件的高计算性、可编程性等来加速,实现了实时碰撞检测。

本文提出一种优化的机器人碰撞检测算法,在CPU和GPU分工合作的基础上,充分发挥了本算法的高效、精确及GPU的并行处理的快速性,从而保存证了控制系统的实时性,提高了系统碰撞检测速度。

复杂场景中快速碰撞检测算法及GPU加速

复杂场景中快速碰撞检测算法及GPU加速

上 ,利 用 GP 的并行计算 能力加速整 个检测过程 ,有 效地减 少了碰撞 检测 时 间。通过在 虚拟 驾驶 系统 当中的应 用 ,验证 U
了该 方 法在 大规 模 复 杂 场 景 中碰 撞 检 测 的 实 时性 和 精 确 性 。
关 键 词 :碰 撞 检 测 ;A 强 包 围盒 ;模 板 测 试 ; 深度 测试 ; 可 编程 图 形 单元 (-U) GP 中 图 法 分 类 号 :TP 9 文 献标 识 号 : 31 A 文 章 编 号 :1 0—0 4 (0 2 0 —8 70 0 072 2 1) 51 4—5
( llg fElcr ncIf r t n a d En ie rn Col eo e to i no mai n gn eig,He e iest ,Ba dn 7 0 2 e o b iUnv riy o ig0 1 0 ,Chn ) ia
Ab ta t To e s r h e l i e f r n ea d a c r c fc l so e e t n i h a g n o l a e c n ,a f s o l src : n u e t er a — me p ro ma c n c u a y o o l in d t c i t el r ea d c mp i t d s e e a t l — t i o n c c i
t e o - n e sc o jcs r uc l e v d a d t ep tn i ol i be t aeie t i r u h te A B b u dn o h n itre t be t a eq i yrmo e n h o e t l ls n o jcs r d n i e t o g h AB o n i b x n k a c io fd h g tsi t tg .T e ,a r v d c ls n d tci lo i m i p o o e i i b sd o rjci o t e d s n td e t g sr e y h n n i o e ol i ee t n a r h s r p sd whc s a e n poe t n t h e i ae n a mp io o g t h. o g

gpu内的哈希碰撞对比算法

gpu内的哈希碰撞对比算法

gpu内的哈希碰撞对比算法GPU内的哈希碰撞对比算法随着计算机技术的不断发展,图形处理器(GPU)的应用范围越来越广泛。

GPU具有高并行计算能力,适合处理图形数据、加速科学计算以及进行机器学习等任务。

在这些应用中,哈希碰撞对比算法是GPU内常用的一种算法。

本文将详细介绍GPU内的哈希碰撞对比算法的原理和应用。

一、哈希算法简介哈希算法是一种将任意长度的输入信息映射为固定长度的输出串的算法。

其主要特点是对输入信息进行了不可逆的压缩,并且相同的输入一定产生相同的输出,不同的输入尽量产生不同的输出,以减少碰撞的发生。

常见的哈希算法有MD5、SHA-1、SHA-256等。

二、哈希碰撞对比算法原理哈希碰撞对比算法用于判断两个哈希值是否相等,即判断两个输入是否相同。

在GPU内进行哈希碰撞对比算法时,可以利用GPU强大的并行计算能力,将多个输入同时处理,以提高计算效率。

具体的原理如下:1. 数据分块:将输入的数据分成若干个块,每个块的大小由实际应用需求决定。

分块的目的是将大规模的数据集划分成多个小块,以满足GPU的并行处理要求。

2. 并行哈希计算:对每个输入块分别进行哈希计算,利用GPU的并行计算能力,可以同时对多个输入块进行哈希计算。

这里的哈希计算可以使用已有的哈希算法实现,如MD5或SHA-1等。

3. 哈希值对比:将计算得到的哈希值进行对比,判断是否发生碰撞。

在GPU内进行哈希值对比时,可以通过并行比较的方式,快速地找出碰撞的结果。

如果发生碰撞,则表示两个输入有可能相同;如果没有碰撞,则表示两个输入不相同。

三、GPU内哈希碰撞对比算法的应用GPU内哈希碰撞对比算法具有高效、快速的特点,在诸如密码破解、数据去重、图像相似性比较等应用中得到了广泛的应用。

1. 密码破解:在密码学中,哈希函数常常用于对密码进行加密存储。

密码破解就是通过对比已有的哈希值和待破解密码计算出的哈希值,判断是否发生碰撞,从而获取原始密码。

电子游戏物理引擎开发中的碰撞检测算法分析

电子游戏物理引擎开发中的碰撞检测算法分析

电子游戏物理引擎开发中的碰撞检测算法分析引言随着电子游戏行业的快速发展,游戏画面的逼真程度也越来越高。

其中,物体之间的碰撞效果对游戏的真实感和可玩性起着至关重要的作用。

为了实现这一效果,电子游戏物理引擎中的碰撞检测算法扮演了重要角色。

本文将对电子游戏物理引擎开发中常用的碰撞检测算法进行分析。

一、离散碰撞检测离散碰撞检测是最常用的碰撞检测算法之一。

其原理是在两个对象的每一帧之间进行碰撞检测。

通过判断两个对象在每一帧的位置和形状是否有重叠,来确定两个对象是否碰撞。

离散碰撞检测算法的主要优点是简单、易于实现,适用于大部分的游戏场景。

虽然离散碰撞检测算法易于实现,但也存在一些缺点。

首先,由于碰撞检测的时间间隔较大,可能会导致高速物体之间的穿越现象,即物体在碰撞检测时未能被正确检测到。

其次,离散碰撞检测无法处理物体之间的连续碰撞,即两个对象在多帧之间有重叠。

这种情况下,离散碰撞检测算法可能会误判为物体未发生碰撞。

二、连续碰撞检测为了解决离散碰撞检测算法的缺陷,连续碰撞检测算法被引入到电子游戏物理引擎的开发中。

连续碰撞检测算法能够检测到物体在连续时间间隔内的碰撞情况,从而更准确地判断碰撞的瞬时发生点。

连续碰撞检测算法的实现方式多种多样,其中一种常见的方法是使用离散碰撞检测算法作为基础,结合时间插值来进行连续碰撞检测。

具体而言,该算法将每一帧的位置和形状信息进行插值,得到碰撞检测点的最佳估算值。

通过不断迭代和插值,最终得到精确的碰撞检测结果。

连续碰撞检测算法相比离散碰撞检测算法具有更高的精度和准确性,能够处理高速运动的物体之间的碰撞,并减少穿越现象的发生。

然而,连续碰撞检测算法较为复杂,需要更高的计算资源和时间成本。

三、基于网格的碰撞检测基于网格的碰撞检测算法是一种优化的碰撞检测方法。

该算法将物体的碰撞检测区域划分为网格,将每个物体划分到相应的网格中。

通过判断物体所在网格是否有其他物体存在,来确定是否发生碰撞。

GPU性能测试工具

GPU性能测试工具

GPU性能测试⼯具GPU 性能测试⼯具GPU 服务经常有某块显卡故障,有些问题只有在⾼负载时才会出现,因此需要对其进⾏压⼒测试。

在⽹上找到⼀个⽐较专业的专门针对 GPU 的性能测试⼯具,该⼯具会对机器上的所有 GPU 进⾏性能测试,并记录其在不同负载时的温度。

⼯具说明以下节选⾃My program forks one process for each GPU on the machine, one process for keeping track of the GPU temperatures if available (e.g. Fermi Teslas don't have temp. sensors), and one process for reporting the progress. The GPU processes each allocate 90% of the free GPU memory, initialize 2 random 2048*2048 matrices, and continuously perform efficient CUBLAS matrix-matrix multiplication routines on them and store the results across the allocated memory. Both floats and doubles are supported. Correctness of the calculations is checked by comparing results of new calculations against a previous one -- on the GPU. This way the GPUs are 100% busy all the time and CPUs idle. The number of erroneous calculations is brought back to the CPU and reported to the user along with the number of operations performed so far and the GPU temperatures.Real-time progress and summaries every ~10% are printed as shown below. Matrices processed are cumulative, whereas errors are for that summary. GPUs are separated by slashes. The program exits with a conclusion after it has been running for the number of seconds given as the last command line parameter. If you want to burn using doubles instead, give parameter "-d" before the burn duration. The example below was on a machine that had one working GPU and one faulty (too much factory overclocking and thus slightly unstable (you wouldn't have noticed it during gaming)):使⽤⽅法⼯具以容器形式运⾏,镜像已上传到镜像仓库。

gpu 检测报告

gpu 检测报告

GPU 检测报告引言在计算机视觉和机器学习领域,图形处理器(GPU)被广泛应用于加速计算任务。

然而,由于硬件故障或软件错误,GPU 可能会出现各种问题。

为了确保系统正常运行,我们需要进行 GPU 的定期检测和故障排除。

本文将介绍如何进行 GPU的检测,并提供一份基本的检测报告。

步骤一:检查 GPU 连接首先,我们需要确认 GPU 是否正确连接到计算机。

请按照以下步骤进行检查:1.关闭计算机并断开电源。

2.打开计算机主机,并找到 GPU 所在的插槽。

3.检查GPU 是否牢固地插入插槽中,并确保连接部分没有松动或脏污。

4.如果发现连接松动或脏污,可以使用气压罐清洁插槽和连接部分。

步骤二:检查 GPU 驱动程序接下来,我们需要确认 GPU 驱动程序是否正确安装和更新。

请按照以下步骤进行检查:1.在计算机桌面上,右键点击并选择“显示设置”。

2.在显示设置窗口中,选择“高级显示设置”。

3.在高级显示设置窗口中,选择“显示适配器属性”。

4.在显示适配器属性窗口中,点击“驱动程序”选项卡。

5.检查驱动程序日期和版本号是否与最新版本一致。

6.如果驱动程序需要更新,您可以访问 GPU 制造商的官方网站下载并安装最新的驱动程序。

步骤三:运行 GPU 压力测试为了测试 GPU 的性能和稳定性,我们可以运行一些 GPU 压力测试工具。

以下是一个简单的方法:1.下载并安装一个 GPU 压力测试工具,例如 FurMark。

2.启动 FurMark,并选择一个适当的分辨率和测试时间。

3.点击“开始测试”按钮,开始运行 GPU 压力测试。

4.观察 GPU 温度和风扇转速等数据,确保它们在合理范围内。

5.如果 GPU 温度过高或风扇转速异常,可能表示存在散热问题或硬件故障。

步骤四:检查 GPU 温度和风扇转速GPU 温度和风扇转速是评估 GPU 健康状况的重要指标。

可以使用各种硬件监控工具来监测这些指标。

以下是一个常用的方法:1.下载并安装一个硬件监控工具,例如 HWMonitor。

gpu测试基准

gpu测试基准

gpu测试基准GPU测试基准GPU(图形处理器)是一种专门用于处理图形和图像的硬件设备。

它在计算机图形学、游戏开发、深度学习等领域发挥着重要作用。

为了评估和比较不同GPU的性能,人们经常进行GPU测试基准。

本文将介绍GPU测试基准的概念、意义、常用的测试工具和测试方法。

一、GPU测试基准的概念和意义GPU测试基准是通过一系列测试项目和算法来衡量GPU性能的标准。

它可以帮助我们了解GPU的计算能力、图形处理能力和效能。

对于游戏玩家、图形设计师和科学计算领域的研究人员来说,选择合适的GPU是至关重要的。

通过进行GPU测试基准,我们可以对不同型号的GPU进行性能比较,选择最适合自己需求的GPU。

二、常用的GPU测试工具1. 3DMark:3DMark是一款专业的图形性能测试工具,被广泛用于评估游戏性能和计算机硬件性能。

它可以测试GPU的图形处理、物理模拟和计算性能。

2. FurMark:FurMark是一款用于测试GPU稳定性和温度的工具。

它通过渲染复杂的毛皮效果来对GPU进行压力测试,以评估GPU的稳定性和散热性能。

3. Unigine Heaven:Unigine Heaven是一款用于测试GPU渲染性能的工具。

它通过渲染大规模的室外场景,测试GPU的渲染速度和图形质量。

4. GFXBench:GFXBench是一款专业的移动设备图形性能测试工具。

它可以测试手机、平板电脑和其他移动设备的GPU性能。

三、GPU测试方法1. GPU性能测试:通过运行一系列图形处理任务,如渲染复杂的3D 场景、处理大规模的纹理图像等,来测试GPU的图形处理能力。

测试结果通常包括帧率、渲染时间和图形质量等指标。

2. GPU计算性能测试:通过运行一系列计算密集型的任务,如矩阵乘法、向量加法等,来测试GPU的计算能力。

测试结果通常包括计算速度和计算精度等指标。

3. GPU稳定性测试:通过运行长时间的图形处理任务,如连续的渲染、物理模拟等,来测试GPU的稳定性。

gpu内的哈希碰撞对比算法 -回复

gpu内的哈希碰撞对比算法 -回复

gpu内的哈希碰撞对比算法-回复什么是GPU内的哈希碰撞对比算法?GPU内的哈希碰撞对比算法是一种使用图形处理器(GPU)进行哈希碰撞检测和对比的算法。

哈希碰撞指的是在哈希函数中出现不同的输入映射到相同的输出的情况。

哈希函数是一种将不同长度的数据映射为固定长度输出的函数。

当多个不同的输入映射到相同的哈希值时,就会发生哈希碰撞。

哈希碰撞对比算法的目标是在尽可能短的时间内检测和解决这些哈希碰撞。

GPU内的哈希碰撞对比算法的背景和意义:在现代计算机系统中,图形处理器GPU已经成为一个强大的并行计算设备。

由于其并行计算能力,GPU被广泛用于高性能计算和机器学习领域。

然而,GPU仅仅依靠其高速的并行计算能力并不足以解决哈希碰撞对比的问题,因为传统的哈希碰撞对比算法通常是串行的计算过程。

为了充分利用GPU的并行计算能力,一些研究人员提出了一种GPU内的哈希碰撞对比算法。

该算法通过将哈希碰撞对比的任务划分为多个并行计算任务,并利用GPU的并行计算能力同时处理多个任务,以加速哈希碰撞检测和对比的过程。

通过使用GPU内的哈希碰撞对比算法,可以极大地提高对大规模数据集进行哈希碰撞检测和对比的效率。

GPU内的哈希碰撞对比算法的实现方法:实现GPU内的哈希碰撞对比算法需要以下几个主要步骤。

1. 数据划分:将待检测的哈希集合划分为多个子集,以便并行处理。

这可以通过哈希函数的输出值来实现,例如,将哈希值的低位分给一个子集,而将高位分给另一个子集。

2. 并行计算:使用GPU进行并行计算,对每个子集中的哈希值进行哈希碰撞检测和对比。

这可以利用GPU的并行计算架构,同时处理多个哈希值。

3. 结果合并:将每个子集中的哈希碰撞结果进行合并,得到最终的哈希碰撞对比结果。

这可以在CPU上进行串行计算,或者利用GPU的一些特殊算法和数据结构来加速合并过程。

4. 改进优化:根据具体的应用需求,进一步优化GPU内的哈希碰撞对比算法,如利用硬件特性、调整分组策略、改进哈希函数等。

高性能计算中的离散元方法优化研究

高性能计算中的离散元方法优化研究

高性能计算中的离散元方法优化研究离散元方法(Discrete Element Method,DEM)是一种模拟颗粒系统运动和相互作用的数值计算方法。

它广泛应用于多领域的工程和科学研究中,如土力学、岩土工程、岩石力学、物料流动分析等。

在实际应用中,为了提高计算效率和准确性,需要对离散元方法进行优化研究。

本文将重点探讨高性能计算中的离散元方法优化问题,并讨论一些已有的优化方法。

离散元方法的计算量巨大,主要表现在计算颗粒间相互作用力、刚体运动以及碰撞过程等方面。

如何有效地减少计算量,提高计算效率成为离散元方法优化研究的重要问题之一。

首先,我们可以通过空间划分和并行计算来优化离散元方法。

空间划分是将整个计算区域划分为若干子区域,每个子区域内的颗粒之间进行计算,从而降低计算复杂性。

并行计算可以将计算任务分发到不同的处理器上进行并行计算,进一步提高计算速度。

例如,使用网格划分和多个处理器,可以将离散元计算任务分解为多个独立的子任务,每个子任务对应一个处理器进行计算,然后合并各个子任务的结果,从而加快计算速度。

其次,离散元方法中的碰撞检测也是一个关键问题。

碰撞检测是指判断两个颗粒是否发生碰撞,并计算碰撞时的相互作用力。

传统的碰撞检测算法是通过遍历所有颗粒对进行判断,这种算法的时间复杂度为O(n^2),计算量非常大。

为了提高碰撞检测的效率,可以使用一些高效的碰撞检测算法,如基于空间分割的碰撞检测算法(如包围盒层次算法、网格算法等)或基于图形处理器(GPU)的碰撞检测算法等。

此外,颗粒系统的刚体运动也需要进行优化。

离散元方法中的颗粒通常可以看作刚体,它们的运动受到外力和内力的作用,需要进行准确的模拟。

为了提高刚体运动的模拟效率,可以利用空间分割和并行计算的思想,将刚体的运动分解为独立的子任务进行计算。

除了以上方法,还有一些其他优化策略可以用于离散元方法,例如使用近似计算或优化算法来减少计算量,选择合适的时间步长以平衡计算精度和速度等。

碰撞检测算法的研究现状

碰撞检测算法的研究现状

1.3国内外研究现状1.3.1碰撞检测算法的国外研究现状【王海玲. 三维游戏技术的研究与实现[D]. 哈尔滨工程大学, 2009】【范昭炜.实时碰撞检测技术研究[D] .浙江大学, 2003】起源于20世纪70年代的碰撞检测问题,研究至今已有40年的历史,现如今有一些比较成熟的碰撞检测技术。

Dobkin(1985)、Agarwal(1991)、Chaxelle(1989)等在静态碰撞检测技术上做了早期研究。

静态碰撞检测算法是指当场景中物体在整个时间轴t上都不发生变化时,用来检测在这个静止状态中各物体之间是否发生碰撞的算法。

这类算法要求较高的精度,由于是静止状态,因此没有实时性的要求,它广泛应用于计算几何中。

Lin(1998)、Jimenez(2001)对离散碰撞检测算法进行了研究,离散碰撞检测算法在每一时间离散点上通过类似于静态碰撞检测算法的方法来实现,可以迎合多数应用对实时性的需求。

Hubbard(1995)、Dingliana(2000,2001)、O’Sullivan(1999)为了改善离散碰撞检测算法中存在的刺穿现象和遗漏碰撞的现象,提出了自适应步长和可中断的碰撞检测技术。

Cameron(1990)、Canny(1986)和Redon(2001,2002)为了解决在离散碰撞检测算法中存在的刺穿现象和遗漏发生碰撞的现象,对连续碰撞检测算法进行了研究。

连续碰撞检测算法精确,但涉及到四维结构空间和时空问题,算法计算速度慢,在大规模场景中不能满足实时性。

Lin-Canny(1991,1993)提出了“最邻近特征算法”,基于特征的碰撞检测算法基本上都源自于该算法。

Hubbard(1995)、Gottschalk(1996)、Klosowski(1998)、Zachmann(1998)在面向多边形表示模型的多边形集合中做了广泛研究。

Gilbert(1988,1990)、Johnson和Keerthi提出了基于单纯形的碰撞检测算法,即GJK 算法。

在GPU上基于物体空间的碰撞检测

在GPU上基于物体空间的碰撞检测

在GPU上基于物体空间的碰撞检测
喻家龙;姜太平;汪光阳
【期刊名称】《计算机技术与发展》
【年(卷),期】2009(019)009
【摘要】碰撞检测是模拟现实世界关键要素,也是计算机图形学研究的核心内容.提出了一种利用GPU的SIMD、遮挡查询和浮点纹理功能等特性进行碰撞检测的新方法.算法同时遍历一对基于传统的CPU方法的包围体层次树,在遍历的过程中进行所有必要的运算,包括最后的三角形相交测试都是在GPU的顶点着色器和像素着色器中进行的.测试结果显示达到预期的效果.不同于其它的基于GPU的方法,本算法的所有计算都在物体空间中进行,而且对多边形模型的形状和拓扑结构不作任何要求.
【总页数】4页(P83-86)
【作者】喻家龙;姜太平;汪光阳
【作者单位】安徽工业大学,计算机学院,安徽,马鞍山,243002;安徽工业大学,计算机学院,安徽,马鞍山,243002;安徽工业大学,计算机学院,安徽,马鞍山,243002
【正文语种】中文
【中图分类】TP312
【相关文献】
1.在GPU上基于物体空间的碰撞检测 [J], 喻家龙;姜太平;汪光阳
2.基于GPU流计算模式的非凸体碰撞检测算法的研究 [J], 张雪飞;刘书桂;刘新凯
3.基于GPU加速的多物体碰撞检测方法 [J], 王磊;王毅刚
4.一种基于GPU的碰撞检测算法 [J], 苏诺;季桂树;邓拓
5.基于改进包围盒树和GPU的水稻群体叶片间快速碰撞检测 [J], 张兴邦;胡滨;汤亮;伍艳莲;姜海燕
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.引言
碰撞检测用于确定场景内的两个或多个物体间在某一时间刻是否发生接触或穿透,是 计算机计算机图形学、虚拟现实、计算机游戏以及 CAD/CAM 等领域非常重要问题之一。 随着应用中虚拟场景的规模越来越大、三维几何模型越来越复杂,以及人们对交互的实时 性、场景的真实性要求也越来越高,对碰撞检测算法的性能和效率也提出了更高的要求。 同时,由于计算机软硬件技术的进步,尤其是可编程 GPU(Graphic Process Units)技术的快 速发展,为实时碰撞检测问题的解决提供了一种全新的方法。 经过最近几年的发展, 可编程 GPU 已经具备了高超的计算能力, 且其性能的提高速度 大大快于 CPU。因此,很多研究者开始探索将 GPU 用于图形处理以外的通用计算应用, 如碰撞检测、光线跟踪、视频编解码、金融学和生物计算等诸多领域。 目前大部分碰撞检测算法都基于物体空间设计,主要采用层次包围盒法和空间分割法 等技术,如 RAPID 、QuickCD 、SWIFT++ 等碰撞检测系统,以及魏迎梅等人[4] 的 FDH 算法等等。这些算法包括大量几何计算,且都在 CPU 上完成,在大规模场景应用 方面实时性不高。 Shinya 等人于 1991 年最先提出利用 GPU 辅助碰撞检测的图像空间碰撞检测算法
-3-

密集的任务特别适合在 GPU 上面并行完成,所以我们将这些计算转移到 GPU 上执行。而 其对层次树的遍历这些流控制比较复杂、分支处理较多而计算较少的工作则由 CPU 完成。 这样,算法通过使用计算机上的 CPU 来做串联工作,而 GPU 负责并行运算,即“使用合适 的工具做合适的事情”的 CPU+GPU 异构运算思想, 将任务在 CPU 和 GPU 之间进行合理的 分配,来让程序得到更高的运算性能。算法整体流程图如图 1 所示。

。该类算法由于能减轻 CPU 的计算负担,且具有较稳定的性能,随后得到很大的发
展,如范昭炜等人 提出的基于图像的快速碰撞检测算法等待。 上述图像空间的碰撞检测算法通过将三维几何体投影到二维图像平面,同时辅以深度 测试,判断物体是否发生碰撞,由于图形硬件固有的离散性导致算法存在一定误差。随着 可编程 GPU 的发展,近几年出现了一类基于 GPU 流计算的碰撞检测算法,算法利用图形 硬件的可编程性, 将碰撞检测计算映射到 GPU 的顶点和片段绘制程序, 通过实时绘制和遮 挡查询获得碰撞检测结果。范昭伟等人 通过将两物体间的碰撞检测转化为在 GPU 上完 成的一组直线与三角形的求交, 获得较定的算法实时性。 Alexander 等人 将物体空 间方法映射到 GPU 绘制程序,获得比在 CPU 上更好的效率。 我们结合物体空间层次优化法和 GPU 并行计算架构,提出一种基于 GPGPU(GPU 通 用计算)的实时碰撞检测算法。算法将任意两物体间的碰撞检测转化为两组三角形之间的 相交计算,以有效利用 GPU 的并行计算功能。同时引入层次包围盒技术优化算法,首先遍 历一组三角形的层次包围盒树,进行包围盒与另一组三角形之间的相交计算。采用广度优
-1-

先遍历, 位于树中同一层的包围盒与三角形集的相交计算通过一次 GPU 内核调用完成。 在 下一层遍历中,对发生相交的包围盒的子结点与发生相交的三角形继续进行相交计算,以 快速剔除明显不相交的三角形, 提高算法效率。 最后进行潜在相交三角形之间的相交计算, 获取碰撞检测结果。所有相交计算均被映射的 GPU 多线程并行执行。我们基于 GPU 通用 计算平台 CUDA 对算法进行实现。
3.GPGPU 碰撞检测算法
设计基于 GPGPU 的碰撞检测算法,关键是要将物体间的相交计算并行化,以有效利 用 GPU 的并行计算架构。 针对网格表示的物体, 我们将两物体间的碰撞检测转化为检查一 个物体的所有三角形与另一物体的所有三角形是否发生相交,以实现碰撞检测计算的并行 化。如果直接进行物体间三角形对的相交计算,三角形数分别为 N和 N 的两物体,相交 计算次数为 N×N ,如果 N和 N 达到 ,相交计算次数将上亿次,即使采用 GPU 并行计 算也远不能达到实时效果。 如果利用 GPU 进行两物体包围盒层次树的包围盒之间的相交计 算, 则不能充分发挥 GPU 的高度并行计算优点, 对明显不相交三角形的剔除效率不能达到 最高。为此,我们引入单边层次树优化法,首先进行一物体的包围盒与另一物体的三角形 之间的相交计算,快速剔除明显不相交的三角形,然后进行潜在相交三角形之间的相交计 算,相交计算复杂度降为 O(N)。这样,既能使计算适度地并行化,又不会导致过量相交计 算,达到了提高算法效率的目的。 我们的算法包括三个主要阶段:一,层次树的建立与三角形数据到纹理的绑定;二, 遍历层次树,进行包围盒与三角形的相交计算,快速剔除明显不相交的三角形;三,进行 潜在相交三角形之间的相交计算,获取碰撞检测结果。
2.CUDA 编程模型
CUDA(Compute Unified Device Architecture)即统一设备架构,是 NVIDIA 公司推出 的 GPU 通用计算平台,提供一种类 C 语言的编程方式来使用 GPU 的计算资源,而不必通 过复杂的图形 API。CUDA 将 GPU 看作可以并行执行非常多个线程的计算设备,它作为 CPU 的协处理器运作,在 CPU 上运行的应用程序中,多次但在不同数据上独立执行的密 集计算,可以写入 GPU 内核程序(kernel),由 GPU 多线程并行执行;同时,可以通过调 用 CUDA API, 在主存和 GPU 显存之间传递数据。 执行 kernel 的一批线程组成块 (block) , 它们通过高速共享内存共享数据,并同步地执行以协调访存。执行相同 kernel,具有相同 维数和大小的线程块组合成网格(grid),这样,单个 kernel 调用中启动的线程总数就可以变 得很大。
-2-

相交计算过程中记录三角形是否发生相交信息的 char 型 GPU 内存数组 A2,初始化为 0。 设 O2 的三角形集为 R,遍历集合 R,通过 CUDA API,将三角形的编号放入数组 A1,同 时将编号为 n(对物体的三角形编号时从 0 开始, 连续编号)的三角形的顶点数据映射到 tex1 的(0,n),(1,n)和(2,n)位置。

基于 GPGPU 的实时碰撞检测算法
肖德贵 ,石其
湖南大学计算机与通信学院,长沙(410082)
E-mail:shiqihnu@
摘 要:结合 GPU 的 SIMD 并行架构和强大的浮点计算能力,提出一种基于 GPGPU 的实 时碰撞检测算法。算法将两物体间的碰撞检测转化为两组三角形之间的相交计算,以有效 利用 GPU 的并行架构。同时引入包围盒层次树优化法,通过包围盒与三角形的相交计算, 快速剔除明显不相交的三角形,将相交计算复杂度从 O(N2)降低至 O(N)。利用 GPU 通用 计算平台 CUDA 将所有相交计算映射到 GPU 多线程并行执行。实验证明,利用层次树优 化技术和 GPU 的并行计算, 能大大提高碰撞检测的效率, 使算法具有较稳定的实时性和较 高精确性。 关键词:碰撞检测;层次树;多线程;GPGPU
3.1 层次树的建立与三角形数据到纹理的映射
算法预处理阶段,对于物体 O和 O ,首先建立 O的 AABB 层次树 T。采用 AABB 树 的理由是其构建简单、描述结点所需的数据量小、与三角形相交计算容易以及更新快捷。 我们建立一棵平衡 AABB 树,让树的叶结点包含多个三角形,降低树的高度,以更好地适 合并行化的相交计算。 由于显示芯片有纹理缓存, 在 GPU 中我们利用纹理来存储三角形数 据,提高数据访问速度。建立一个 N×3(N 为 O2 的三角形数目)的 float3 型二维纹理 tex1。 但这里的相交计算过程中需要建立两个 GPU 数组,一个用来保存潜在相交三角形编号的 unsigned int 型 GPU 内存数组 A1,利用 O2 所有三角形编号初始化 A1;另一个用来在每次
3.2 遍历 AABB 层次树
基于 CPU 的物体空间方法通常采用深度优先同时遍历两个物体的层次树, 递归地进行 结点间的相交计算,所有结点对的相交计算均顺序执行,该遍历方法并不适合并行化的相 交计算。我们采用广度优先遍历 T,每遍历完一层,将该层的 AABB 定义数据(中心向量 center 和半长向量 extent)存入一个 float3 型二维 GPU 数组;然后调用包围盒与三角形相交 的 kernel 程序,进行该层 AABB 与编号在 A1 中的三角形之间的相交计算,同时三角形与 包围盒的相交情况分别记录到两个 GPU 数组中;接着调用 CUDA API 将相交计算结果读 入主存,重构 GPU 数组 A1,剔除 A1 中不发生相交的三角形编号,继续下一层遍历;在下 一层遍历中,只对父结点发生相交的 AABB 与编号仍在 A1 中的三角形进行相交计算,这 样,逐步剔除两物体中明显不相交的三角形。如果相交结点是叶结点,则用该结点代替子 结点继续下一层遍历,直到将进行相交计算的 AABB 全为叶结点,则停止遍历,读取这些 叶结点中的三角形,与 A1 中的三角形进行相交计算,获得碰撞检测结果。具体的遍历方法 和步骤如下: 步骤 1、建立顺序队列 Q,用来保存在遍历过程中将在同一次 GPU 内核调用中与三角 形集进行相交计算的 AABB,起初将 T 的根结点 AABB 放入队列 Q。 步骤 2、创建一个和 A1 一样大小的 char 型 GPU 数组 A2,初始化为 0。创建一个宽为 2,高为 H(H 为 Q 的长度)的 float3 型的二维 GPU 数组 B1 和一个大小为 H 的 char 型一维 GPU 数组 B2,B2 初始化为 0。将 Q 中未标记的 AABB 逐个出列(设第 1 个出列的 AABB 序号为 0,第 j 个出列的 AABB 序号为 j-1),读取各 AABB 的 center 向量和 extent 向量, 分别存储到 B1[0][i]和 B1[1][i](i 为该 AABB 的出列序号), 然后将该 AABB 标记后重新入列。 步骤 3、调用 AABB 与三角形相交计算 kernel,A1、A2、B1 和 B2 作为参数。根据计算 结果, 若编号为 A1[i]的三角形发生相交, 则将 A2[i]置为 1; 若定义数据位于 B1[0][j]和 B1[1][j] 的 AABB 发生相交,则将 B2[j]置为 1。 步骤 4、kernel 执行完后,读取数组 A1、A2 和 B2。若 A2[i]为 0,则将 A1[i]和 A2[i]从 数组中剔除。如果 A1 为空,则返回不相交。 步骤 5、将 Q 中已标记的 AABB 逐个出列,根据 AABB 的出列号 i,检查数组 B2[i] 是否为 1,判断这些 AABB 是否发生相交。若 AABB 发生相交且为内部结点,则将其子结 点放入 Q; 若为发生相交的叶结点, 则将其去标记后重新入列。 如果如果 Q 中全为叶结点, 则转入步骤 6;否则,释放数组 A2,B1,B2 的内存,转到步骤 2,继续下一层遍历。 步骤 6、 设 Q 中所有叶结点包含的三角形数为 M, 创建一个 M×3 的 float4 型的二维纹 理 tex2 和大小为 M 的 unsigned int 型 GPU 数组 C1 及大小为 M 的 char 型 GPU 数组 C2。读 取 Q 中所有叶结点所包含的三角形,将这些三角形的编号放入 C1,将编号为 C1[i]的三角 形的顶点绑定到 tex2 的(0,i),(1,i)和(2,i)位置,将 C2 初始化为 0。调用三角形相交计算 kernel 程序,进行两物体潜在相交的三角形集之间的相交计算,获得碰撞检测结果。 上述步骤中,步骤 3 执行包围盒与三角形的相交计算,步骤 6 执行三角形与三角形之 间的相交计算,这样一些在大量不同的数据上面执行相同操作的、流控制简单而数据处理
相关文档
最新文档