Skip to main content

Physics engines

SoftBody2D builds ordinary Godot nodes, so it runs on Godot Physics and on Godot Rapier Physics alike. What differs:

Godot PhysicsGodot Rapier Physics
Softbodies, breaking by distance, cutting, joint reachyesyes
Force based breaking (break_mode = FORCE)no, the joint reaction force is not exposedyes
Joint load in Debug Drawstretchreaction force
Feel at the same Softnessstiffersofter

SoftBody2DPhysics.has_rapier() is true only when the extension is installed and selected as the 2D physics engine; with Godot Physics selected the Rapier server never sees the joints and every reading is zero, so the node shows a warning.

Performance

Cost is bodies plus joints, and Vertex Interval sets the body count: halving it quadruples them. Keep physics/common/physics_ticks_per_second at 60 — a 10 ms tick cannot run 120 times a second and the frame rate collapses. Joint Reach 1 buys count at the price of a softbody that sags and self-collides.

Measured with the benchmark demo on an Apple silicon laptop with Rapier, softbodies dropped in until the frame rate gives:

configuration (51 bodies per softbody unless noted)under 60 fps atunder 30 fps at
default: interval 40, reach 2, 60 ticks/s18 softbodies (918 bodies, 5868 joints)34 (1734 bodies, 11084 joints)
same at 120 ticks/s9 (459, 2934)14 (714, 4564)
interval 60 (23 bodies each)59 (1357, 7198)120 (2760, 14640)
interval 30 (86 bodies each)20 (1720, 12000)20
reach 136 (1836, 4428)44 (2244, 5412)

So: 18 default softbodies at 60 fps, 60 at interval 60, half as many at 120 ticks/s; at 30 fps about double.

Tuning across engines

Softness is not the same scale on both engines: Rapier is softer at the same value. Lower it, or keep Joint Reach at 2.