Jolt Physics
Jolt Physics 是一款面向多核优化的 C++ 刚体物理与碰撞检测库,适合游戏与 VR 应用,已被《地平线:西之绝境》和《死亡搁浅 2》采用,支持确定性模拟与丰富约束。
爱鲜报评分
0 人评分
12k
星数
否
中文
C++
主语言
是
活跃
91
贡献者
人工分析
EDITORIAL推荐理由
工业级验证的物理引擎,被 3A 大作采用,稳定性与性能有保障。多核友好设计,支持并行碰撞查询与后台加载,适合大型开放世界。功能覆盖刚体、软体、载具、布娃娃与 GPU 头发模拟,扩展性强。MIT 协议开源,集成成本低。
适用场景
- 3A 游戏与独立游戏的物理模拟
- VR/AR 交互式仿真
- 载具与角色运动学模拟
- 布娃娃与软体/布料模拟
- 需要确定性同步的联机物理
- 物理引擎学习与二次开发
优点
- 多核并行设计,性能优秀
- 确定性模拟,便于网络同步
- 功能全面:刚体、软体、载具、头发
- 跨平台支持广泛,含移动端与主机
- MIT 许可,商用友好
- 有 HelloWorld 示例与完整 API 文档
缺点
- C++ 集成门槛较高,需熟悉构建系统
- 文档以英文为主,中文资料较少
- API 较为庞大,学习曲线偏陡
- 部分高级特性(GPU 头发)对硬件有要求
Jolt Physics 简介
Jolt Physics 是一款用 C++ 编写的多核友好型刚体物理与碰撞检测库,专为游戏和 VR 应用设计。它已被《地平线:西之绝境》和《死亡搁浅 2:冥滩之上》等 3A 大作采用,并在 GitHub 上获得超过 1.1 万星标。
设计理念
与许多传统物理引擎不同,Jolt 强调在主模拟更新之外并发访问物理数据:
- 物理体可在后台线程批量准备,再以极低开销插入模拟
- 碰撞查询可与增删改物理体并行执行
- 碰撞查询可与主物理模拟并行,长耗时任务可分摊到多帧
- 物理体创建时不会自动唤醒,避免加载/卸载时的性能抖动
- 模拟具有确定性,只需同步输入即可在远端复现
核心功能
刚体与形状
支持球体、盒体、胶囊、锥形胶囊、圆柱、锥形圆柱、凸包、平面、复合体、三角网格、地形高度场等多种形状,并使用连续碰撞检测。
约束系统
提供固定、点、距离(含弹簧)、铰链、滑块、锥形、齿条齿轮、齿轮、滑轮、平滑样条、Swing-Twist、6 DOF 等约束,并支持马达驱动。
高级模拟
- 布娃娃:硬关键帧、软关键帧、马达驱动、高低细节骨架映射
- 游戏角色:刚体角色与虚拟角色两种方案
- 载具:轮式、履带式、摩托车
- 软体:边约束、二面角弯曲、Cosserat 杆、四面体体积、长程附着、内部压力
- GPU 头发:基于 Cosserat 杆,支持引导/渲染发丝与发间碰撞
- 浮力:水体浮力计算
- 双精度模式:可选,用于大世界场景
平台与硬件要求
支持 Windows、Linux、FreeBSD、Android、macOS、iOS、MSYS2 MinGW64 及 WebAssembly(独立项目)。x86/x64 最低要求 SSE2,可选用 SSE4.1/4.2、AVX、AVX2、AVX512;ARM64 使用 NEON。
快速上手
建议从 HelloWorld/HelloWorld.cpp 示例开始,官方还提供了使用 CMake FetchContent 的集成示例。每个特性都有对应 Sample,运行 Samples 应用并浏览源码是学习的最佳途径。
// 伪代码示意:创建物理系统与刚体
JPH::RegisterDefaultAllocator();
JPH::Factory::sInstance = new JPH::Factory();
JPH::RegisterTypes();
// 创建 PhysicsSystem、添加 BodyInterface、插入形状与刚体
完整架构与 API 文档见官方 GitHub Pages。
评论
- 暂无评论,来写第一条吧。