Bullet、Newton Game Dynamics和ODE物理引擎的比较

20

我正在尝试为一个简单的软件应用程序选择物理引擎。它将用于模拟相当少量的对象,因此性能并不是一个巨大的问题。我最关心的是运动的精确度。我还希望该引擎可以跨平台在windows/linux/mac上使用,并且可以与c++代码一起使用。我正在考虑Bullet、Newton Game Dynamics和ODE,因为它们是开源的。然而,如果Havok/PhysX明显更准确,我也会考虑它们。

我似乎只能找到有关引擎的意见,是否有任何全面的选项比较?或者有没有人尝试过各种引擎的经验。由于我所要做的事情相对简单,因此它们之间可能没有太大的区别,但我想听听人们对这些选项的看法? 谢谢!


3
当你说“准确”时,你指的是什么运动?对于弹道轨迹的准确建模相对比较简单,但是对于任何涉及碰撞或其他瞬间事件的情况则更为困难。例如,子弹在这方面存在问题,但我认为其他物理引擎也可能存在类似的问题。 - Rob Agar
我希望在可变重力环境中对单个物体(不一定是刚体)的运动学进行建模,并在特定时间施加各种力(例如突然启动推进器)。我并不打算进行任何碰撞。 - Anon
6个回答

11

8

虽然这篇文章有点过时,但它对Bullet、JigLib、Newton、ODE、PhysX等物理引擎的综合比较很详尽,可以在以下链接中找到:

该比较考虑了积分器、摩擦模型、约束求解器、碰撞检测、堆叠和计算性能等方面。


6
抱歉,关于精度方面的真实比较是不可能找到的。我已经为我的硕士论文搜索了三个月,但没有找到。所以我开始自己进行比较,但还有很长的路要走。我正在测试3D引擎甚至2D引擎,目前Chipmunk是迄今为止精度最高的。因此,如果您不需要3D,我会推荐使用它。但是,如果您急需3D并且您的问题就像您描述的那样简单(不想将来扩展?),Bullet和ODE都可以解决。我更喜欢Bullet,因为它更加现代化,并且仍在积极维护。至少还有Newton,我正在与之斗争。因此,除了它需要花费更多时间熟悉(关键的)糟糕文档外,我无法给您优缺点。希望这能帮到您。最好的问候。

4
在ODE中,我发现非常有价值的一点是能够“即时”更改几乎每个参数。例如,引擎似乎不会因为修改物体的惯性或形状而出现问题。你可以用盒子替换球体,并且一切都会继续工作,或者改变球体的大小。
通常其他引擎不那么灵活,因为它们在内部执行了很多优化工作。
至于精度,据我所知,ODE仍然支持非常精确(但速度较慢)的求解器,显然在游戏行业并不流行,因为你无法实时操作超过25-30个物体。希望这有所帮助。

7
你可以在常微分方程中对这个进行建模! - Chris Cunningham
1
对于这个罕见的洞察力给予点赞。实时编辑对我来说很可能是一个要求..但是..游戏在Bullet和Newton中不是一直在做这个吗?我认为它们会在运行时调整很多值,或者这主要限于创建/删除和取消固定对象? - Barry Staes

4

实际上它并不是“the”物理引擎;它只是其中之一,并且最近才在gazebo中得到支持。 - Catskul
谢谢你纠正我。我已经更新了答案。 - chrisdembia

3

一种物理学抽象层通过统一的API支持大量的物理引擎,使得比较适合你情况的引擎变得容易。 PAL为这些物理引擎提供了独特的接口:

  1. Box2D(实验性)
  2. Bullet
  3. Dynamechs(已弃用)
  4. Havok(实验性)
  5. IBDS(实验性)
  6. JigLib
  7. Meqon(已弃用)
  8. Newton
  9. ODE
  10. OpenTissue(实验性)
  11. PhysX(又称Novodex、Ageia PhysX、nVidia PhysX)
  12. Simple Physics Engine(实验性)
  13. Tokamak
  14. TrueAxis

根据2007年12月的论文本答案中的链接,PAL是一个非常有用的工具。

在开源引擎中,Bullet引擎提供了最好的结果,甚至超过了一些商业引擎。Tokamak是计算效率最高的,适用于游戏开发,但TrueAxis和Newton在低更新率下表现良好。对于模拟系统,应该确定模拟的最重要属性,以选择最佳引擎。这是同一作者在2007年9月发布的演示。

https://www.youtube.com/watch?v=IhOKGBd-7iw


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接