Box3D 开源 3D 物理引擎发布
Box3D 开源 3D 物理引擎发布
Box3D 基于经过验证的 Box2D 架构,提供高性能、开源的 3D 物理解决方案
Box3D 是一款 3D 物理引擎,旨在将 Box2D 的设计理念和效率引入三维空间。该引擎由 Erin Catto 开发,使用 C17 编写并提供 C API,使其非常适合集成到各种游戏引擎和平台中,包括用于基于 Web 游戏的 WASM。
核心技术规范
Box3D 保持了与 Box2D 几乎相同的架构,确保了已在使用其 2D 兄弟版本的开发者的熟悉的工作流程。关键技术特性包括:
- 碰撞支持: 包括三角网格碰撞、高度场碰撞和烘焙复合碰撞。
- 求解器与碰撞逻辑: 具有子步进求解器 (sub-stepping solver)、连续碰撞检测 (CCD) 以及广泛的 SIMD 接触求解器。
- 可扩展性: 利用图着色 (graph coloring) 技术处理大型岛屿 (islands),并提供带有可选内部调度器的多线程钩子。
- 世界管理: 通过使用 double 类型存储位置数据来支持大型世界。
- 实用工具: 包括内置的录制与回放功能。
开发起源:从 Rubikon-Lite 到 Box3D
Box3D 起源于 The Legend of California 的特定技术需求,这是一款在 Unreal Engine 中构建的生存游戏。开发者遇到了 Unreal 原生物理引擎 Chaos 的若干局限性,特别是缺乏对陀螺力矩 (gyroscopic torques) 的支持(导致细长物体旋转异常),以及在模拟大型胶囊体掉落在平滑三角网格上时表现出的不稳定行为。
为了解决这些问题,Catto 最初 fork 了 "Rubikon-Lite"——这是由 Dirk Gregorius 维护的、在 Half-Life: Alyx 中使用的 Rubikon 引擎的爱好者版本。随着时间的推移,Rubikon-Lite 的 fork 版本通过将其 API、数据结构和算法替换为 Box2D v3.0 的版本,从而演进为 Box3D,以保持 2D 和 3D 项目的一致性。虽然 Rubikon-Lite 的一些凸包生成和碰撞算法仍然保留,但最终生成的引擎即为 Box3D。
面向大规模开放世界优化
由于 Box3D 是为拥有数十万个实体的服务器权威 (server-authoritative) 开放世界而构建的,因此它针对规模和复杂度进行了特定优化:
- 复合碰撞系统: 为了避免加载数千个独立碰撞网格(例如在大型堡垒中)带来的内存和 CPU 开销,Box3D 允许将单独的形状“烘焙” (cooked) 成单个优化的 uber-shape。
- 体素集成: 引擎针对使用中值分割 (median split) 的快速运行时碰撞网格构建进行了优化,专门为网格状体素地形量身定制。
- 宽相阶段效率: 引擎实现了快速的宽相阶段 (broad-phase) 以管理在服务器端模拟布娃娃系统 (ragdolls)、体素和环境物体时所需的高实体计数。
当前状态与生态系统
Box3D 目前被视为 alpha 软件。开发者打算很快发布 v0.1 版本,长期目标是达到 v1.0。未来的计划增强功能包括改进的关节求解器、更好的幽灵碰撞缓解 (ghost collision mitigation) 以及增强的角色移动特性。
早期采用
尽管处于 alpha 阶段,Box3D 已经开始在以下项目中被使用:
- The Legend of California: 该引擎开发的主要驱动力。
- s&box: 由 Facepunch Studios 开发的游戏平台。
- Esoterica: 一款开源游戏引擎。
- A 1000-player space game: 由 Glenn Fiedler 开发的多人游戏项目。
社区洞察
行业从业者和开发者已经注意到了该引擎在特定用例中的潜力。一位开发者强调了该库的极小占用 (在 macOS 上约为 916K),这表明它是 Emscripten/WASM 编译用于 Web 游戏的理想选择,因为较大的 3D 物理库通常难以实现。其他开发者将其与 Jolt 和 Rapier 等现有替代方案进行了比较,并指出开源 3D 物理选项正变得越来越多样化。