Spawn
Spawn entities from any source geometry at a controlled rate and track the age of each one.
What it does
Spawn creates new entities, particles, from any source and keeps them alive over time. Each cook it ages existing entities, spawns new ones at a rate or in a one-shot burst, and removes any whose age has passed their lifetime. Inside a feedback loop, the loop holds the entity pool's persistent memory across frames. With entities unwired, Spawn keeps its own pool internally, so a bare Spawn still emits and evolves a stream.
New entities take initial velocity, size, and colour from Spawn's own parameters, or inherit colour, normal, and scale from the source points when Inherit Source Attributes is on. Gravity and damping integrate into velocity every frame, so points wired into Spawn can already read as a small fountain or a puff of dust with no other nodes.
When to use it
A particle stream, fountain, or dust puff from points, a shape's outline, a mesh surface, a distance field's interior, or an image's bounds.
Gameplay entities (bullets, pickups, debris) inside a feedback loop, with per-frame birth, ageing, and death.
An exact number of children spawned at every source point, for chain reactions or guaranteed fan-out, rather than a randomly scattered total.
A one-shot puff of particles sampling colour, velocity and mass out of a field, with no ageing or lifecycle.
| Parameter | Type | Default | What it does |
|---|---|---|---|
entities | Collection | — | Existing entities to maintain (connect from feedback loop) |
source | Collection or Field or Color Field or Vec3 | — | Where to spawn: Points, Shapes, Geometry, SDF, Raster, or Vec3 |
rate | Number | 10 | Entities per second (fractional rates handled probabilistically) |
burst | Number or Boolean | — | Spawn this many entities immediately (non-zero triggers burst) |
enable | Number or Boolean | — | Emit at `rate` only while this is true (pauses the rate stream when false; burst is unaffected) |
per_source_count | Number | 0 | Spawn exactly N children per source point (0 = use rate/burst instead). Deterministic fan-out for chain reactions. |
lifetime | Number | 2 | Lifetime in seconds for new entities (@life attribute) |
velocity | Vec3 | (0, 1, 0) | Initial velocity (@v) for spawned entities |
velocity_randomness | Number | 0 | Direction spread as a cone around @v (0 = laser, 1 = full sphere) |
gravity | Vec3 | (0, 0, 0) | Constant force (gravity/wind) added to velocity each frame. Y up; downward = negative Y. |
damping | Number | 0 | Velocity damping / air drag per second (0 = none). Frame-rate independent. |
mass | Number | 1 | Per-particle mass (@mass). Gravity is unaffected (it's an acceleration); force-response graphs divide impulses by @mass. |
lifetime_variance | Number | 0 | Per-particle @life spread (0 = uniform, 1 = ±100% variation) |
size | Number | 1 | Scale (@pscale) for spawned entities |
color | Color | rgba(1.00, 1.00, 1.00, 1.00) | Color (@Cd) for spawned entities |
inherit_source_attributes | Boolean | true | Copy @Cd, @N, @pscale from source points to spawned entities |
auto_age | Boolean | true | Increment @age by delta_time each frame on existing entities |
max_entities | Number | 0 | Cap total entities -- spawning stops when limit reached. 0 = no limit. |
seed | Number | 0 | Random seed for spawn position and velocity jitter |
candidate_count | Number | 4096 | How many candidate positions to scatter over a mesh/shape/SDF/volume/raster source (ignored for Points) |
bounds_min | Vec3 | (-1, -1, -1) | Lower corner of the field-sampling bbox (Field(Record) source only) |
bounds_max | Vec3 | (1, 1, 1) | Upper corner of the field-sampling bbox (Field(Record) source only) |
opacity | Number | 1 | Layer opacity (0 = transparent, 1 = opaque). Editable, wirable, keyframable. |
Gotchas
Per Source Count overrides Rate and Burst entirely once above 0, and works with Points or an explicit list of positions only. On any other source it is ignored and Spawn falls back to Rate/Burst.
Burst left unwired gives an initial pop of particles the moment a source is connected, even on a paused or static frame. Wiring Burst replaces that default pop: a switch re-triggers the pop, a number sets the exact count.
Enable pauses the continuous Rate stream without touching Burst, for emitting only while a condition is true without losing one-shot bursts.
When the source is a field of values rather than points, a shape, or geometry, Spawn switches to a one-shot mode: particles are re-jittered inside the Bounds Min/Max box every frame and their properties read from the field. There is no ageing or death in this mode, and Lifetime, Auto Age, and the Died output do not apply.
Worked example
Add a Points node (or any point source) and wire it into Spawn's
source.Raise Rate for a denser stream, or set Burst for an immediate one-shot pop of particles.
Adjust Velocity and Velocity Randomness to shape the spread, and dial in Gravity so particles arc and fall.
For persistent, ageing entities, drop Spawn between a Feedback Start and Feedback End and wire the loop's carried collection into
entities.
See also
Stamp · Feedback Start · Points · Collections