Box3D 发布:一个基于 Box2D 的开源 3D 物理引擎
我很高兴宣布 Box3D 正式发布,这是一个开源的 3D 物理引擎,现已上线 GitHub。
Box3D 概览
Box3D 可以看作是 Box2D 的一个分支,增加了 3D 游戏所需的关键特性:三角网格碰撞、高度场碰撞、烘焙复合碰撞。其核心架构与 Box2D 几乎完全相同——C API、C17 源码、子步求解器、连续碰撞检测(CCD)、图着色(Graph Coloring)、宽 SIMD 接触求解器、多线程钩子、支持 double 精度的大型世界、跨平台确定性、录制与回放。
起源:《加州传奇》
作者自 2022 年起在 Kintsugiyama 工作室使用 Unreal Engine 5 开发《加州传奇》。他们遇到了 Unreal 原生物理引擎 Chaos 的诸多问题:不支持陀螺力矩(gyroscopic torque)、树木倒伏行为异常、以及需要在服务端管理数十万实体。在评估各种方案后,朋友 Dirk Gregorius(曾在《半衰期:Alyx》中负责 Rubikon 物理引擎)建议 fork 他的 hobby 版本 "Rubikon-Lite"。效果出奇地好——陀螺力矩正常工作了,树木也能正确地倒伏。
Box2D v3.0 带来了大量优化,作者希望将这些优化整合到 Rubikon-Lite 分支中。于是他们几乎替换了所有 API、数据结构和算法为 Box2D 的代码。最终 Rubikon-Lite 演变成了今天的 Box3D。目前 Box3D 中仍保留了一部分 Rubikon-Lite 代码(凸包生成和碰撞算法),其余部分来自 Box2D 和新编写的代码。
自研物理引擎的优势在于:游戏拥有一个大型开放世界,由服务端权威控制。倒伏的树木、布娃娃系统、体素和风滚草全部在服务端模拟。这包括针对红杉倒伏的性能优化、为体素系统快速构建碰撞网格、以及为 kitbashed 据点构建复合碰撞系统——将 50,000 个独立的碰撞网格合并为单一的超级形状。
知识传承
作者自 2004 年以来一直在开发物理引擎。Box2D 的诞生就是为了将知识开源地传承下去。Box3D 将这一使命扩展到了 3D 领域。Kintsugiyama 工作室允许作者将 Box3D 开源,并将其作为日常工作的一部分来持续开发。
谁在使用 Box3D
目前使用 Box3D 的项目包括:《加州传奇》、s&box(Facepunch Studios)、Esoterica(Bobby Anguelov 的引擎),以及 Glenn Fiedler 正在开发的一款 1000 人同服太空游戏。
未来展望
Box3D 目前还是 alpha 阶段软件,v0.1 即将发布。接下来的工作包括:角色移动系统、幽灵碰撞缓解、性能优化、改进的关节求解器。文档正在编写中。未来将通过 CLA 接受 pull request 贡献。