基于OSG的虚拟现实碰撞检测及GPU并行加速
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河北大学
硕士学位论文
基于OSG的虚拟现实碰撞检测及GPU并行加速
姓名:刘京
申请学位级别:硕士
专业:检测技术与自动化装置
指导教师:王洪瑞
2011-05
摘 要
碰撞问题是机器人、动画仿真、虚拟现实、计算几何、CAD/CAM等领域的关键问题之一,而实时性和精确性是衡量一个碰撞检测算法是否优越的重要标准。
尽管国内外已经对碰撞检测问题做了许多有意义的工作,但是随着计算机软硬件及网络等技术的日益成熟,尤其是GPU并行计算技术的快速发展,不同规模程度场景下实时而又精确的碰撞检测问题逐步成为当前研究的热点。
针对大规模复杂场景的碰撞检测问题,本文首先从场景渲染入手,在详细了解OSG 渲染引擎的场景组织方式、渲染流程之后,利用新一代的三维图形渲染系统的功能特性,搭建一个高效的基于场景图的河北大学新校区校园漫游系统。
进而在场景交互方面,通过深入研究基于图像的碰撞检测算法,提出了实时性更好的基于向指定平面投影、模板测试和深度测试的改进型图像空间碰撞检测算法,实现了虚拟校园漫游系统中对漫游角色模型与场景模型之间的快速碰撞检测。
同时引入GPU并行计算,调高了碰撞检测的效率。
对于更加注重于碰撞检测精度的虚拟手术仿真系统来说,本文在基于距离的碰撞检测算法基础之上,通过扫描线确定模型间潜在碰撞区域内的刨分顶点、自适应面刨分、构造刨分三角形、判断刨分点到刨分三角形之间的距离实现了骨锯模型和头盖骨模型间的精确碰撞检测。
该算法不仅能获得碰撞发生位置,还把碰撞区域局限在几个刨分顶点构成的多个刨分三角形之内,同时还继续引入GPU并行计算技术,优化了整个碰撞检测算法,缩短了计算周期。
关键词:虚拟现实碰撞检测 OSG GPU并行计算
Abstract
Although 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)作为一种新兴的强大人机交互技术,一直是信息领域研究开发和应用的热点方向之一。
由于它具有强大的三维表现能力和人机交互能力,不仅可以实时的模拟各种真实场景,还可以在通过人机交互设备的辅助下,与虚拟场景中的模型对象进行交互操作,具有高度的沉浸感、真实感,使人产生一种身临其境的感觉。
近年来,随着科学技术水平的不断发展,虚拟现实技术已经广泛应用于军事、生物医学、机械、教育、建筑和文化等多个领域,并发挥着越来越重要的作用。
我国对虚拟现实技术的正式研究起步却很晚,对于沉浸式多交互虚拟环境系统研究较少,在虚拟现实系统的研究中交互技术还不够成熟。
本课题将综合运用多项技术,拟在分布式虚拟现实领域有所突破和发展,此项研究也充分体现了国家中长期科技发展规划纲要中“五、前沿技术”的“2.信息技术”中“(8)虚拟现实技术”的科技发展方向,具有重要的意义。
一个大规模的虚拟场景可能包含成千上万个模型,而随着场景复杂度不断提高每个模型又需要由成千上万个三角面组成,如何有效的对这些物体进行组织和管理以满足实时绘制的要求,是一个非常重要的问题。
另外,为了更加真实的反应虚拟环境的效果,需要增加光照、阴影、特效等功能,并且在虚拟交互过程中,为了达到实时的交互效果同时保证模型渲染的逼真度,细节层次等技术必须应用其中,实时图形处理对于系统资源的消耗量非常大,因而如何借助计算机和图形技术的发展,完成图形性能优化就显得尤为重要。
为了方便虚拟场景的开发同时对图形性能进行优化,近年来基于场景图理论的场景渲染成为了复杂场景的虚拟现实系统渲染的研究热点。
场景图是一种简单有效的组织图形图像的数据结构,是特殊的有向非循环图,它保存了场景中模型信息及其相互关系[1]。
场景图是一个K叉树状结构,根节点代表整个虚拟场景,树中的每个节点可以有任意多个子节点,每个节点存储场景集成的数据结构。
它通常包含三类基本节点:组节点、几何体节点和变换节点。
其中组节点是对所有节点实现分组管理;几何体节点是对物体的基本性质进行描述;变换节点主要用于三维几何
河北大学工学硕士学位论文
变换,包括平移、旋转等。
虽然,场景图技术在工业界得到了广泛的应用,但至今尚未统一。
每一种较成功的场景图都有其适用的范围和局限性,很难找到适于各种应用的场景图系统。
与传统的信息系统相比,虚拟现实是一个新型的、多维化的、人机和谐的信息系统。
在这种系统内,交互的实时性控制带来的真实感是人们所能感受到的最突出的特点之一,也是提高在虚拟环境中“身临其境”的沉浸感以及实现人机和谐的关键。
因此,高效而快速的进行物体间的碰撞检测,在提高虚拟环境的真实性、增强虚拟环境的沉浸感以及加强实时交互操作等方面都起着至关重要的作用。
随着虚拟现实应用领域的日益扩大及应用内容的复杂化,对碰撞检测算法提出了更高的要求。
严格的实时性和真实性要求在向研究者们提出巨大挑战的同时,也使大型复杂场景下的快速碰撞检测成为该领域的研究热点。
国内外许多专家和学者已经针对碰撞检测问题开展了很多有重要价值的研究工作,其研究可分为基于物体空间的碰撞检测和基于图像空间的碰撞检测。
基于物体空间的碰撞检测已有了较为充分的研究并建立了相应的算法,但这些算法的效率主要的取决于物体模型的构造方式和场景的复杂程度。
近年来,随着图形处理器(GPU)的快速发展,基于图像空间的碰撞检测逐步成为研究的热点。
GPU的高性能并行计算和可编程功能,为图形处理以外的数字图像处理和通用并行计算提供了良好的运行平台,也为基于图像空间的碰撞检测方法提供了广阔的发展空间。
本课题的研究将利用新一代的三维图形渲染系统的功能特性,搭建一个高效的基于场景图的复杂虚拟现实渲染系统,完成场景显示的真实性和实时性。
进而在场景交互方面,摆脱图形硬件信息存储的限制,提高碰撞检测的速度和精度,从而适用于大规模复杂场景的快速实时碰撞检测。
本课题是把虚拟现实技术应用于实际的一个有益尝试,具有很高的学术价值。
同时,本课题的研究成果可以直接应用于模拟驾驶训练、运动训练、虚拟旅游、虚拟城市建设等众多领域,应用前景十分广阔。
1.1.2课题来源
本课题得到了科技部国际科技合作项目《载人六自由度并联机器人及虚拟环境的交互控制研究》(2008DFR10530)的资助和支持。
本课题还得到了河北省科技厅科技支撑项目《分布式虚拟场景的实时绘制与一致性
第1章 绪 论
控制研究》(08243531D)的资助和支持。
1.2国内外的研究现状
1.2.1场景渲染
随着网络技术、图形技术和硬件设备的迅速发展,虚拟场景的渲染技术也不断进步,在OpenGL的基础上出现了多种类型的渲染引擎和渲染平台。
OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,最底层的图形开发API,可以被认为是图形硬件的一种软件接口,其设计目的主要是为了作为一种流水线型、独立于硬件的接口,以它为基础开发的应用程序可以应用在不同的硬件平台之上。
但是在处理复杂问题的时候非常繁琐,它对于每个几何体都必须逐点详细说明所有的数据,同时不具备面向对象的特征,不便于大场景的开发和管理。
近年来,随着计算机图形学的不断发展,基于场景图的渲染技术越来越得到研究人员的重视。
目前常用的基于场景图的渲染引擎主要包括: OSG、Java3D、Virtools、OGRE、VRML等,它们被广泛的应用于各个领域中。
如刘小兵、卜淮原、郑恩昌利用VRML、3DMAX、CAD等几种不同的可视化三维建模软件相结合实现了某军事基地网上虚拟场景系统[2];北京工商大学的魏薇和陈谊利用MultiGen建模工具和VRML实现了以北京工商大学良乡校区为例的虚拟校园漫游系统[3];刘晓明、李勤、王晓哲等人利用Virtools 三维开发工具,设计实现了某采油厂厂区虚拟漫游系统,该系统虚拟场景逼真,漫游功能齐全,而且以Web形式发布,用户可以在浏览器上进行多视点、多场景的浏览,让用户有身临其境的感觉,宣传效果极佳[4];王乐、陈定方、李勋祥等人利用VIRTOOLS开发了分布式虚拟驾驶环境。
基于VirTool的分布式虚拟现实技术在教育、娱乐、科研等方面都会有很好的应用前景[5];上海交通大学的刘晓波、张琴舜、张和林等人以大亚湾核电站为原型,使用建模工具MutiGen和开发工具Vega,开发虚拟核电站实时漫游系统[6];于海凤、邢桂芬、张凯基于MutiGen和Vega开发了三维战场视景[7];张翔和罗炳伟利用三维仿真建模软件Multigen Creator结合VEGA技术实现了虚拟城市场景的设计[8];刘华伟和黄有群利用JA V A3D实现了与消防相关的建筑场景快速生成与显示[9];张和杰和覃方君利用Cult 3D工具结合JA V A虚拟了某型导航装备场景[10];杨波和徐丽梅通过在Visual C++.Net平台下对图形渲染引擎OGRE引擎地开发实现了火箭装备场景的实时漫游[11];高篙和陈先桥利用图形渲染引擎OGRE和动力学引擎ODE相结合的方法
河北大学工学硕士学位论文
设计了汽车模拟驾驶系统,其中OGRE主要完成虚拟场景的建立[12]。
1.2.2碰撞检测
近年来,研究人员根据不同的研究对象,采用了不同的研究方法,也由此提出多种多样的碰撞检测算法。
这些算法总体上可以归为两大类:基于物体空间和基于图像空间的碰撞检测算法。
目前使用最多的就是基于物体空间的碰撞检测算法,目前较多的研究集中将层次包围盒算法与空间分解算法相结合以提高算法的执行效率。
国内外较为先进的研究算法包括:Juan J提出的基于四面体和包围盒的碰撞检测算法[34];Ehsan A提出的旋转物体碰撞检测算法[35];国防科技大学的熊岳山提出的将八叉树与AABB包围盒结合的算法[36];北京航空航天大学的丑武圣提出的基于粒子的碰撞检测算法[37];浙江大学的黄通浪等利用运动插值原理和回退技术的碰撞检测算法[38];吉林大学王天柱等提出的基于“组件”的碰撞检测算法[39]等。
综合基于物体空间的碰撞检测算法,他们的执行效率极大地取决于物体模型的复杂程度和物体所处场景的大小,同时由于构造十分复杂,巨大的计算量往往使得系统CPU负担过重、执行效率不高,尤其是在复杂的大规模复杂场景中要实现实时交互则显得尤为困难。
近年来,随着图形硬件计算性能的迅速增长,使基于图象空间的碰撞检测算法进入了一个新的快速发展阶段:Shinya M和Rossignac J提出了基于图形硬件的干涉碰撞检测算法[40-41];MyszKowski K等则针对处理复杂多面体的情况,提出了利用模板缓存检测的改进算法[42];Baciu G利用模板缓存和深度缓存实现的RECODE 算法中则是扩大了基于图像空间碰撞检测算法的适用范围[43];Hoff K和Kim Y通过合理分配CPU和GPU的功能,结合了图像空间和图形空间的碰撞检测算法,提高了其自身算法的执行效率和检测精度[44-45];范昭伟等人在Baciu的基础上对其算法进行了改进,加入了对空间任意多面体的凸分解,并由层次树组织各个凸多面体[46];王季提出了深度纹理的概念,建立了一个深度与距离的映射,摆脱了模板操作的束缚,加快了碰撞检测速度[47];另外谢凯等也将图像空间与包围盒相联系,提高了检测的精度[48]。
总之,GPU的快速发展正在改变着通用计算仅能由CPU完成的传统观念。
GPU的高浮点运算、可编程特性和并行处理流程,使其成为对快速碰撞检测算法的有力工具,将为大规模复杂场景的物体相交和碰撞算法提供了广阔的发展空间,成为碰撞检测算法
第1章 绪 论
发展的必然趋势。
本项目通过对基于图像空间碰撞检测算法的深入研究,利用GPU的编程特性,拟设计轮廓化投影和模板、深度缓存相结合的算法,完成大规模虚拟漫游场景的快速碰撞检测。
该算法将降低检测的复杂度,改进基于图像算法的执行效率,是将GPU应用于碰撞检测领域的有益尝试。
1.3主要研究内容
本课题拟借助飞速发展的图形硬件技术,实现了大规模复杂场景静态渲染,保证了其动态交互的实时性和真实性。
主要的研究内容包括:
(1)建立基于OSG的大规模复杂场景渲染平台,在保证渲染的真实感的前提下,通过优化场景图结构,选择优化方法,提高实时渲染效率。
(2)利用GPU的高浮点运算、可编程特性,设计基于图像的碰撞检测算法,以降低碰撞检测表面复杂度,提高碰撞检测速度。
(3)将课题研究对象延伸至精细环境,在快速碰撞检测算法的基础上,设计基于距离的自适应面刨分精确碰撞检测方法,在保证检测的实时性的前提下,提高检测精度。
1.4论文的组织结构
本论文全文共分六章:
第一章为绪论,介绍了本论文的研究意义,相关技术的国内外研究现状,以及本文的主要研究内容,最后给出了论文的内容安排;
第二章详细介绍了本论文所用到的一些基础理论,总结了前人相关领域的研究成果;
第三章研究了基于OSG的复杂场景建立、渲染和优化方法,详细阐述了虚拟场景的实现过程;
第四章提出了一种基于图像空间的快速碰撞检测算法,简化了模型表面的复杂度,提高了检测效率;同时详细阐述了利用GPU的并行计算技术进行算法优化的方法和具体过程,进行了仿真试验;
第五章在前一章提出的算法基础上,扩展了方法的应用领域,并利用GPU加速技术,提出基于距离的自适应面刨分精确碰撞检测算法,详细分析了方法的实现过程,进行了仿真试验;
第六章全面总结本文研究成果以及存在的不足,指出后续研究工作的方向。
第2章 技术基础
2.1 场景图
2.1.1场景图概念
场景图又称视景图,是一种简单有效的组织和存储图形图象信息的数据结构,它保存着场景中所有物体及其相互关系,它采用一种自顶向下、分层的树状结构来组织空间数据集,提升渲染的效率[49]。
从结构上看,场景图是一种层次化的有向无环图 (Directed Acyclic Graph,DAG),它属于k叉树状结构,由一系列的节点和有向边构成。
根节点位于最顶部代表整个场景;枝干和叶子位于底部,树中的每一个节点可以有任意多的子节点,每个节点表示虚拟世界中的一部分;有向边将各个节点连接起来,定义了节点与节点之间的隶属关系。
场景图的组织结构如图2-1所示[50]。
图 2-1 场景图的组织结构
场景图通常包含了三类最基本的节点,它们分别是:组节点、几何体节点以及变换节点。
组节点的功能是对所有节点进行分组管理;几何体节点用于描述物体的基本性质;变换节点用于进行三维几何变换。
场景图中每一个节点都是一个数据的存储,每个节点都需要存储描述自身属性的信息,这些信息包括[51]:
z场景组织信息,如父节点或子节点的句柄。
z支持绘制流程的信息,如节点在当前的帧中是否被绘制的标识,节点包围体等。
z描述自身各类特征信息,如位置坐标、变换矩阵以及颜色等。
对于组节点,其描述的信息不仅包括节点本身,还包括其子节点在内的子场景图的特征。
2.1.2场景图特性
场景图形除了具有提供底层渲染所需的几何信息和状态管理功能以外,还具有如下的特性和功能[52-53]:
空间结构:场景图所采用的树状数据存储结构很直观,符合设计者理解中的空间事物排布和组织结构;
场景拣选:使用本地CPU的剔除技术来减少系统总体负担,包括隐藏面剔除和遮挡剔除等,其原理是在最终渲染场景时忽略那些不会显示的几何体或部分几何体;
细节层次(LOD):利用包围盒来计算观察者与物体的相对距离,实时的将场景中进入观察距离的物体载入,而超出这一距离后,将物体从内存中移除,从而使得系统可以更有效的渲染处于不同细节层次上的物体;
透明:场景图提供了首先渲染不透明的物体再渲染透明的物体,而且透明物体还按照深度排序的顺序渲染,从而做到了透明或半透明物体的有效渲染;
状态改动最少化:场景图会按状态对物体进行排序以最小化状态改动;
文件I/O:场景图可以高效地读写磁盘上的3D数据集,是一个高效的文件格式转换工具;
更多高性能函数:除了底层API函数外,场景图形库还提供了很多其它丰富的高效能的功能函数。
2.1.3场景图优势
在计算机图形学中,使用最为广泛、组织效率最高的场景组织方式就是场景图技术,它的优越性主要从以下四个方面体现出来:(1)操作简单化,场景图通过树状结构管理各个模型,当需要对其中一个模型进行型操作时,只需操作其子节点即可;(2)杰出的优化性能,场景图可以对不同层级的模型进行优化,并同时使用软硬件结合的方式进行优化;(3)排序渲染状态,场景图通过对渲染状态进行排序,进一步优化渲染效果;(4)可重用对象实例,场景图允许制作一个模型对象的副本。
2.1.4现有场景渲染技术
2.1.4.1 VRML
VRML(Virtual Reality Modeling Language,虚拟现实建模语言)是一种在虚构的三维世界进行场景建模的语言,它的基本特征主要包括可交互性、支持多媒体、可移植性、结构编程语言、可重组性、易扩展性[54-62]。
它还包括了相机、纹理、材质、渲染状态、渲染属性、贴图方式等多种计算机图形学概念VRML作为目前因特网上三维网站制作的主流语言,已经广泛的应用于生产、生活、军事、经济等各个领域。
2.1.4.2VIRTOOLS
Virtools是一套具有丰富交互行为模块的实时三维虚拟环境编辑软件,它集开发、生成和发布于一体,其特点是方便易用,应用领域广。
其中开发模块主要包括应用程序和开发工具包;生成模块主要包括行为引擎和渲染引擎;发布模块包括可执行文件生成器和网络播放器[63-64]。
利用Virtools进行开发不需要考虑网络协议,而可以把主要精力放在平台的实现和管理方面,使得普通用户都可方便的开发出良好的分布式虚拟场景,甚至是在线游戏。
所以基于Virtools的渲染技术已广泛应用于教育、娱乐、科研等多个领域。
但是,此开发工具只适用于网络漫游等与硬件环境交互性不强的系统,同时,开封装良好的开发工具本身也限制了可完成的功能。
2.1.4.3VEGA
Vega是MultiGen-Paradigm公司开发的主要用于实时视景仿真、虚拟现实等领域的世界软件架构,它巧妙地将易用的工具和高级的仿真功能结合在一起,从而可使方便的创建、编辑和运行较为复杂的仿真,以满足不同领域的需求[65-67]。
Vega还包括完整的C 语言开发库,使用了面向对象的技术,为软件人员提供最大限度的软件控制和灵活性。
Vega支持多种数据调入,允许多种不同数据格式综合显示,还提供高效的CAD数据转换Vega及其相关模块支持UNIX和NT平台。
而这些虚拟现实开发平台对硬件要求相当高,多运行于专业的图形工作站,同时支撑软件成本相当昂贵,无法大面积推广[65-71]。
2.1.4.4JAVED3D
基于Java3D的三维场景生成工具的研究与实现以Java2为平台,而三维场景生成部分用到了Java3D API,它是Java语言在三维场景领域的扩展,并以OpenGL语言为基
础,采用场景图来管理整个场景的组织结构。
目前用于开发三维图形软件的3D API(OpenGL、Direct3 D)都是基于摄像机模型思想,即通过调整摄像机的参数来控制场景中的显示对象,而Java3D则提出了一种新的基于视平台的视模型的技术实现方案,即通过改变视平台的位置、方向来浏览整个虚拟场景。
但是,Java3D的文件执行效率低,且互动性欠佳[72-77]。
2.1.4.5 OGRE
OGRE(Object-Oriented Graphics Rendering Engine)即面向对象的图形渲染引擎,它是用C++开发的面向对象且使用灵活的3D引擎。
它的出现使三维虚拟环境开发者能够更加快速、直接地进行应用程序和游戏的开发。
OGRE渲染引擎是基于OpenGL设计的,并包含了丰富的功能实现函数,几乎攘括了所有建立虚拟场景所需的功能函数。
它由许多模块组成,各个模块之间相互联系,共同完成渲染功能。
而且它可在Visual C++.Net平台下编译,具有很高的效率特性。
2.2碰撞检测算法
碰撞问题是机器人、动画仿真、虚拟现实、计算几何、CAD/CAM等领域不可回避的问题之一。
随着计算机软硬件及网络等技术的日益成熟,尤其是计算机动画仿真、虚拟现实等技术的快速发展,人们迫切希望能对现实世界进行真实模拟,而这其中亟需的关键技术之一就是碰撞检测技术[90-96]。
实时性和精确性是衡量一个碰撞检测算法是否优越的重要标准。
其中实时性是指对于虚拟环境中不同模型间碰撞检测的检测速度;而精确性则是指碰撞检测的精度。
随着计算机技术的不断发展,如何快速而又精确地进行碰撞检测逐步成为一个研究的难点和热点问题。
碰撞检测问题可以细分为两大部分:碰撞检测和碰撞响应。
其中碰撞检测用于确定两个模型是否有碰撞发生;碰撞响应则是根据物理规律模拟模型发生碰撞后的形变问题。
碰撞检测算法大体上可分为两大类:基于物体空间的碰撞检测算法和基于图象空间的碰撞检测算法。
它们的主要区别就在于模型间的相交测试判定原理不同。
基于物体空间的碰撞检测算法主要通过模型的几何信息进行相交测试,而基于图像空间的碰撞检测算法则是利用模型的二维投影进行相交判断。
其中研究人员已经对基于物体空间的碰撞检测算法做了很多的研究工作,提出了多种典型算法,而基于图象空间的碰撞检测算法是较为新的一类算法,它有效的利用了图形硬件的加速绘制功能来提高碰撞检测的效。