物理引擎和图形引擎介绍

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1物理引擎和图形引擎介绍2015-21引言[1][2]物理引擎是一个仿真物理系统的软件,它使虚拟世界中的物体运动符合真实世界的物理定律,对虚拟现实中的物体进行运动学、动力学、其它物理学仿真等。在虚拟现实系统开发中,开发人员可以使用物理引擎与渲染引擎相结合的方法,不但可以缩短开发周期,而且可以产生良好的效果。随着虚拟现实技术的发展,物理引擎已广泛应用在游戏、动画、电影、工程仿真和军事模拟等诸多领域。在以往的游戏中,例如一位士兵往一个油桶旁边扔一个手雷,手雷爆炸,引起了油桶的爆炸。不过这个过程显得相当死板,不管是把手雷丢在油桶的左边还是右边,油桶都只会按照设计者预先设计好的脚本方式爆炸,不会有区别。加入物理引擎后,它完全突破了以往按预定脚本执行的方式,在游戏中的物体都遵守物理定律来运行,这样手雷扔在油桶的左边或右边都会产生不同的爆炸效果,石块会朝不同的角度飞溅起来,烟雾也会慢慢冒起来,使游戏更加富有真实感。通常物理引擎可以分成两类:高精度物理引擎和实时物理引擎。高精度物理引擎要求计算出精度很高的物理对象,通常用于工程仿真或用电脑制作电影中的动画。在视频游戏中,物理引擎通过简化其运算复杂度,降低其精度来满足游戏中对实时性的需求,以增加动画的真实感。物理引擎使用对象属性(速度、加速度、动量、冲量、碰撞、力、力矩、阻尼、扭矩或弹性等)来模拟刚体的运动、旋转和碰撞等行为,这不仅可以得到更加真实的结果,对于开发人员来说也比编写行为脚本要更加容易掌握。好的物理引擎允许模拟复杂的机械装置,像球形关节、轮子、气缸或者铰链等。有些还支持非刚性体的物理属性,如软体、流体等。物理引擎只关心动力学微分方程的求解,而为了获得逼真的仿真环境,还需要图形引擎的配合。输入场景信息(包括物体的形状、物理参数和位置等),通过物理引擎计算出场景中所有物体的形状和位置,再由图形引擎渲染它们,最终将它们显示在计算机上。目前常用的物理引擎有Havok、PhysX、Bullet、ODE、Newton、Vortex和TOKAMAK等,常用的图形引擎有OGRE、OSG、OpenGVS和Vtree等。本文将介绍物理引擎Havok、PhysX、Bullet、ODE和图形引擎OGRE、OSG的背景、功能、用法及其在工程仿真领域中的应用,以及物理引擎和图形引擎联合应用的方法。22物理引擎2.1Havok[1][3]Havok公司成立于1998年,总部位于爱尔兰首都都柏林。该公司在2000年游戏开发者大会上发布了Havok1.0,在2003年的GDC上发布了2.0版本,在2007年3月发布4.5版本,最新版本为5.5。引擎基于C/C++语言而成。2007年9月,Intel宣布收购Havok之后不久,Intel宣布Havok引擎开放源代码并允许游戏开发人员免费使用。自从Havok引擎发布以来,它已经被应用到数百个游戏之中。最早,使用Havok引擎的游戏大多数都是第一人称射击类别,但随着游戏开发的复杂度与规模越来越大,其他类型的游戏也想要有更加真实的物理表现,有越来越多的其他类型的游戏采用Havok引擎。应用Havok的著名游戏有:《暗黑破坏神III》、《星际争霸II》、《半条命2》、《刺客信条:兄弟会》、《马克思·佩恩2》、《凯恩与林奇:死人》、《凯恩与林奇2:伏天》、《荣誉勋章:太平洋突袭》、《斩除妖魔》、《帝国时代III》、《极度恐慌》、《细胞分裂:混沌法则》、《光环2》、《光环3》、《大乱斗SmashBrothersX》以及《上古卷轴IV:湮没》等。使用Havok的软件有3DMark06、3DMarkVantage、3dsMax、AdobeAtmosphere和AdobeShockwave等。Havok具有以下主要功能:●碰撞检测(包括连续的物理体)●MOPP技术(大碰撞网格的简洁表达)●动力学和约束的求解●车辆动力学●数据序列和布景工具支持●内置诊断反馈虚拟调试器Havok注重在仿真和游戏中对现实世界物理行为的模拟,提供了大量的应用程序编程接口(API),用于刚体建模、碰撞检测和实时动力学计算等。利用该引擎,可快速建立虚拟三维物理世界,以及物理世界中的物理实体,并向物理实体添加物理属性,完成仿真系统的实时计算,并检测计算结果。“帧”是仿真系统中的单幅画面,两个连续帧之间的时间间隔称为帧时间。Havok物理引擎的工作流程就是在上一帧渲染完毕之后,以及下一帧渲染开始之前的帧时间内,将外部设备的输入信号转化为物理世界中具有物理属性的实体的受力,根据实体间的约束信息,进行碰撞检测以及活动实体的受力分析,求出加速度和角加速度等,最后对时间进行积分求出实体在下一帧中的位置和姿态。求解完毕之后交付图形引擎渲染,并进入下一个计算过程。对于交互式仿真系统,物理引擎还要有接收外部设备的输入信号并转化为实体力和力矩的功能。Havok物理引擎的处理流程如下图所示。3在其官方网站:可以免费下载有关资源,包括HavokSDK、样例、技术文档,以及支持Maya、3dsMax和AvidXSI等3D建模软件的格式转换工具等。2.2PhysX[1][3][4][9]PhysX物理运算引擎由五名年轻的技术人员开发,他们在2002年成立了Ageia公司,于2005年发布了NovodeX,后改名为PhysX。2006年Ageia公司发布了第一张PhysXPPU(物理加速卡),称为PhysX100Series,设计为搭载128MBGDDR3显存,采用PCI接口。生产PhysX100Series的包括华硕和BFG,其中华硕的PhysX物理加速卡搭载了256MBGDDR3显存。后来,Ageia公司又开发了第二代PhysX物理加速卡,称为PhysX200Series,与第一代产品最大的不同在于采用了PCI-E插槽,增强了数据交换能力。2008年Ageia公司被NVIDIA(英伟达)收购后,PhysX物理加速卡停止了开发,但NVIDIA在原基础上推出了NVIDIAPhysX物理加速,并将PhysX物理加速功能移植到NVIDIAGPU中。借助CUDA架构,NVIDIA重新编写了PhysX物理加速程序,将PhysX物理加速引擎从AgeiaPPU移植到了NVIDIAGPU上,利用GPU强大的浮点计算能力和并行处理能力,加快了PhysX物理引擎的计算速度。使用PhysX的著名游戏有:《虚幻竞技场3》、《幽灵行动2:尖峰战士》、《好战者(warmonger)》、《细胞因子》、《赌命战士》、《战争机器》、《Beowulf》、《CityofVillainsMedalOfHonor:Airborne》、《Bladestorm:TheHundredYears'War》等140多款经典游戏。PhysX是一个模拟刚体动力学的物理引擎,支持速度、加速度、动量、冲量、碰撞等物理概念。PhysX的开发库支持跨平台,多线程,高速碰撞检测等特性,专门对汽车的物理模拟做了优化。可以实现软、固质体动力学、通用碰撞检测、有限元分析、流体动力学、关节铰链模拟、毛发模拟、布料模拟、自然模拟等。4PhysX具有以下主要功能:●大量平行物理体的体系结构●高速GDDR3存储接口●通用的连续碰撞检测●物理的敏捷粒子技术●复杂的对象物理系统●可升级的地形逼真度●动力学游戏构架利用GPU超强的并行处理能力,PhysX使物理加速处理能力呈指数倍增长,将游戏、工程模拟等提升至一个全新的水平,呈现丰富多彩、身临其境的环境。其特色如下:●爆炸引起的烟尘和随之产生的碎片●复杂、连贯的几何学计算使人物的动作和互动更加逼真●布纹的编织和撕裂效果非常自然●运动物体周围烟雾翻腾所有的物理模拟都在场景(Scene)中进行,一个虚拟环境允许同时存在多个场景,场景各自进行模拟运算,通常之间的对象没有联系。场景中可包含角色、关节等多个对象,角色(Actor)为场景中参与运算具有形状、实体的对象,形状(CollisionShape)用于描述角色的外形,提供六种基本形状:盒子(Box)、球体(Sphere)、胶囊(Capsule)、凸状网格(Conv2exMesh)、三角网格(TriangleMesh)和平面(Plane),用多个基本形状可以组成较复杂物体。实体(Body)用于描述角色的物理参数,比如密度、质量、重心、惯性张量等。两个角色可以通过关节(Joint)连接,常用的关节有固定关节(FixedJoint)、旋转关节(RevoluteJoint)、球状关节(SphericalJoint)和棱柱关节等多种形式,可根据需要选择关节使物体的连接符合真实情景。此外场景中还可创建流体、布料、粒子等其他可描述现实世界的对象。PhysX引擎提供了上述多种关节来实现多个角色的连接,其中,固定关节可以模拟铆接、焊接、螺钉固定等连接方式;旋转关节模拟铰接连接方式,可使两个角色围绕一条轴线发生转动,如合页、门柱;球状关节用来模拟肩关节、球铰等连接方式,可使两个角色围绕一个点发生自由转动;棱柱关节模拟滑动连接方式,可使两个角色沿一条轴线运动,如吸振器;此外还有圆柱关节、滑轮关节、点线关节、点面关节、六自由度关节等多种连接方式,开发人员可根据需要,将单个角色利用关节进行组合,实现人物、机器、汽车等复杂物体的模型创建。场景中的角色对象分为静态角色(StaticActor)、动态角色(DynamicActor)和运动角色(KinematicActor)。静态角色对象主要用于碰撞检测,必须有形状属性而无实体属性,静态角色一旦被创建,就不能对它进行任何操作。动态角色是符合物理学定律的普通刚体,比如移动的汽车、可推动的箱子等。运动角色是一种特殊的动态角色,不接受外力作用,只能由用户操作从一个位置移动到另一个位置。在场景中运动角色会与动态角色发生碰撞,而不会5与静态角色发生作用。在其官方网站:可以免费下载PhysX的有关资源。2.3Bullet[1][5][6]Bullet是一个开源的跨平台的物理模拟计算引擎,可免费用于包括PLAYSTATION3,XBox360,WiiPC,Linux,MacOSXandiPhone平台的商业开发,而且Bullet也整合到了Maya和Blender3D中。大部分的物理引擎都是通过CPU完成物理模拟计算,目前仅有NVIDIAPhysX可以调用GPU完成物理模拟计算且将其实用化。GPU有着CPU无法比拟的并行计算和浮点计算能力,而复杂的物理模拟计算(例如流体模拟和柔性物体模拟)却十分依赖并行计算能力和浮点计算能力。在与AMD合作后,BulletPhysics物理引擎可以透过OpenCL或者Direct3D,使用GPU完成物理模拟计算,这也是AMD开放物理计划的内容之一。用Bullet开发的游戏有《模拟城市(EA)》、《汽车总动员2》、《侠盗猎车4》等。使用Bullet物理模拟引擎制作的电影有《2012》、《全民超人》、《大侦探福尔摩斯》和《闪电狗》等。支持Bullet物理引擎的设计软件有Blender3D、Cienma4D、3DsMax和Maya等。Bullet具有以下主要功能:●各种形状的物体(刚体、软体)●离散的刚体碰撞检测●铰链、点对点约束和扭曲锥形约束●6自由度约束Bullet主要组件的结构如下:Bullet中,根据物体的特性将它们分三种不同的物体类型:1)动态的刚体拥有大小为正的质量,每个仿真帧都会更新自己的在世界中的变换。2)不能移动,但可接受碰撞的刚体称为静态刚体,质量设为0。3)在运动学上面的刚体,质量为0。使用运动学的刚体可以制作动画,但是这种刚体6能够接受碰撞,只能对碰撞物体有作用,碰撞物体对运动学的刚体没有任何影响。Bullet中刚体之间的位置和角度约束关系是使用关节进行实现,每种类型的关节约束在底层是使用动力学特性的约束方程,Bullet还提供对不同约束的solver(求解器)。Bullet在碰撞检测方面包括射线和凸扫测试在内的离散和连续碰

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功