v0.35 - Rapier vs Box2D vs Jolt vs Box3D vs Godot Physics
Godot Rapier now runs on Rapier 0.35.
Both 2D and 3D builds now always have parallel SIMD solver and cross platform determinism enabled.
Here is the repo used to run the tests benchmarks-repo.
2D: Rapier vs Box2D
Rapier is the only engine that keeps every scene stable: Box2D collapses the pyramid and blows the joints apart, those are marked as unstable.
- Issue on godot-box2d-v3 side: godot-box2d-v3/issues/9 godot-box2d-v3/issues/8
| Engine | Version | Addon |
|---|---|---|
| v0.35 | godot-rapier2d | |
| v3.1 | godot-box2d-v3 | |
| v4.7 | ships with Godot |
| Engine | Rapier2D | Box2D | Godot Physics |
|---|---|---|---|
![]() | 20.0 ms 1.8 cores | 21.3 ms 3.8 cores unstable | 147 ms 1.2 cores |
![]() | 11.9 ms 2.1 cores | 11.6 ms 3.8 cores | 55.1 ms 1.3 cores |
![]() | 9.3 ms 1.7 cores | 6.7 ms 2.9 cores | 71.1 ms 1.3 cores |
![]() | 6.2 ms 1.2 cores | 4.6 ms 1.6 cores | 57.2 ms 1.1 cores |
![]() | 10.2 ms 1.5 cores | 4.9 ms 2.6 cores unstable | unstable never finishes |
| Benchmark | 1st | 2nd | 3rd |
|---|---|---|---|
| Pyramid | Rapier2D | Box2D 1.07x | Godot Physics 7.35x |
| Smash | Box2D | Rapier2D 1.02x | Godot Physics 4.76x |
| Mixed shape pile | Box2D | Rapier2D 1.38x | Godot Physics 10.60x |
| Query storm | Box2D | Rapier2D 1.37x | Godot Physics 12.56x |
| Joint grid | Box2D | Rapier2D 2.06x | Godot Physics never finishes |
Unstable runs, whose times are not comparable: Box2D on the pyramid (collapses) and on the joint grid (infinite displacement). Godot Physics does not finish the joint grid within 60 s.
3D: Rapier vs Jolt vs Box3D
Rapier3D is fastest on queries and joints and stays close on the rest; Jolt crashes the joint grid. Box3D became multi-threaded in godot-box3d v0.2.4 and is now the fastest on three scenes — the numbers below were re-measured against it.
| Engine | Version | Addon |
|---|---|---|
| v0.35 | godot-rapier3d | |
| v5.5.0 | ships with Godot v4.7 | |
| v0.1 | godot-box3d v0.2.4 | |
| v4.7 | ships with Godot |
Rapier3D | Jolt | Box3D | Godot Physics | |
|---|---|---|---|---|
![]() | 5.9 ms 1.0 cores | 26.4 ms 1.1 cores | 6.7 ms 1.1 cores | 73.3 ms 1.0 cores |
![]() | 14.6 ms 2.8 cores | 26.9 ms 4.7 cores | 13.5 ms 2.7 cores | 48.0 ms 1.4 cores |
![]() | 11.3 ms 2.1 cores | 13.7 ms 3.6 cores | 9.7 ms 2.4 cores | 84.9 ms 1.7 cores |
![]() | 8.9 ms 1.7 cores | unstable never finishes | 10.3 ms 1.8 cores unstable | 26.1 ms 1.2 cores |
![]() | 19.1 ms 2.8 cores | 12.1 ms 5.0 cores | 9.6 ms 2.9 cores | 100 ms 1.3 cores |
| Benchmark | 1st | 2nd | 3rd | 4th |
|---|---|---|---|---|
| Query storm | Rapier3D | Box3D 1.12x | Jolt 4.46x | Godot Physics 12.35x |
| Pyramid | Box3D | Rapier3D 1.08x | Jolt 1.99x | Godot Physics 3.55x |
| Mixed shape pile | Box3D | Rapier3D 1.16x | Jolt 1.41x | Godot Physics 8.73x |
| Joint grid | Rapier3D | Box3D 1.15x | Godot Physics 2.92x | Jolt never finishes |
| Smash | Box3D | Jolt 1.26x | Rapier3D 1.99x | Godot Physics 10.40x |
Unstable runs, whose times are not comparable: Box3D on the joint grid (infinite displacement). Jolt does not finish the joint grid within 60 s, and Godot Physics does not finish the drop scene.
experimental-threads is no longer enabled
Official builds used to enable experimental-threads so the physics server could be driven from
other threads. It cost 7-51% depending on the scene, and it turned out to be unnecessary: Godot
already serialises every call onto a single physics thread through PhysicsServer3DWrapMT and its
command queue, so the extra synchronisation was protecting a call path that is never concurrent.
Godot Physics, Jolt and Box3D all take the same no-locking approach.
New features
- Rope and fixed joints, in 2D and 3D. Godot has no equivalent of either. Reference.
- Per-body solver iterations: stabilize one important body without paying for it globally. Reference.
- Per-joint stiffness and toggling:
joint_set_softness,joint_set_enabledfor breakable constraints. Reference. - Joint warm starting: stiff joint assemblies converge much better, at no measurable cost.
- New project settings for motion recovery, shape casting and query behaviour.
Full Changelog: https://github.com/appsinacup/godot-rapier-physics/blob/main/CHANGELOG.md
v0.8.37
What's Changed
- Cross platform determinism tests by @RaphaelLEMAS in https://github.com/appsinacup/godot-rapier-physics/pull/561
- enhanced-determinism feature does not guarantee cross-platform determinism for 3D by @RaphaelLEMAS in https://github.com/appsinacup/godot-rapier-physics/pull/564
- use native quaternion manipulation instead of manually doing it by @RaphaelLEMAS in https://github.com/appsinacup/godot-rapier-physics/pull/565
- Remove default features also so it's less confusing. by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/566
- Possible fixes to crash on reload of server by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/567
- Fix crash by cloning list so it doesn't clash while iterating by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/569
Full Changelog: https://github.com/appsinacup/godot-rapier-physics/compare/v0.8.36...v0.8.37
v0.8.36
What's Changed
- Update to godot 4.7 by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/560
Full Changelog: https://github.com/appsinacup/godot-rapier-physics/compare/v0.8.35...v0.8.36
v0.8.35
What's Changed
- Fix 2D cross platform determinism by @RaphaelLEMAS in https://github.com/appsinacup/godot-rapier-physics/pull/559
Full Changelog: https://github.com/appsinacup/godot-rapier-physics/compare/v0.8.34...v0.8.35
v0.8.34
What's Changed
- Fix PinJoint2D softness to match Godot by @Schnorg in https://github.com/appsinacup/godot-rapier-physics/pull/555
- fix state manager cache state crash on Mac ARM by @RaphaelLEMAS in https://github.com/appsinacup/godot-rapier-physics/pull/557
Full Changelog: https://github.com/appsinacup/godot-rapier-physics/compare/v0.8.33...v0.8.34
v0.8.33
What's Changed
- update to godot rust 0.5.3 by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/537
- implement get closest point. Use project_point by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/542
- change from ColliderHandle to (other_collider, this_area_collider) by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/544
- fix for leak by using for class static by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/552
- Fix 2D contacts and shape cast queries by @Kyzzsa in https://github.com/appsinacup/godot-rapier-physics/pull/553
- fix replace not overriding linear and angular damping and stationary character body by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/554
New Contributors
- @Kyzzsa made their first contribution in https://github.com/appsinacup/godot-rapier-physics/pull/553
Full Changelog: https://github.com/appsinacup/godot-rapier-physics/compare/v0.8.32...v0.8.33
v0.8.32
What's Changed
- fix freeze mode by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/527
- Fix Issues with 3D Joints by @Schnorg in https://github.com/appsinacup/godot-rapier-physics/pull/528
Full Changelog: https://github.com/appsinacup/godot-rapier-physics/compare/v0.8.31...v0.8.32
v0.8.31
What's Changed
- Implement state integrate forces and fix space override by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/526
Full Changelog: https://github.com/appsinacup/godot-rapier-physics/compare/v0.8.30...v0.8.31
v0.8.30
What's Changed
- Fix area2D monitorable preventing monitoring by @jauwnio in https://github.com/appsinacup/godot-rapier-physics/pull/515
- Fix pickable inspector property having no function by @jauwnio in https://github.com/appsinacup/godot-rapier-physics/pull/517
- Add motor position targeting and fix HingeJoint3D axis bug by @Schnorg in https://github.com/appsinacup/godot-rapier-physics/pull/520
- Add experimental-threads to all by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/521
- Fix Joint3D poses, 6DOF joint motor pos & limits by @Schnorg in https://github.com/appsinacup/godot-rapier-physics/pull/523
- create polyglon using convex hull as fallback by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/522
- dont error on stale removed event by @Ughuuu in https://github.com/appsinacup/godot-rapier-physics/pull/524
New Contributors
- @jauwnio made their first contribution in https://github.com/appsinacup/godot-rapier-physics/pull/515
- @Schnorg made their first contribution in https://github.com/appsinacup/godot-rapier-physics/pull/520
Full Changelog: https://github.com/appsinacup/godot-rapier-physics/compare/v0.8.29...v0.8.30










