Quick answer: Stacks jitter because the solver cannot fully resolve many contacts in one step. Raise the solver iterations, keep Can Sleep on, use simple convex shapes, avoid big mass differences between stacked bodies, never set a RigidBody's position every frame, and in 3D consider the Jolt physics engine.

A single box resting on the floor is stable. Stack five and they start buzzing, sliding apart or slowly drifting. That is a solver limitation, and it responds to a handful of settings and scene changes.

Why stacks jitter

Each physics step, the solver resolves every contact a fixed number of times. A tall stack is a chain of contacts that all depend on each other, and when the iterations run out before the chain is consistent, the leftover error shows up as small corrections every frame: vibration.

1. Give the solver more iterations

Project Settings > Physics > 2D (or 3D) > Solver > Solver Iterations controls how many passes the solver makes. Raising it improves stacking at a CPU cost. Try doubling it and measure.

2. Let bodies sleep

A body that has settled can sleep and stop being simulated until something touches it. Check that Can Sleep is on, and do not wake bodies unnecessarily — calling apply_force() or changing properties every frame keeps them awake and jittering.

3. Use simple shapes

Boxes, spheres and capsules stack far better than concave or high-polygon shapes. In 3D, never give a moving RigidBody a ConcavePolygonShape3D; use convex hulls or compound primitives instead. Keep shapes at a sensible scale, since tiny or huge bodies amplify numerical error.

4. Avoid extreme mass ratios

A 1 kg crate under a 1,000 kg crate is a hard problem for any iterative solver. Keep the mass of stacked bodies within roughly 10:1 of each other.

5. Do not move RigidBodies by setting position

Writing position or global_transform on a RigidBody every frame fights the solver and produces jitter. Move them with forces and impulses, or change state safely in _integrate_forces():

func _integrate_forces(state: PhysicsDirectBodyState3D):
    if reset_requested:
        state.transform.origin = spawn_point
        state.linear_velocity = Vector3.ZERO
        reset_requested = false

If the object only needs to be pushed by gameplay code and never simulated, use a CharacterBody or an AnimatableBody instead.

6. Physics tick rate and interpolation

A higher Physics Ticks Per Second gives the solver more steps per second to settle a stack. If the jitter only appears on high-refresh displays, it may be render jitter rather than physics, which physics interpolation fixes.

7. Try Jolt for 3D

From Godot 4.4, Jolt Physics ships with the engine. Set Project Settings > Physics > 3D > Physics Engine to Jolt Physics. Jolt is generally much more stable for stacks and piles. Test thoroughly, as some behaviour (such as joint and Area details) differs from Godot Physics.

Related fixes