Particles can be stopped by two different things, and they are separate features with separate costs. Collision is particle-to-object: a layer’s artwork becomes a signed-distance field and every particle is pushed out of it (or held inside it). Packing is particle-to-particle: the half that turns a spray into a pour, a pile, a jar of beads, a mould filling up.
Both live in the Particle Solver‘s Collision tab.
Colliders
Pick a layer and its artwork becomes an obstacle. A system can carry up to four colliders, each with its own source, pose and behaviour.
- Faces — Outer makes the shape an obstacle particles bounce off; Inner makes it a container they are kept inside.
- Bounce — how much speed survives a contact.
- Depth — the shape is flat artwork, so this is how far it is extruded through z, with front and back faces.
- Size, Position and Rotation lay the artwork into the Solver Box. Rotation is applied on top of the layer’s own.
- Fit to the layer sizes the collider to its source in one click.
The fluid respects a collider too: flow routes around an obstacle, or stays inside a container.
Follow the layer
Off by default, and off is a real behaviour rather than a lesser one. The collider’s source is an artwork snapshot with no transform of its own, so Size / Position / Rotation say where to lay it in the box, and then they are frozen — move the layer and the collider stays.
Turn Follow the layer on and the live pose is read off the source layer every step: keyframes, parenting and scale included, so the collider tracks the artwork rather than only the pose you gave it. Those three fields become the fallback for a source that has been deleted or trimmed out of the current time.
It costs a different bake, not a bigger one: a followed collider is baked in the artwork’s own local space and sampled through the source’s inverse transform, because a box-space field would be invalidated by every frame of motion.
Opening a side
A container that stops being closed, at a time you choose. Open side picks Top, Bottom, Left or Right, with:
- Opens at — clip seconds when the side starts to open.
- Open over — how long it takes to go from shut to fully open. 0 is a trapdoor.
- Opening width — how much of the wall becomes a doorway. 90° is the flat part of that side; widen it to open the corners too.
The opening is gated on the contact normal, not on position, which is what makes it useful on a letter or a logo rather than only on a box: bottom opens every surface whose inward normal points up — the floor of every stroke of a letter, rather than a half-plane cut through the middle — and it keeps working once a particle is outside, because the ground under the shape has the same inward normal as the floor it fell through.
With four colliders and a schedule on each, different collisions at different times come free.
Particles already outside
A container hauls back anything outside it, and while it is the only thing placing particles that is correct — emission is clipped to the inside, so “outside” can only be drift, and pulling it back is a repair.
It stops being correct the moment the container is not the whole story: a collider that appears part-way through a clip finds a cloud already spread across the frame and sucks all of it inward, which reads as the shape inhaling. Particles already outside ▸ leave them holds what is inside and lets the rest be. An open side forces this on for as long as the door is open, whatever the switch says — letting particles out and then dragging them back is not a behaviour anyone would choose.
Packing — particles that collide with each other
Off by default, and genuinely out of the way when it is off. A contact needs a radius, and radius comes from the drawn particle size, which is deliberately not part of what decides a re-simulation — so with Packing off the whole block contributes nothing and the simulation is identical to one from before the feature existed.
Turn it on and particles stop occupying the same point. Emission refuses to spawn into occupied space, the collider knows how big a particle is, and a settled pile wakes when the air around it changes.
| Control | What it does |
|---|---|
| Substeps | Smaller solver steps. This is what makes a pile stack — it matters more than Iterations. |
| Iterations | Passes over the contacts per substep. Raises stiffness; costs less than a substep. |
| Radius scale | Collision radius as a fraction of the drawn size. A soft sprite’s solid core is well inside its quad, so drop this until the pack looks like it is touching. |
| Friction | Grip at each contact. This is what gives a pile its angle of repose instead of a puddle. |
| Bounce | How much speed survives a contact. 0 is the packing case. |
| Gap | Extra rest separation — beads that pack without touching. |
| Stiffness | Fraction of an overlap resolved per iteration. Below 1 the pack reads softer. |
| Cohesion and Cohesion range | Short-range attraction: clumps, foam, wet sand. Range is a multiple of the contact distance. |
| Sleep and Settle frames | How long a bead must stay put before it stops being simulated. Lower is faster to bake and quicker to freeze a pile that was still creeping. |
A pulse waits for room
With Packing on, births that have nowhere to go are refused — that is the self-throttle, and a Rate emitter simply asks again next frame.
A pulse fires once, so anything it could not place used to be gone for good: 900 particles into a container that holds about 550 placed 76 and dropped the rest, and never looked again even after the container’s floor opened and it emptied. The remainder is now remembered and retried, so the mould fills as room appears, and fills again when a side opens or the collider leaves. The retry backs off while nothing is fitting and snaps back the moment something does, so a mould that is simply full costs a few tests a frame rather than a few thousand.
Particles in the stats line counts what was actually lost, not how many times the solver looked.
Leave a Reply