标题：物理引擎
简介
物理引擎使用对象属性（动量、扭矩或者弹性）来模拟刚体行为，这不仅可以得到更加真实的结果，对于开发人员来说也比编写行为脚本要更加容易掌握。好的物理引擎允许有复杂的机械装置，像球形关节、轮子、气缸或者铰链。有些也支持非刚性体的物理属性，比如流体。物理引擎可以从另外的厂商购买，而一些游戏开发系统具备完整的物理引擎。但是要注意，虽然有的系统在其特性列表中说他们有物理引擎，但其实是一些简单的加速和碰撞检测属性而已。
由来
游戏中并没有所说的这种“物理效果”，还不是一样可以让人能看到该运动的东西还是在动啊，并非就是很死板地一堆放在那里。要说清楚这个问题，其实也很简单，在以往的游戏中，比如打坏一个油桶，物理引擎就会按照游戏设计者预先设计好的脚本来爆炸，这就是为什么在以往的3D游戏中，那些物体只会按照原定计划做规定动作的原因。
自从游戏中加入了物理引擎后就不一样了，物理引擎完全突破了以往按预定脚本执行的方式，而是要求在3D游戏中的那些物体都要遵行物理参数来运行。这样的好处就是如果你的显卡和处理器足够强大，物理引擎就能模拟真实世界中各种物体运动的规律来运动。不过所谓的“物理引擎”并不是指那些实实在在的物理效果，物理引擎和此前理解的3D游戏引擎类似，是给游戏开发者的一个平台，允许游戏开发人员只用几行代码就能在游戏中加入烟雾等效果，非常方便。
举个简单的例子，在几年前还没有物理引擎的时候，在那种FPS游戏中，一位士兵往一个油桶旁边扔一个手雷，手雷爆炸，引起了油桶的爆炸。不过这个过程显得相当死板，不管是把手雷丢在油桶的左边还是右边，油桶都只会按照预先设计的样子爆炸，不会有区别。如果有了物理引擎，手雷扔在油桶的左边或右边都会产生不同的爆炸效果，石块会朝不同的角度飞溅起来，烟雾也会慢慢冒起来……通过物理引擎，实现这些物体之间相互影响的效果是相当简单的。这是物理计算最初给的印象，虽然这样的设计有点意思，但老是看这些爆炸场景看多以后，但总让人感觉物理引擎的效果也就仅局限于那些爆炸后石头飞起来的场景，感觉有点单一。
技术应用
当NⅥDIA宣布正式收购Ageia及该公司的PhysX物理软硬件组件后，所有人都在期待，期待着NⅥDIA会推出新的有关物理运算的东西出来。果不其然，最近当NⅥDIA发布Forceware 177.79驱动后，意味着GeForce 8/9和GT200系列的GPU都支持PhysX引擎。这是因为NⅥDIA将PhysX引擎集成到CUDA架构的物理运算中。这样，显卡就能自动进行物理加速运算。当然，PhysX在游戏上的运用仅仅是物理引擎众多运用的一方面，在整个CUDA通用运算领域上，都会有物理引擎的身影，比如计算天体间在相互引力的作用下，各自的运动轨迹等。
此次在GDC09上展示的Havok物理引擎包括了三个场景，分别为爆破、布料和AI计算。演示平台使用了i7 965至尊版处理器搭配HD4870X2显卡，运行效果比较流畅。不过唯一让人感到稍稍惊讶的是，Havok物理引擎并非是专门针对ATI显卡而设计，它能够支持OpenCL架构（布料演示DEMO就是基于OpenCL架构开发的），也就是说NⅥDIA的GeForce 8以上级别显卡也很有可能能够支持Havok物理引擎。
技术分类
PhysXPhysX 是一套由NⅥDIA 设计的执行复杂的物理运算的技术。NⅥDIA PhysX基于NⅥDIA CUDA，允许其用户利用 PhysX 执行物理运算。  Physx在游戏中实现物理运算效果绝非易事。物理运算效果是一种对计算性能要求极高的环境，以一整套独特的物理学算法为基础，需要大量同步运算的能力。采用支持PhysX™技术的NⅥDIA®（英伟达™）GeForce&reg；处理器是实现实时物理学特效的最佳途径，这些特效包括尘土飞扬、令物体碎片四射的爆炸、生动逼真的人物动作以及衣服布料的自然下垂与撕裂等。PhysX技术被广泛应用于150多个游戏中，其注册用户数量已超过10,000名。这项技术在索尼的Playstation 3、微软的Xbox 360、任天堂的Wii以及个人计算机上均得到了良好的支持，把游戏推向全新的境界。
此外，NⅥDIA PhysX是一种功能强大的物理加速引擎，可在顶级PC和游戏中实现实时的物理学计算。PhysX设计用途是利用具备数百个内核的强大处理器来进行硬件加速。加上GPU超强的并行处理能力，PhysX将使物理加速处理能力呈指数倍增长并将您的游戏体验提升至一个全新的水平，在游戏中呈现丰富多彩、身临其境的物理学游戏环境。其中特色如下：
⒈爆炸引起的烟尘和随之产生的碎片 
⒉复杂、连贯的几何学计算使人物的动作和互动更加逼真 
⒊其视觉效果令人叹为观止的全新武器 
⒋布纹的编织和撕裂效果非常自然 
⒌运动物体周围烟雾翻腾 
⒍采用NⅥDIA支持PhysX的GeForce处理器是实现真实物理加速效果的唯一途径，其可缩放、复杂、逼真、高度互动的特性将彻底颠覆您的娱乐体验。
NⅥDIA将PhysX引擎集成到CUDA架构的物理运算中，这样就可以是GeForce 8/9及GT200系列全部都支持PhysX引擎， 所有已使用PhysX技术的游戏都支持新版驱动程序，果装有支持CUDA平台的显卡，游戏将自动选取显卡进行物理加速运算，仍会使用性能较慢的CPU进行运算。此外，PhysX并不只使用于游戏市场，同时亦会运用CUDA通用运算领域上，应用更广。
无论是GPU还是CPU、PPU、Cell（PS3）都可以通过HAL翻译层来实现软、固质体动力（Soft or Rigid Body Dynamics）、通用碰撞侦测（Universal Collision Detection）、有限元素分析（Finite Element Analysis）、流体动力（Fluid Dynamics）、毛发模拟（Hair Simulation），以及更高级开发平台APEX中的更先进的布料模拟（Cloth Simulation）、自然模拟（Natural Motion）等在内新颖技术。
通过过CUDA通用接口，PhysX引擎将NⅥDIA GPU中的Thread Scheduler（线程管理器）模拟成Control Engine（控制引擎CE），而Streaming Processors来模拟Vector Processing Engine（矢量处理引擎,VPE），其中CE控制引擎负责任务的指派，相当于PhysX中的主管机构，而真正的物理运算任务则是由VPE矢量引擎来完成，最后通过Data Movement Engine（数据移动引擎DME）输出。HavokHavok原是一家业界领先的软件服务提供商，其物理引擎被超过200款游戏使用，许多电影也应用了这家公司的软件技术。去年9月，Intel突然宣布收购Havok，业界普遍猜测此举是为了抑制NⅥDIA、AMD在游戏物理引擎领域的扩张。
  Havok日前，Intel使出了扩展Havok物理引擎市场的杀手锏——免费！Havok在网站上开始提供其物理和动画引擎产品的全免费下载。内容包括Havok SDK库、样例、技术文档以及支持Maya、3ds Max和Avid XSI等3D建模软件的格式转换工具。所有的一切只要简单注册一下姓名邮箱就可以免费下载。
  
技术效果
PhysX在在游戏中有粒子、流体、软体、关节和布料五大应用。所谓的粒子运动，主要是指大规模的物理运动，比如此前提到过的用手雷将油桶引爆后所形成的碎石头、冲击波造成的尘土飞扬等效果，这些效果如果都让传统的CPU来进行运算的话，无疑是相当困难的。粒子效果流体运动更多的则是展现水从水管内喷出，水冲击到物体后，物体的表现，比如木箱被冲翻。而那些被冲翻的木箱翻倒的方向每次都各不相同，又比如在一个NⅥDIA Logo形状的玻璃容器中，用鼠标来控制玻璃容器的位置，让容器里的液体流动，这种流动的效果和现实中的效果已经相当接近了。流体效果在NⅥDIA展示的演示画面中，还有一个则是“食人花”的场景。讲述的是一朵巨大的食人花（也可以说是花形状的怪兽）被人抓住以后，玩家用激光去攻击食人花，然后这朵“花”就会作出反应。这种软软的身躯扭动起来非常像现实生活中看到的鼻涕虫之类的虫在蠕动一样，感觉相当恶心。软体效果至于在关节和布料方面的应用，在文章的开始处已经提到了，美女们在T型台上用夸张地肢势行走，虽然动作夸张，却丝毫没有虚假的成分在里面，这在传统的3D游戏里是很难做到的。而身上的裙子也跟着关节的移动而跟着摆动。
可以看出，所谓物理效果，都是在游戏中模仿现实中真实物理世界的运动方式，在游戏中，大家甚至能感受到箱子、石头、布料以及那些恶心的无脊椎动物的触感是怎样的。游戏之所以能实现如此多的动态效果，都要归功于物理运算。
常见
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
更多的专注于生活中的实例模拟。
⒍ 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与其他软件系统结合的难度，使用户在瞬间即可建立一个具有真实物理属性的世界。
比较
开发公司/作者
Havok
CMLabs
Russell Smith
AGEIA
David Lam
版本
3
2.3
0.5
2.1.2
1.21
发行日期
2005.3
2004.7
2004.5
2004.11
2005.3
是否支持C++开发
是
是
是
是
是
文档/Demo
详细
详细
较详细
详细
较详细
License
商业
价格需要协商
商业
价格需要协商
GNU LGPL/BSD/价格和使用需要协商 
商业
价格需要协商
免费
技术支持
全面
全面
少
全面
无
其他
NA
NA
开放源码
支持PPU
NA