Multi-values in the Emitter Guide
Almost every number you see in the Emitter Guide — a starting size, a speed, a color — is a value: something the editor computes for each particle. A value starts out as a single row (a fixed number, a random range, a graph over the particle's life …), but it does not have to stay that simple. This page describes how a value grows into a multi-value: several rows combined by an expression, with rows that can themselves be multi-values.
From a single value to rows
Every value shows an S button at its right edge while it is in its simple, single form. Press it — or pick Switch to Multi-Value from the value's type menu — and the value becomes a list of rows:
- Each row is a full value of its own, with its own type (Fixed, Random, a graph, and the rest) picked from its type button.
- Each row has a one-letter name (
a,b,c…) shown at its left. - The expression line at the bottom combines the rows into the final
result, referring to them by those names —
a * b,lerp(a, b, c),a + vec2(0, b)and so on. - The + button on the expression line adds another row; the trash button on a row removes it.
The S button on the last remaining row collapses the value back into its simple form.
Nesting: a row that is a multi-value
A row of a multi-value can itself be switched to a multi-value, from the same Switch to Multi-Value entry in the row's type menu. The nested level appears inline under its row, indented, with rows and an expression line of its own — so a value like "a base size, times a variation that is itself randomized per particle" can be built entirely in the Guide, without touching the Emitter Scheme.
A few things to know:
- Levels nest up to four deep. The menu entry is simply not offered where a value does not allow nesting, or the depth limit is reached.
- A nested level that has real structure — several rows, or an expression — is framed by a pair of thin vertical lines, so where one level ends and the next begins stays readable even a few levels down. A nested level holding a single plain row stays as light as an ordinary row.
- The S button on the nested level's own row collapses the level back into a plain row (its expression is discarded; the surviving row's value is kept).
- Undo and redo treat every step of this — nesting a row, growing a level, collapsing it — like any other edit.
Whole levels can be copied and pasted: copying a nested level puts the entire level on the clipboard, and it can be pasted into any row that accepts one. See Emitter Guide presets, which also covers copying single values between rows.
Values decided at birth
Some values are computed once, when a particle is born, and stay put for the particle's whole life — the starting size, the maximum lifetime, the steady rotation axis. For these, the editor freezes the value's final result on the particle: one stored property per value, created only when the value actually varies from particle to particle. A value that is the same for every particle (all rows fixed) stores nothing at all. This keeps the per-particle state of exported effects small no matter how many rows and nested levels the value uses.
Values that are recalculated every frame — movement, forces, a color over the particle's life — instead offer a per-row storage toggle (the padlock on the row), which freezes that row's result at birth when you switch it on. Row types that only make sense frozen (Random) have it switched on for you; types that only make sense live (a graph over the particle's life) have it off. The rest is your choice.