Elytra
Blog物理引擎

游戏物理引擎横评:PhysX、Jolt、Havok、Bullet、Box2D 与 Rapier

面向游戏开发者的六款主流物理引擎对比:特性、授权、引擎集成与代表作,帮你判断该用商业中间件、老牌开源库,还是新一代方案。

选物理引擎,很少是「哪个算得最准」这么简单。

更常见的问题是:你的角色控制器要不要和刚体深度耦合?堆叠箱子会不会抖?开放世界里能不能一边流式加载一边做射线检测?联机要不要回滚?团队能不能改源码?主机平台要不要单独签 EULA?

这篇文章对比六款在游戏开发里经常被提到的方案:PhysX、Jolt、Havok、Bullet、Box2D、Rapier。其中 Box2D 是 二维 物理引擎——若你原本想找的是别的名字,大概率指的就是它;其余五款主攻 三维 刚体与碰撞。

本文不覆盖什么

下文聚焦 游戏向刚体/碰撞中间件,不展开布料、流体、破坏、角色动画中间件(如 Euphoria)或引擎内置的全栈方案(例如 Unreal 的 Chaos)。它们常与物理引擎配合,但不是同一层抽象。

1先建立坐标系:你在选哪一层?

游戏项目
├─ 引擎内置物理(Unity PhysX、Godot Physics、UE Chaos…)
├─ 可替换后端 / 中间件(Havok for Unity、Godot Jolt…)
└─ 自研引擎直接嵌入库(Jolt、Bullet、Rapier、PhysX SDK…)

对多数独立开发者,真正接触到的往往是 引擎已经帮你接好的那一层。但对技术选型、性能瓶颈和跨项目迁移,搞清楚底层库的差异仍然值得。

引擎维度语言授权(概览)典型接入方式
PhysX3DC++CPU 源码 BSD-3;主机等平台另有 EULA1Unity 内置、Omniverse、自研
Havok3DC++商业授权;Unity 包为闭源后端2自研中间件、Unity ECS
Jolt3DC++MIT3Godot 模块、自研、VR/AAA
Bullet3DC++Zlib4RAGE、Blender、PyBullet、自研
Box2D2DCMIT5Unity 2D、Cocos2d、LÖVE、自研
Rapier2D/3DRustApache-2.06Bevy、Web/WASM、自研

下面按「老牌商业 → 开源常青树 → 新世代」的顺序展开。

2PhysX:工业级刚体,Unity 时代的默认答案

NVIDIA PhysX 可能是过去十年里 被最多玩家间接摸到 的物理引擎:它不只在自研项目里出现,更深度嵌在主流工具链里。

2.1核心特性

  • 刚体动力学:凸体、三角网格、高度场、关节与角色控制器等完整管线。
  • 连续碰撞检测(CCD) 与 降维坐标关节(Reduced Coordinate Articulations):适合机械臂、载具、多关节角色等复杂约束。7
  • 多线程与可扩展性:面向大量动态物体的场景查询与仿真。
  • GPU 相关能力:历史上以 GPU 加速著称;PhysX 5 重新开源后,更多能力围绕 Omniverse 与 USD Physics 生态展开。8

2.2谁在用、怎么接入

场景说明
Unity(GameObject)内置 3D 物理长期基于 PhysX 4.x 分支;2D 则走 Box2D。9
NVIDIA OmniversePhysX 5 是 Omniverse 仿真的核心参考实现之一。8
Unreal Engine 4UE4 默认刚体后端为 PhysX 3;UE5 起默认改为 Epic 自研 Chaos,PhysX 不再官方支持。10

PhysX 的「代表作」很难列一张完整清单——它更像基础设施。你在 Unity 里拖一个 Rigidbody 做堆箱子、布娃娃、射线检测,背后往往就是 PhysX。

2.3优势与代价

优势:文档与社区案例极多;与 Unity 编辑器工作流磨合成熟;工业仿真向功能(关节、CCD)齐全。

代价:引擎集成的版本可能 落后于 NVIDIA 主线 SDK(例如 Unity 社区长期讨论 PhysX 5 是否会进入 GameObject 管线11);主机等平台授权需单独看清 EULA;UE 生态里它的地位已被 Chaos 取代。

一句话定位

PhysX 仍是「商业引擎默认后端」的代表;若你已经在 Unity 传统工作流里,它往往是不需要额外决策的选项。

3Havok:AAA 中间件的标杆

Havok 由爱尔兰公司开发,2007 年被 Intel 收购,2015 年再被 Microsoft 收购。12 在 2000 年代中后期,它几乎是 主机 AAA 射击与开放世界 的物理代名词。

3.1核心特性

  • 成熟刚体求解:稳定堆叠、高速滑动接触、焊接(welding)等多年打磨的细节。
  • 产品族:除 Physics 外还有 Cloth、AI/Navigation 等(本文不展开)。13
  • Stateful 优化:通过缓存与休眠(sleeping)等策略,在大量刚体场景中换取更高仿真吞吐——Unity 文档也明确对比了它与无状态后端在联机回滚场景下的差异。14

3.2代表游戏(节选)

Havok 官方与公开资料中反复出现的作品包括:

  • 射击:Halo 系列、Call of Duty 多部作品、Destiny15
  • 开放世界 RPG:The Elder Scrolls V: Skyrim、Assassin's Creed 系列16
  • 近年大作:Helldivers 2、Starfield、The Legend of Zelda: Tears of the Kingdom 等17

(同一款游戏往往同时使用多套中间件;上表指的是 物理相关能力 的公开归属,不代表「只有 Havok」。)

3.3接入方式

路径适合谁
完整 Havok SDK有预算的 AAA 或自研引擎团队,需要源码级定制与支持
Havok Physics for UnityUnity ECS/DOTS 项目;与 Unity Physics 共享数据协议,可切换后端2
传统 GameObject 工作流仍主要用内置 PhysX,而非 Havok 包

Havok for Unity 需要 Unity Pro 及以上 授权,且是 闭源 原生后端。18

3.4优势与代价

优势:大规模刚体场景的质量与性能经过大量商业项目验证;微软生态下与 Xbox/第一方项目关系紧密。

代价:完整 SDK 授权与技术支持成本高;Unity 集成仅覆盖 ECS 路线;闭源使深度定制与长期风险管控更依赖厂商。

4Jolt:从副业项目到 AAA 实战

Jolt 由 Guerrilla Games 技术负责人 Jorrit Rouwe 在业余时间开发,2022 年起用于 Horizon Forbidden West,并继续服务于 Death Stranding 2: On the Beach 等作品。19

它的设计目标非常「游戏向」:多线程友好、仿真期间尽量少锁、查询与增删物体可并行——这正是开放世界流式加载与多线程游戏逻辑更新常见的痛点。20

4.1核心特性

  • 刚体 + 连续碰撞:支持 Sphere、Box、Capsule、凸包、三角网格、高度场等;LinearCast 运动质量可缓解高速物体穿模。21
  • 软体(Soft Body):布料、充气体等(相对较新,仍在快速演进)。
  • 角色控制器、车辆、约束:面向关卡玩法而非纯科研仿真。
  • 大坐标与确定性选项:文档讨论了大世界与确定性仿真相关话题。22
  • MIT 授权:对商业游戏友好。3

4.2代表采用

项目说明
Horizon Forbidden West从商业中间件切换至 Jolt;Guerrilla 报告称在更高仿真频率下 CPU 时间反而下降,物理资产体积与运行时内存也有可观节省。19
Death Stranding 2: On the Beach官方 README 列出的采用案例。23
Godot2024 年起引擎内置 Jolt 模块(实验/演进中),替代或补充默认 Godot Physics。24

4.3优势与代价

优势:性能与线程模型对现代 AAA 架构友好;开源可调试;社区活跃、迭代快。

代价:生态与教程仍小于 PhysX/Havok;软体、工具链、DCC 插件不如老牌库丰富;你需要自己或依赖引擎完成集成层(碰撞回调、角色、网络同步等)。

值得关注的新趋势

若你在自研 C++ 引擎或考虑替换 Godot 默认物理,Jolt 是目前 最值得优先评估 的开源 3D 方案之一。

5Bullet:开源 3D 的「全能老兵」

Bullet 由 Erwin Coumans 发起,Zlib 授权,长期是 免费 3D 物理 的首选之一。4

5.1核心特性

  • 刚体 + 软体 + 布料/绳索:btSoftBody 支持可变形体与刚体双向交互,在开源库里属于功能面很广的一类。25
  • Featherstone 多体动力学:适合关节机器人、复杂机械结构。
  • PyBullet:Python 绑定使其在 RL、机器人仿真领域也非常常见(与游戏管线是不同用法)。
  • 连续碰撞检测 与多种形状:凸包、网格、复合形状等。

5.2代表游戏与项目

作品关系
Grand Theft Auto IV/V、Red Dead Redemption/2、Max Payne 3Rockstar 的 RAGE 引擎集成 Bullet 处理刚体与碰撞;角色反应还配合 NaturalMotion Euphoria 等系统。26
影视与科研公开报道中亦用于特效与仿真管线(如部分电影镜头)。27

5.3优势与代价

优势:功能广、授权宽松、资料与案例积累深;适合「既要刚体又要简单软体」的原型与中型项目。

代价:API 与代码年代感较强;性能与多线程表现通常 不如 Jolt 或商业引擎针对游戏做的优化;大场景需要更多自行调参和架构工作(宽相位、睡眠、LOD 等)。

6Box2D:二维玩法的标准库

Box2D 由 Erin Catto 维护,专注 2D 刚体,MIT 授权。5 在手游黄金年代几乎成了「抛物线、堆叠、弹射」类玩法的默认答案。

6.1核心特性

  • 2D 刚体、关节、距离/旋转约束、传感器(Sensor)。
  • 接触回调(b2ContactListener)驱动玩法逻辑:伤害、音效、破碎等。28
  • 迭代求解器,适合中小规模 2D 场景;Box2D 3.x 对架构做了现代化重构(API 与 2.x 有迁移成本)。29

6.2代表游戏

游戏说明
Angry BirdsRovio 在 GDC 2011 确认使用 Box2D;后与作者 Erin Catto 的「催署名」轶事广为流传。30
Limbo、Trials 等社区与官方资料常列为 Box2D 采用案例。31
大量 2D 手游与独立游戏经 Cocos2d、LÖVE、Unity 2D Physics 等间接使用

6.3接入方式

  • Unity:Rigidbody2D / BoxCollider2D 底层为 Box2D(与 3D 的 PhysX 分离)。
  • Godot:内置 2D 物理(非 Box2D,而是自研实现)。
  • 自研/Cocos2d 等:直接链接库。

6.4优势与代价

优势:极轻量、概念清晰、2D 教程遍地;对平台性能友好。

代价:仅 2D;复杂拓扑、大量刚体或需要 3D 旋转时并不合适。

7Rapier:Rust 生态与 Web 时代的新选项

Rapier 由 Dimforge 用 Rust 编写,同时提供 2D 与 3D,Apache-2.0 授权。6 它经常与 Bevy 一起出现,也是浏览器 WASM 项目的常见选择。

7.1核心特性

  • 2D/3D 刚体、关节、CCD、角色控制器(kinematic character controller)。
  • 并行与 SIMD:可选 feature 提升吞吐。32
  • 确定性:enhanced-determinism 支持跨平台确定性仿真(与 SIMD/并行 feature 互斥);另有 npm 上的 rapier*-deterministic 构建面向 Web。33
  • 官方 Bevy 插件:bevy_rapier2d / bevy_rapier3d。34

7.2代表项目

Rapier 的商业 3A 名单尚短,但在 Rust 游戏与工具链 里能见度很高:

类型例子
Bevy 生态大量开源 demo、教程与独立项目(弹球、平台跳跃、FPS 原型等)35
WebAssembly浏览器可运行的 2D 物理游戏(如基于 Bevy + Rapier 的 Web 作品)36

7.3优势与代价

优势:内存安全语言实现;WASM 与确定性路线清晰;与 Bevy ECS 结合自然;2D/3D 统一品牌降低栈切换成本。

代价:C++/C# 主导的团队需要 Rust 能力或绑定层;AAA 级长期战例仍少于 Havok/PhysX;复杂载具、软体、破坏等高级特性需自行组合或等待生态。

确定性的常见坑

Rapier 的跨平台确定性需要固定时间步、正确的 feature 组合,并避免随意使用原生浮点超越函数。联机回滚项目务必读官方 Determinism 章节并做 目标平台实测。33

8横向对比:开发者真正关心的维度

8.1功能覆盖面(简表)

能力PhysXHavokJoltBulletBox2DRapier
3D 刚体✓✓✓✓—✓
2D 刚体————✓✓
软体/布料有限/周边库Havok Cloth 等发展中✓ 较强—有限
角色控制器✓✓✓需自建/示例需自建✓
开源可改CPU 源码SDK 通常闭源✓ MIT✓ Zlib✓ MIT✓ Apache-2.0
确定性/回滚需自建有状态,回滚不友好14文档支持需大量自建较易官方路线33
多线程游戏向好好很好20中等单线程为主可选并行

8.2性能与质量(主观档位,仅供选型直觉)

大规模刚体堆叠 / 开放世界默认值(商业)
  Havok ≈ PhysX(成熟调参) > Jolt(新 AAA 验证中) > Bullet(看场景)

现代多线程 + 流式加载友好(开源 3D)
  Jolt > Bullet > 自行裁剪的 PhysX 集成

2D 手游 / 独立
  Box2D(成熟) ≈ Rapier 2D(Rust/Web 向)

Web / WASM / Rust 技术栈
  Rapier 优先

这不是 Benchmark 排名——同一引擎在不同积分步、形状类型、碰撞网格质量下差距可以反转。上线前务必用 目标平台 + 真实关卡资产 Profiling。

9选型建议:按场景对号入座

9.1你已经在用 Unity(传统 GameObject)

  • 3D:默认 PhysX 4.x 通常够用;极端堆叠或 DOTS 大场景再评估 Havok Physics for Unity 或 Unity Physics。2
  • 2D:底层是 Box2D,无需额外选型。
  • 关注官方路线图:PhysX 5、多后端切换等话题在社区里仍在讨论,迁移前看版本说明。11

9.2你在用 Godot

  • 3D:默认 Godot Physics 与 Jolt 模块 可对比测试;Jolt 在复杂碰撞与性能上常被社区推荐,但功能对等性需按项目清单核对。24
  • 2D:内置 2D 引擎,与 Box2D/Rapier 无直接替换关系。

9.3你在用 Unreal Engine 5

  • 刚体默认是 Chaos,不是 PhysX。10 选型问题变成「是否满足 Chaos 的行为与性能」,而非在六款库里挑一个嵌入。

9.4你在自研 C++ 引擎

优先级建议
要 MIT、现代多线程、AAA 验证Jolt
要软体/绳索/研究型功能一站式Bullet
要工业关节、Omniverse/USD 生态PhysX 5
有预算、要闭源支持与成熟 SLAHavok

9.5你在做 Rust / Bevy / Web 游戏

  • Rapier 几乎是默认起点;联机确定性优先选 enhanced-determinism 构建并锁定时间步。33

9.6你只做 2D

  • Box2D:C/C++、Unity 2D、成熟教程。
  • Rapier 2D:Rust、Bevy、WASM。

10写在最后:没有「最强」,只有「最贴你的管线」

这六款引擎的分野,本质上是三种力量的拉扯:

  1. 商业中间件(Havok、PhysX 在主机/EULA 语境下)用多年 AAA 打磨换取稳定与支持。
  2. 开源常青树(Bullet、Box2D)用宽松授权与广泛案例降低入门成本。
  3. 新世代库(Jolt、Rapier)用现代并发模型、语言生态与确定性设计迎合当下引擎架构。

对游戏开发者最实用的做法不是追逐榜单,而是列一张 项目清单 再对照:

  • 2D 还是 3D?角色控制器多复杂?
  • 最大同屏动态刚体数量?要不要睡眠与宽相位 LOD?
  • 是否联机回滚?要不要跨平台确定性?
  • 团队主语言与引擎是否已绑定后端?
  • 软体、载具、破坏是否在第一年就要?

把这些问题答清楚,候选引擎通常会从六个缩到一两个。剩下的事,用 真实关卡 做一周原型,比任何横评都可靠。


注释

  1. NVIDIA,PhysX SDK 4.0 发布公告。CPU 源码在多数桌面/移动平台为 BSD-3;部分游戏主机平台仍适用 NVIDIA EULA。 ↩

  2. Unity 文档,About Havok Physics for Unity。说明其为 ECS 闭源后端,与 Unity Physics 数据协议兼容。 ↩ ↩2 ↩3

  3. Jolt GitHub,jrouwe/JoltPhysics。MIT 授权。 ↩ ↩2

  4. Bullet 用户手册与源码头文件,Zlib license。核心库自由用于商业项目。 ↩ ↩2

  5. Box2D 官网与 GitHub,erincatto/box2d。MIT 授权。 ↩ ↩2

  6. Rapier 官网 rapier.rs 与 GitHub dimforge/rapier。Apache-2.0。 ↩ ↩2

  7. 同上。PhysX 4.0 引入 Temporal Gauss-Seidel 求解器与降维坐标关节等能力。 ↩

  8. NVIDIA,PhysX 5.8 文档首页。说明 PhysX 5 回归更宽松的开源许可,并与 USD Physics 标准对齐。 ↩ ↩2

  9. Unity,Physics solutions for game development。写明内置 3D 物理为与 NVIDIA 合作集成的 PhysX。 ↩

  10. Epic Games,Chaos Scene Queries and Rigid Body Engine in UE5。UE5.0 起 Chaos 为默认刚体物理。 ↩ ↩2

  11. Unity Discussions,How soon PhysX 5.0 support will be added to Unity?。社区讨论 PhysX 5 与 GameObject 管线计划,整理于 2024 年前后。 ↩ ↩2

  12. GameSpot,Destiny, Halo, Call of Duty Physics Tech Company Now Owned by Microsoft(2015)。报道 Microsoft 收购 Havok。 ↩

  13. Havok 官网产品页与 Havok Powered Games。列举采用 Havok 技术的商业作品。 ↩

  14. Unity 文档,Havok Physics for Unity FAQ。说明不替代 GameObject 的 PhysX;并讨论有状态引擎与回滚场景。 ↩ ↩2

  15. 同上 Havok Powered 页面;另见 Wikipedia Havok (company) 对采用范围的概述。 ↩

  16. Wikipedia,Havok (company)。列举 Half-Life 2、Halo、Skyrim、Assassin's Creed 等采用案例。 ↩

  17. Havok,Havok Powered Games。含 Helldivers 2、Call of Duty: Modern Warfare、Starfield 等近期条目。 ↩

  18. Havok,Havok Physics for Unity。需 Unity Pro 及以上授权。 ↩

  19. Guerrilla Games,Architecting Jolt Physics for Horizon Forbidden West(2022)。阐述切换动机与收益。 ↩ ↩2

  20. 同上演讲材料。重点讨论无锁宽相位、仿真岛构建与多线程游戏更新。 ↩ ↩2

  21. Jolt 文档,Continuous Collision Detection。说明 EMotionQuality::LinearCast 等行为。 ↩

  22. Jolt Physics 官方文档站点,jrouwe.github.io/JoltPhysicsDocs。 ↩

  23. 同上 README。列出 Horizon Forbidden West、Death Stranding 2: On the Beach 等采用。 ↩

  24. Godot Engine PR #99895(2024-12)。合并 Jolt 为引擎模块的说明。 ↩ ↩2

  25. Bullet 用户手册第 9 章 Soft Body Dynamics;btSoftBody 类参考。说明布料、绳索与刚体双向交互。 ↩

  26. Wikipedia,Rockstar Advanced Game Engine;Grand Theft Wiki,Bullet Physics Library。说明 RAGE 集成 Bullet。 ↩

  27. PVS-Studio 博客,PVS-Studio Looked into the Red Dead Redemption's Bullet Engine(2019)。讨论 Bullet 在 RDR 系列中的使用背景。 ↩

  28. Box2D 文档,b2ContactListener。接触回调机制说明。 ↩

  29. Box2D GitHub,Migration Guide。3.x 相对 2.x 的 API 变更。 ↩

  30. Engadget,Overheard@GDC: Credit where credit's due(2011)。Rovio 确认 Angry Birds 使用 Box2D。 ↩

  31. Box2D 社区与开发者博客长期将 Limbo 等列为采用案例;Angry Birds 为公开确认案例(见上条)。 ↩

  32. npm,@dimforge/rapier3d-simd。说明 SIMD 构建与浏览器支持差异。 ↩

  33. Rapier 文档,Determinism。跨平台确定性条件与 enhanced-determinism feature。 ↩ ↩2 ↩3 ↩4

  34. GitHub,dimforge/bevy_rapier。Bevy 官方 Rapier 插件。 ↩

  35. 例如 GitHub 上的 Bevy + Rapier 开源游戏与教程项目;Rapier 文档 Getting started with Bevy。 ↩

  36. 例如 Pinball2D 等 WebAssembly 部署案例。 ↩

CONTINUE EXPLORING

沿着这篇文章继续

在地图中查看

On this page