Physics World
Set gravity and timestep for the physics world, and solve the entities wired into it.
What it does
The shared solver for every kind of simulation entity: rigid bodies, Cloth Sim, Fluid Sim, Soft Body Sim and Smoke Sim. Wire any Sim node's output into Entities and it self-classifies, so rigid bodies and cloth take the same route in. Forces (Wind, Turbulence and the rest) and Joints (Ball, Hinge) apply across everything wired in, and Gravity, Timestep, Substeps and Iterations control the whole world at once.
In a 3D scene it behaves as a metre-scale physics stage. In a composite (2D) layer it fits itself to the canvas: gravity, the ground plane and the enclosing box all rescale, so pixel-scale content falls at a plausible speed. Physics persists and advances frame to frame only through a Feedback loop, with State In from Feedback Start and State Out to Feedback End.
When to use it
Rigid bodies, cloth, fluid, soft body or smoke falling, colliding and settling together in one shared world
A floor or box to land on: Ground Mode set to Ground Plane or Box
Wind, turbulence or other force fields pushing everything in the scene
Articulated joints, hinges and ball joints, connecting rigid bodies
2D composite work where gravity and props should read correctly at pixel scale without hand-tuning
| Parameter | Type | Default | What it does |
|---|---|---|---|
entities | Any | List | Simulation entities: rigid bodies, cloth, fluid, soft body, smoke (auto-detected from _sim_type metadata) |
forces | Any | List | Force fields (Wind, Turbulence, etc.) |
joints | Any | List | Articulation joints (Ball, Hinge) between rigid bodies — from Physics Joint nodes |
state_in | Sim State | — | Simulation state from Feedback Start (connect via Feedback loop for persistent physics) |
world_id | String | "default" | Physics world identifier (share across nodes) |
gravity | Vec3 | (0, -9.8, 0) | Gravity (m/s²) |
world_scale | Number | 1 | World units per metre. Auto-fits the canvas in a 2D comp layer; 1.0 (metre-scale) in a 3D scene. Raise it if a large 3D scene falls too slowly. |
delta_time | Number | 0.017 | Simulation timestep (seconds). Wire to Feedback Start.$delta_time for timeline-locked physics. |
substeps | Number | 1 | Solver substeps per frame (more = more stable, slower) |
iterations | Number | 10 | Constraint solver iterations per substep (more = stiffer/more accurate, slower) |
reset | Boolean | false | Reset the simulation to its initial state (re-seeds all entities from rest) |
planar_lock | String | "Auto" | Planar lock: keep simulation in the XY plane. Auto = on in composite (2D) layers, off in 3D scenes. One of: Auto, On, Off. |
ground_mode | String | "Box" | Built-in ground collider: Off, Ground Plane (XZ), Box (enclosed). One of: Off, Ground Plane, Box. |
ground_y | Number | -50 | Y position of the ground plane |
ground_size | Vec3 | (500, 500, 500) | Box dimensions (width, height, depth). Used in a 3D scene; in a composite (2D) layer the box auto-fits the canvas. |
ground_friction | Number | 0.500 | Ground friction |
ground_restitution | Number | 0.300 | Ground restitution (bounciness) |
dynamic_ground | Boolean | false | Enable dynamic ground (responds to contact forces) |
ground_mass | Number | 100 | Mass of the dynamic ground collider (kg) |
contact_impulse_threshold | Number | 0 | Minimum impulse magnitude for contact events (0 = report all) |
contact_filter_ids | String | "" | Comma-separated body IDs to include in contact events (empty = all bodies) |
strength | Number | 1 | Effect strength / wet-dry (0 = no effect, 1 = full). Editable, wirable, keyframable. |
Gotchas
Substeps and Iterations apply to the whole world, not per entity. All entities share one solver, so one rigid body cannot be given more iterations than another.
World Scale is normally set automatically from where the node lives: a composite layer maps the canvas height to a metre scale, a 3D scene is assumed to be metre-scale already. If gravity looks too slow or too fast for a large or tiny scene, raise or lower World Scale by hand rather than fighting Gravity.
Reset fires for one frame and re-seeds every entity from rest, which returns a scrubbed timeline to a clean start without rebuilding the graph.
Physics advances across frames only when wired into a Feedback loop: State Out to Feedback End, State In from Feedback Start. Without that loop every cook starts the simulation fresh from rest, so nothing falls or settles.
Worked example
Add a Physics World and wire a Rigid Body Sim (or Cloth, Fluid, Soft Body) into Entities.
Set Ground Mode to Ground Plane or Box so falling objects have something to land on.
Wrap it in a Feedback loop: Feedback Start's state into State In, and State Out into Feedback End, so the simulation persists and advances each frame.
Wire a Force Field (e.g. Wind) into Forces to push everything in the world.
Read Bodies Out (or Cloth Out / Fluid Out / Soft Body Out, depending on what was wired in) downstream to render the result.
See also
Rigid Body Sim · Physics Joint · Force Field · Physics Query