物理引擎


物理引擎

文章插图
物理引擎【物理引擎】物理引擎通过为刚性物体赋予真实的物理属性的方式来计算运动、旋转和碰撞反映 。为每个游戏使用物理引擎并不是完全必要的—简单的“牛顿”物理(比如加速和减速)也可以在一定程度上通过编程或编写脚本来实现 。然而,当游戏需要比较複杂的物体碰撞、滚动、滑动或者弹跳的时候(比如赛车类游戏或者保龄球游戏),通过编程的方法就比较困难了 。
基本介绍中文名:物理引擎
作用:计算运动、旋转和碰撞反映
性质:模拟刚体行为
套用:支持OpenGL架构
方法:编程或编写脚本来实现
支持功能:Vehicle Dynamics
简介物理引擎使用对象属性(动量、扭矩或者弹性)来模拟刚体行为,这不仅可以得到更加真实的结果,对于开发人员来说也比编写行为脚本要更加容易掌握 。好的物理引擎允许有複杂的机械装置,像球形关节、轮子、气缸或者铰链 。有些也支持非刚性体的物理属性,比如流体 。物理引擎可以从另外的厂商购买,而一些游戏开发系统具备完整的物理引擎 。但是要注意,虽然有的系统在其特性列表中说他们有物理引擎,但其实是一些简单的加速和碰撞检测属性而已 。由来游戏中并没有所说的这种“物理效果”,还不是一样可以让人能看到该运动的东西还是在动啊,并非就是很死板地一堆放在那里 。要说清楚这个问题,其实也很简单,在以往的游戏中,比如打坏一个油桶,物理引擎就会按照游戏设计者预先设计好的脚本来爆炸,这就是为什幺在以往的3D游戏中,那些物体只会按照原定计画做规定动作的原因 。自从游戏中加入了物理引擎后就不一样了,物理引擎完全突破了以往按预定脚本执行的方式,而是要求在3D游戏中的那些物体都要遵行物理参数来运行 。这样的好处就是如果你的显示卡和处理器足够强大,物理引擎就能模拟真实世界中各种物体运动的规律来运动 。不过所谓的“物理引擎”并不是指那些实实在在的物理效果,物理引擎和此前理解的3D游戏引擎类似,是给游戏开发者的一个平台,允许游戏开发人员只用几行代码就能在游戏中加入烟雾等效果,非常方便 。举个简单的例子,在几年前还没有物理引擎的时候,在那种FPS游戏中,一位士兵往一个油桶旁边扔一个手雷,手雷爆炸,引起了油桶的爆炸 。不过这个过程显得相当死板,不管是把手雷丢在油桶的左边还是右边,油桶都只会按照预先设计的样子爆炸,不会有区别 。如果有了物理引擎,手雷扔在油桶的左边或右边都会产生不同的爆炸效果,石块会朝不同的角度飞溅起来,烟雾也会慢慢冒起来……通过物理引擎,实现这些物体之间相互影响的效果是相当简单的 。这是物理计算最初给的印象,虽然这样的设计有点意思,但老是看这些爆炸场景看多以后,但总让人感觉物理引擎的效果也就仅局限于那些爆炸后石头飞起来的场景,感觉有点单一 。套用当NVIDIA宣布正式收购Ageia及该公司的PhysX物理软硬体组件后,所有人都在期待,期待着NVIDIA会推出新的有关物理运算的东西出来 。果不其然,如今当NVIDIA发布Forceware 177.79驱动后,意味着GeForce 8/9和GT200系列的GPU都支持PhysX引擎 。这是因为NVIDIA将PhysX引擎集成到CUDA架构的物理运算中 。这样,显示卡就能自动进行物理加速运算 。当然,PhysX在游戏上的运用仅仅是物理引擎众多运用的一方面,在整个CUDA通用运算领域上,都会有物理引擎的身影,比如计算天体间在相互引力的作用下,各自的运动轨迹等 。此次在GDC09上展示的Havok物理引擎包括了三个场景,分别为爆破、布料和AI计算 。演示平台使用了i7 965至尊版处理器搭配HD4870X2显示卡,运行效果比较流畅 。不过唯一让人感到稍稍惊讶的是,Havok物理引擎并非是专门针对ATI显示卡而设计,它能够支持OpenCL架构(布料演示DEMO就是基于OpenCL架构开发的),也就是说NVIDIA的GeForce 8以上级别显示卡也很有可能能够支持Havok物理引擎 。常见1. Havok:老牌的君王,支持功能如下:· Collision Detection - including Continuous Physics?· MOPP? Technology - for compact representation of large collision meshes· Dynamics and Constraint Solving· Vehicle Dynamics· Data Serialization and Art Tool Support· Visual Debugger for in-game diagnostic feedback有不少游戏和软体都选择了他做物理引擎,比如HALO3、失落星球、HL2、 细胞分裂、指环王Online等等 。etc如今Havok被Intel收购了,以后可能对Intel的CPU会有特别的最佳化 。Havok对PS2、XBOX、GameCube、PC多种游戏平台都有支持 。也是世界顶级游戏公司Valve(Half Life的公司),Pandemci,Remedy等的合作伙伴 。这个物理引擎曾经支持过各种类型的游戏,包括racing game,first-persion shooter,MMOGs,adventure games,puzzle games等等 。Hovak还曾经负责电影Matrix的部分效果处理 。成功案例:Crash Nitro Kart、Half-Life 2、Max Payne 2、Medal of Honor、F.E.A.R.、Lord of the Rings: Middle Earth Online 。2. NovodeX --- AGEIA PhysX新兴的王者,支持功能如下:· Massively Parallel Physics Architecture· High-speed GDDR3 Memory Interface· AGEIA Universal Continuous Collision Detection· AGEIA Physical Smart Particle Technology· AGEIA Complex Object Physics System· AGEIA Scalable Terrain Fidelity· AGEIA Dynamic Gaming Framework因为特有的硬体卡(物理加速卡-PPU)支持,所以能处理大量的物理运算,其他几款暂时没得比 。Unreal3,GameBryo,Reality Engine等多款商业引擎和游戏都使用了他 。NovodeX是由开发PPU的公司AGEIA进行维护,因此对于将来PPU硬体的支持,无疑NovodeX是最有优势的 。NovodeX是一个模拟刚体动力学的物理引擎,支持速度,加速度,动量,冲量,碰撞等等的物理概念 。NovodeX的开发库支持跨平台,多执行绪,高速碰撞检测等特性,专门对汽车物理的模拟做了最佳化 。案例: 根据官方文档,已经有超过60个游戏工作室、公司和研究机构採用了NovodeX的技术 。3. Bullet开源届的霸主,支持功能如下:· Multi Platform support· Supports various shape types:· Discrete Collision Detection for Rigid Body Simulation· Single Queries:· Sweep and Prune Broadphase· Documentation and Support· Auto generation of MSVC project files,comes with Jam build system· Bullet Collision Detection works with Bullet Dynamics,but there is also a sample integration with Open Dynamics Engine.· Framework with 2 different Constraint Solvers· Hinge,Point to Point Constraint,Twist Cone Constraint (ragdolls)· Automatic de-activation (sleeping)· Generic 6 Degree of Freedom Constraint,Motors,Limits· LCP Warm starting of contact points· Collada 1.4 Physics Import using FCollada and COLLADA-DOM· Convex Decomposition Code这款物理引擎的历史也比较久了,但似乎国内知道的ODE的人更多一些,这款物理引擎被Nvidia的开发人员所关注(Nvidia前些时候说过,要用GPU来实现物理加速,可能会最先在这款物理引擎上实现 。)(Tip: 这款引擎是开源的,有兴趣的朋友,可以看看 。)4. ODE开源的名角,支持功能如下:· Rigid bodies with arbitrary mass distribution.· Joint types: ball-and-socket,hinge,slider (prismatic),hinge-2,fixed,angular motor,linear motor,universal.· Collision primitives: sphere,box,cylinder,capsule,plane,ray,and triangular mesh,convex.· Collision spaces: Quad tree,hash space,and simple.· Simulation method: The equations of motion are derived from a Lagrange multiplier velocity based model due to Trinkle/Stewart and Anitescu/Potra. · A first order integrator is being used. It's fast,but not accurate enough for quantitative engineering yet. Higher order integrators will come later.· Choice of time stepping methods: either the standard ``big matrix'' method or the newer iterative QuickStep method can be used.· Contact and friction model: This is based on the Dantzig LCP solver described by Baraff,although ODE implements a faster approximation to the Coloumb friction model.· Has a native C interface (even though ODE is mostly written in C++).· Has a C++ interface built on top of the C one.· Many unit tests,and more being written all the time.· Platform specific optimizations.· Other stuff I forgot to mention...嘿嘿,这个就不用做过多的介绍了,国内使用和学习这个的人比较多了 。只是如今看到他的网页上有这幺一句话:“Russell Smith is the primary author of ODE.”不知道是谁又伤害了这位仁兄 。(Tip: Google一下,中文文章一大把 。)5. TOKAMAK如今想通了,决定开源了 。支持功能如下:· Joints· Friction· Stacking· Collision Detection· Rigid Particle· Breakage这个物理引擎出现也比较早了,作者是日本人,其实日本的游戏也很发达的,能把技术共享出来,难得啊 。(日文的技术网站还是很多的 。)6. Newton更多的专注于生活中的实例模拟 。7. Simple Physics Engine国产精品,支持功能如下:· 使用独创的快速而稳定的Tri-Mesh碰撞检测算法,使载入模型数据异常简单 。SPE的碰撞检测系统从一开始就是针对三角形格线(Tri-Mesh)而设计,所以用户可以方便地使用mesh档案创建任意形状的刚体,SPE内部将自动处理所有工作 。同时,SPE支持球和胶囊两种基本几何形状,方便用户创建粒子特效和ragdoll系统 。此外,SPE支持一定条件下的连续碰撞检测,可以正确地处理大多数情况下的高速运动物体 。· 碰撞信息分析 。SPE对碰撞检测系统产生的数据进行智慧型化分析,为碰撞反应计算提供更可靠更正确的原始数据,极大地提高了系统的稳定性 。· 稳定的碰撞与接触解决系统 。从1.5版开始,SPE採用全新的解决算法,更正确地计算摩擦与反弹,而且更稳定 。· SPE提供一种稳定的基本Joint功能,支持最大距离、弹性係数以及破坏力等参数的配置,用户可以使用它方便地创建各种其他类型的Joint 。· 实时刚体破碎 。(Beta) 。SPE提供“形状操作”的功能,任何模型均可被一组平面或另一个模型切成小块,SPE生成的模型中包括用于区分原始表面与切面的属性信息,方便用户更合理地渲染出新的形状 。如今,可破坏刚体的API已经开放 。· 高并行计算 。SPE已经完成了多执行绪化以充分利用多核心CPU的性能. 90%以上的计算任务都可均匀地分配到任意数量的执行绪中去. 与单执行绪相比,双执行绪至少能提供60%的性能提升,而四执行绪可以带来150%以上的性能提升 。使用SPEWorld::SetNumThreads()即可在任何时候开启多执行绪计算 。· 简单易用而人性化的接口,极大地降低了SPE与其他软体系统结合的难度,使用户在瞬间即可建立一个具有真实物理属性的世界 。比较开发公司/作者HavokCMLabsRussell SmithAGEIADavid Lam版本32.30.52.1.21.21发行日期2005.32004.72004.52004.112005.3是否支持C++开发是是是是是文档/Demo详细详细较详细详细较详细License商业价格需要协商商业价格需要协商GNU LGPL/BSD/价格和使用需要协商商业价格需要协商免费技术支持全面全面少全面无其他NANA开放源码支持PPUNA技术PhysX在在游戏中有粒子、流体、软体、关节和布料五大套用 。粒子所谓的粒子运动,主要是指大规模的物理运动,比如此前提到过的用手雷将油桶引爆后所形成的碎石头、冲击波造成的尘土飞扬等效果,这些效果如果都让传统的CPU来进行运算的话,无疑是相当困难的 。流体流体运动更多的则是展现水从水管内喷出,水冲击到物体后,物体的表现,比如木箱被沖翻 。而那些被沖翻的木箱翻倒的方向每次都各不相同,又比如在一个NⅥDIA Logo形状的玻璃容器中,用滑鼠来控制玻璃容器的位置,让容器里的液体流动,这种流动的效果和现实中的效果已经相当接近了 。软体在NⅥDIA展示的演示画面中,还有一个则是“食人花”的场景 。讲述的是一朵巨大的食人花(也可以说是花形状的怪兽)被人抓住以后,玩家用雷射去攻击食人花,然后这朵“花”就会作出反应 。这种软软的身躯扭动起来非常像现实生活中看到的鼻涕虫之类的虫在蠕动一样,感觉相当噁心 。物理至于在关节和布料方面的套用,在文章的开始处已经提到了,美女们在T型台上用夸张的肢势行走,虽然动作夸张,却丝毫没有虚假的成分在里面,这在传统的3D游戏里是很难做到的 。而身上的裙子也跟着关节的移动而跟着摆动 。可以看出,所谓物理效果,都是在游戏中模仿现实中真实物理世界的运动方式,在游戏中,大家甚至能感受到箱子、石头、布料以及那些噁心的无脊椎动物的触感是怎样的 。游戏之所以能实现如此多的动态效果,都要归功于物理运算 。技术分类PhysXPhysX 是一套由NⅥDIA 设计的执行複杂的物理运算的技术 。NⅥDIA PhysX基于NⅥDIA CUDA,允许其用户利用 PhysX 执行物理运算 。在游戏中实现物理运算效果绝非易事 。物理运算效果是一种对计算性能要求极高的环境,以一整套独特的物理学算法为基础,需要大量同步运算的能力 。採用支持PhysX?技术的NⅥDIA®(英伟达?)GeForce®处理器是实现实时物理学特效的最佳途径,这些特效包括尘土飞扬、令物体碎片四射的爆炸、生动逼真的人物动作以及衣服布料的自然下垂与撕裂等 。PhysX技术被广泛套用于150多个游戏中,其注册用户数量已超过10,000名 。这项技术在索尼的Playstation 3、微软的Xbox 360、任天堂的Wii以及个人计算机上均得到了良好的支持,把游戏推向全新的境界 。