§13.2物理引擎

有了基本物理学的新知识,现在你可以较容易地比较现有的物理引擎了。实现了基本的东西和确定在系统中已定义了正确的常量并感觉良好之后,你应该考虑一下游戏的需求。物理引擎往往可以做很多不同的东西,许多物理演示和教程看上去很酷,但往往不能用于大多数游戏。第一次看到一堆箱子互相碰撞很有趣,但很少有游戏允许直接控制箱子并推动它们,而且看多了箱子翻倒就会觉得无趣,这就好象再一次回到了幼儿园一样。

但是,并非所有的演示仅仅是一堆方块。有许多很好的示例向你展示物理引擎的特殊功能,但我的观点是,大多数游戏只需要某些特定功能。第一人称射击游戏可能会用到大多数的功能,这点你可以在近几年中发售的游戏中看到。几乎所有的第一人称射击游戏都会实现某些物理系统,但其他类型的游戏,如角色扮演游戏、策略游戏等等,要么没有物理系统或只有最基本的物理系统,而且往往只是用来改善视觉效果而不是游戏逻辑本身。

我个人不喜欢在策略游戏中使用物理效果,因为它们实现得并不好,往往只是添加更好的视觉效果,比如周围建筑物倒塌时你的单位也会被压死。这就像在下棋时发生地震,这破坏了游戏规则,因为一切都在摇晃,你将无法作出任何聪明的举动。也许要过一段时间后开发商才会弄清楚如何正确地使用物理效果,并使游戏仍然是可预见的,而不是靠运气。

我真正喜欢的物理效果是爆炸,特效和视觉质量的改进。有几个游戏非常好地模拟了水,爆炸,烟雾效果,而且这些效果还能与周围的环境互动。

正如我前面所说,当在Xbox 360上使用XNA时你将无法使用任何物理引擎,因为它们都是基于非托管代码的,而这在XNA中不被支持。在Windows平台上可以使用任何你喜欢的物理引擎,但即使在Windows平台上很多物理引擎也没有适当的. NET接口可让你在游戏中轻松地使用和处理物理效果。.NET的可能性将在接下去讨论。总之,快速浏览一下现今的物理引擎提供的一些功能:

PhysX

PhysX是AGEIA公司的物理引擎和SDK的名称,以前被称为NovodeX SDK,PhysX也是Ageia开发的PPU(物理处理单元)的名称。PhysX PPU是世界上第一个专门用于计算物理的硬件,可用于任何使用PhysX SDK的游戏。目前支持PhysX物理引擎的游戏还不是很多,但许多引擎和即将发布的游戏已经获得了PhysX SDK的授权,而索尼公司也获得在Playstation 3游戏机使用PhysX的授权。

即使没有PPU,PhysX引擎也是强大的,开发商研究物理引擎已经很长一段时间了。它可能是仅次于Havok引擎排名第二的物理引擎,后者的应用更加广泛,不仅在游戏,而且在诸如3D Studio Max之类的3D建模程序中。将繁重的物理计算交于一个特殊的硬件处理,这个想法虽然不错,但PPU太贵了(250美元~300美元),有这种卡的人也不多。多数买这种物理卡的人是开发者或艺术家,他们可以从中受益,但你不能指望玩家要有物理卡才能运行你的游戏。但是PhysX在多核CPU也运行良好,只是不像在PPU上这么优异。

现在没有多少游戏使用PhysX,你只能找到屈指可数的几个。例如幽灵行动,哥特3,联合特遣部队以及最近的战争机器(Xbox 360游戏机)。但未来有虚幻竞技场2007和虚幻3引擎,细胞分裂,Monster Madness等等。

PhysX关注于游戏、游戏引擎、特效处理、利用物理学的游戏逻辑,有许多看上去很酷的例子和教程。它们的主要优势是:借助PPU硬件,运行速度比其他物理引擎快很多,PhysX还采用了统一架构以相同方式处理所有的物理计算。你可在PhsyX官方网站http://www.ageia.com上找到更多信息。

Havok

Havok是非常受欢迎的Havok Game Dymamics SDK(目前是第4版,在2006年发布)的名称,它也是开发这个SDK的公司的名称。这个公司成立于1998年,第一个SDK(v1.0)于2000年公布。今天有超过100个游戏使用Havok物理引擎,最有名的是游戏是半条命2和Valve公司的Source引擎,Source引擎也用在了许多以半条命为基础的改编游戏。Havok主要用于第一人称射击游戏,但其他一些游戏类型也已使用了Havok引擎。

Havok可用在许多平台上,包括个人电脑(Windows和Linux )和几乎每一种家用机(Xbox,Xbox 360,PS2,PS3,Wii,Game Cube)。它用C / C++编写,在允许编译C代码的任何系统上是非常精简的。但对.NET开发者来说没太多支持,我没听到过任何使用Havok的.NET游戏或引擎。

这个物理引擎不仅用于游戏,也可用于3D Studio Max,它利用了内部中间件,在模拟物理效果的3D艺术社区是很流行的。在以前的版本中通过一个叫reactor的插件实现,但最新版本已经在3D Studio Max的基本版中实现。Havok引擎甚至还用在了电影黑客帝国三部曲中。

Havok支持两个主要的物理操作。特效物理引擎可用于支持Shader Model 3.0的GPU如GeForce 7系列和8系列,特别是GPU很快时。然后是游戏物理引擎,这在CPU中计算。Havok是PhysX的主要竞争对手,它证明了无需额外的PPU你也可以干得很棒,2004年的半条命2游戏证明了实现很棒的物理效果是可行的,通过物理效果还能改进游戏。

你可以在Havok的官方网站http://www.havok.com/找到更多信息。

ODE

ODE表示“开放的动力学引擎(Open Dynamics Engine)”,与PhysX和Havok不同,它不是一个商业引擎,这也许是初级开发人员或小组最感兴趣的地方,初学者往往苦于没有足够的钱去使用一个大型的商业物理引擎。

ODE是一个开源物理引擎,它使用BSD许可证(或LGPL如果你喜欢)。它开始于2001年,已经有一些游戏通过这个引擎被开发出来,但它没有像PhysX或Havok那么完善的功能,也没那么成功。

ODE支持刚体动力学和碰撞检测。要提供更加先进的物理效果你仍然有很多工作要做,但ODE为你提供了一个很好的基本框架,给了你所有的基本几何形状(如正方体、球体、圆柱体等)和物理计算,你可以用来做一些基本的物理演示。还有一些框架是建立在ODE之上或使用ODE。

下面是酷的地方:ODE有一个很好的.NET包装叫做ODE.NET,可以在下面的网址找到。上面有几个示例,很多游戏引擎使用C++代码并只提供C++示例,很高兴能见到一些.NET代码了。示例展示了基本的物理处理,如堆箱子并推动它们,布娃娃物理和控制一些如汽车或玩具之类的基本物件。你也可以看看ODE的官方网站http://www.ode.org/。如果关闭了,可查看维基百科的有关条目。

其他

还有许多其他的物理引擎,我不可能全知道。也许还有其他引擎可用于.NET,但我尚未没有发现像ODE.NET那样有用的物理引擎。下面是我遇到过的一些其他物理引擎:

如你所见,有许多物理引擎可用,但在.NET环境中使用它们不是很容易。你也不能在Xbox 360上利用它们,因为它们都是用C++和非托管代码开发的,这意味着在Xbox 360上使用XNA时没有可用的。

但是,即使你最后不使用物理引擎而只是查看示例和教程,你也可以更清楚地了解物理引擎能干什么和哪些部分可能会很难重新自己实现。在赛车游戏不需要一个复杂的物理引擎。那么,这将有一个坚实的基础,但由于在.NET中实现物理引擎是如此困难,而且我想让游戏也能运行在Xbox 360上,所以你必须自己实现物理引擎。


发布时间:2008/11/11 8:04:51  阅读次数:7560

2006 - 2024,推荐分辨率1024*768以上,推荐浏览器Chrome、Edge等现代浏览器,截止2021年12月5日的访问次数:1872万9823 站长邮箱

沪ICP备18037240号-1

沪公网安备 31011002002865号