Motion
Get Motion

DocsStudio

Particle systems

A Particle system layer is particles you build yourself: emitters that give birth to particles, and stacks of modules that decide where they start, how they move, how they die and how they're drawn. You build it in the particle editor, which opens as a tab in the row under the toolbar, and you see it play in the preview as you go.

10 min readMotion

Try it: Solar Wind (emitters, forces, trails and a burst on the beat).

Screenshot: a particle system's emitter and its modules
A particle system's emitters and modules.

Make one

There are two ways in.

The gallery's Particle system also starts from Motes, Rain, Pointer light, Fireworks and 3D particles: those are layers of their own, with plain settings, not emitters and modules.

Pick the layer and its settings on the right show what it holds ("Frost motes · 2 emitters, 22 modules"). Click the Particles tab button there to open the particle editor, as a tab named after the layer, in the row under the toolbar.

The layer's own settings stay small: Amount (how many are born, 0 to 4 times), Speed (0 to 4 times), and Runs on, which is Best, Graphics card or Processor. Everything else is in the particle editor.

The particle editor

Along the top: the system's name, how many emitters it has, whether it's 2D or 3D, and about how many particles are alive right now. Beside them:

Under that, the emitters stand side by side, each a column of modules. On the right is a panel with four tabs: Module (the picked module's settings, over a live view of the layer), Parameters, GLSL and System.

Emitters

An emitter is one stream of particles. A fountain might have one; fireworks have one for the rockets and one for the sparks. A system holds up to eight.

Each column's header has the emitter's name (click it to rename it) and four buttons:

A new emitter starts with a sensible stack: where it is, a spawn rate, a small sphere to start in, a lifetime, a size, a fade-out and a sprite to draw them with.

Modules and stages

Each emitter is a stack of modules, sorted into five stages. Each stage has a colour, and the modules wear it.

StageWhen it runsFor example
Emitter updateOnce a frame, for the emitterSpawn rate, Spawn burst, Spawn on beat, Spawn on click
Particle spawnOnce, as each particle is bornShape: sphere, Lifetime, Initial velocity, Initial colour
Particle updateEvery frame, for every particleGravity, Curl noise, Pointer force, Colour by life, Collide: screen
Event handlerWhen something happensReceive event, Spawn at event, Modify on event
RenderWhen they're drawnSprite, Ribbon, Mesh, Light, Trail to texture, Soft edges

To add a module, click + beside a stage and pick one. It goes in at the end of that stage. Hover a module for its tools: Earlier and Later move it within its stage, the eye turns it off, and the bin takes it away. A module that's off isn't in the shader at all, so it costs nothing.

Order matters inside a stage. Gravity then Drag is not quite the same as Drag then Gravity, and Speed limit after the forces catches what they add.

Click a module to see its settings in the Module tab, with a line about what it does. An emitter holds up to 24 modules.

A few worth knowing:

Bind a setting to something that moves

Any number in a module can follow an expression instead of staying put. Click Bind… under it. The slider becomes a line of text, already filled in with a start:

User.Amount * 0.4
Engine.Sound.Bass * 2
50 + 30 * sin(Engine.Time)

You can use numbers, + - * /, brackets, and min, max, abs, sin, cos, floor, sqrt, clamp, mix, step and pow. The names come from four families:

NameWhat it is
User.NameOne of the system's own parameters (next section)
Engine.Time, Engine.DeltaTimeSeconds since it started; seconds since the last frame
Engine.Sound.Bass, .Mid, .Treble, .LevelWhat's playing, from 0 to about 1
Engine.Beat, Engine.BeatsThe beat, and how many there have been
Engine.Pointer.X, .Y, .Active, .IdleWhere the pointer is, whether it's there, and how long it's been still
Engine.Screen.Aspect, .Width, .HeightThe screen's shape and size
Engine.QualityThe quality setting, from 0 to 1
Emitter.Age, Emitter.Alive, Emitter.SpawnRateThe emitter's own
System.Age, System.SeedThe whole system's
Engine.FocalThe system's focal length (2 unless its file sets another)

A line turns red when it can't be read. Unbind puts the plain number back. Colours and gradients can be bound too, to a colour or gradient parameter, by name.

Parameters

The Parameters tab holds the system's own settings: things you'll want to turn often, kept in one place. Add a Number, Colour, Gradient, Curve or On or off (up to 16), name it, and set it. Then bind module settings to it as User.Name.

Parameters are also how the rest of the scene reaches in. A script, or the wallpaper's settings, can set one as the layer's user.Name. Make a parameter called Amount, bind the spawn rate to User.Amount * 200, and one number now drives the whole look.

Events: one emitter starting another

Emitters can hand off to each other. This is how a firework rocket bursts into sparks where it dies.

  1. On the first emitter (the rocket), add Send event in Particle update, and tick Die or Hit something.
  2. On the second emitter (the sparks), add Spawn from event in Emitter update. Set From to the rocket emitter, When they to the same event, and How many each.
  3. Add Inherit from parent in Particle spawn if the sparks should carry on with the rocket's speed or colour.

For these of them narrows it to a share of the parents, so only some rockets burst. The Event handler stage does the same in two parts: Receive event picks the source, and Spawn at event says how many.

Modify on event is different: When a click comes, or a beat, it gives every particle within its Reach of it a Push outwards.

An emitter that spawns from another's events must run where that one does: both on the graphics card, or both on the processor. When they don't, it isn't born from them.

The System tab

GPU or CPU

Each emitter is a GPU emitter or a CPU emitter. Motion moves both on the graphics card now; a CPU emitter keeps the rules an emitter on the processor had (its own random numbers, and its own ways with a few modules), so it looks as it always did, and it holds fewer.

Graphics card (GPU)Processor (CPU)
At most, per emitter65,5362,048
Good forBig numbers: dust, snow, galaxiesSmall numbers

A CPU emitter runs every module except Collide: layer mask and Custom expression. Shape: from picture and Shape: from text give birth anywhere in their box, not only in the shape, and Ribbon and Trail to texture aren't drawn.

The layer's Runs on setting decides for the whole layer. Best lets Motion choose. Processor makes every emitter a CPU emitter, with fewer particles.

The GLSL tab and your own code

Studio turns each emitter's modules into one shader for the graphics card. The GLSL tab shows it: only the modules that are on, in their order. It says Baking… while Studio builds it and Baked when it's ready. Until then, and if it doesn't build, the emitter runs on a shared shader that reads the same settings, so you always see something.

Custom expression (in Particle update) is a few lines of your own GLSL for each particle. It can read and change p.pos, p.vel, p.age, p.life, p.rot and p.seed, with time and dt:

p.vel.x += sin(p.age * 3.0) * 0.1 * dt;

Modules that only work in the baked shader have a dot after their name, and a note under their settings.

Keep a system as an asset

Keep as asset moves the layer's system into the scene's assets (the Assets panel), under Particle systems. The layer then draws it by name, and any change you make shows in every layer that draws it.

From the Assets panel you can:

A scene keeps up to 64 particle systems. Delete one and each layer that drew it keeps a copy of its own.

Limits

WhatMost
Emitters in a system8
Modules in an emitter24
Parameters16
Particles alive in a whole system262,144 (emitters past it are given fewer)
Particles in a GPU emitter65,536
Particles in a CPU emitter2,048
Particle systems kept in a scene64
An expression160 characters

Particles are cheap on the graphics card, but not free. If a scene stutters, add Scalability and set At most alive, or lower the layer's Amount. Performance has more. Every setting of the layer is in the reference: Particle system.

Ask about this page on the forumAsk a question in Help

Last changed 2 November 2026. Something wrong here? Tell us.