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










