Particles node
Particle System
GPU-accelerated particle system capable of rendering up to 100,000 particles in real time. A container node — double-click to enter and add Emitters, Fields, Lights, and Colliders inside. Supports 3D positioning, rotation, face-camera billboarding, and perspective rendering.
Inputs
| Port | Type | Default |
|---|---|---|
| EnableTurns the whole system off. Off clears the output, and switching back on resets the simulation to an empty pool. | bool | true |
| Position XMoves the entire system left and right, in Grafit units. Any value works. | float | 0 |
| Position YMoves the entire system up and down, in Grafit units. Any value works. | float | 0 |
| Position ZMoves the entire system in depth; positive is toward the camera, which reads as larger once Camera Distance gives some perspective. | float | 0 |
| Rotation XTilts the whole system around the X axis, in degrees, positive being clockwise. Any value works — it just keeps turning. | float | 0 |
| Rotation YTurns the whole system around the Y axis, in degrees, positive being clockwise. Any value works. | float | 0 |
| Rotation ZSpins the whole system around the Z axis, in degrees, positive being clockwise. Any value works. | float | 0 |
| ScaleUniform size of the whole system. Not clamped; 0 collapses everything to a point and negative values mirror it through the origin. | float | 1 |
| Camera DistanceStrength of the perspective. 0 is flat orthographic, 3 is the natural look, and 10 or more flattens out again. | float | 3 |
| CameraSee the whole system through a Camera node — particles, trails, lines, the depth sort and every debug overlay share the one lens, which is what keeps them aligned with a 3D Scene fed the same camera. Unplugged, Camera Distance and the classic view work exactly as before. | structure | — |
| Time ScaleSpeed of the simulation. Clamped to 0…2 — 0 freezes the swarm mid-air, 1 is real time, 2 is double speed. | float | 1 |
| External TimeDrives the simulation from your own clock, in seconds, instead of the internal one. Anything below 0 hands control back to the internal clock. | float | -1 |
| Max ParticlesCeiling on how many particles can be alive at once. Clamped to 100…50000 to keep the GPU from stalling; changing it rebuilds the pool and clears the swarm. | int | 50000 |
| WidthThe width reported on the Width output for downstream nodes. The particles themselves always render across the full view. | float | 2 |
| HeightThe height reported on the Height output for downstream nodes. The particles themselves always render across the full view. | float | 2 |
| Bloom EnableAdds a glow pass over the finished particles. Off skips it entirely and costs nothing. | bool | false |
| Bloom ThresholdHow bright a pixel must be before it glows. Not clamped; near 0 the whole image blooms, above 1 only the overbright cores do. | float | 0.5 |
| Bloom IntensityHow much glow is added back over the image. At 0 or below the pass is skipped; roughly 1…10 is usable before everything smears to white. | float | 5 |
| Bloom QualityHow wide the glow spreads, from Tight to Ultra Wide. Clamped to 1…5; wider costs more per frame. | int | 3 |
| Post-Process QualityGlobal cost lever. Full does everything, Medium halves the bloom spread and shadow resolution, Low and Off drop bloom and shadows completely. | int | 0 |
Outputs
| Port | Type |
|---|---|
| Image | image |
| WidthThe width reported on the Width output for downstream nodes. The particles themselves always render across the full view. | float |
| HeightThe height reported on the Height output for downstream nodes. The particles themselves always render across the full view. | float |
| Alive Count | int |
| Total Spawned | int |
| Particles | structure |
Overview
The Particle System node is the top-level container for Grafit's GPU particle engine. It acts as a group node — double-click to enter and place child nodes (Emitters, Fields, Lights, Colliders, Shape, Velocity, Spawn, Type, and Debug) inside. The entire simulation runs on the GPU via Metal compute shaders, supporting up to 50,000 particles at interactive frame rates on Apple Silicon. The system outputs an offscreen texture through the Image port, which can be routed to a Canvas node for compositing into the output viewport.
The Particle System manages the full lifecycle: spawning, physics simulation, field forces, collisions, trigger events, lighting, trail computation, depth sorting, and multi-pass rendering. It supports 3D perspective with configurable camera distance, billboard rendering, bloom post-processing, and per-emitter visual passes.
How It Works
Container Architecture
The Particle System is a group node, similar to a Macro Group. When you double-click it in the graph editor, you navigate inside where you can place child nodes:
- Particle Emitter — spawns particles with configurable properties
- Particle Field — applies forces (gravity, turbulence, attractors, etc.)
- Particle Collider — defines collision surfaces (planes, spheres, boxes, lines)
- Particle Light — illuminates particles with directional, point, or spot lights
- Particle Shape — configures emission shape geometry (connect to Emitter)
- Particle Velocity — configures initial particle velocity (connect to Emitter)
- Particle Spawn — configures emission timing and rate (connect to Emitter)
- Particle Type — configures visual rendering mode (connect to Emitter)
- Particle Debug — displays real-time statistics overlay
Processing Pipeline
Each frame, the Particle System executes the following phases:
- Phase 1 — Process data-producing child nodes (Shape, Velocity, Spawn, Type, Collider) so their outputs are available for emitters.
- Phase 1.5 — Route trigger events from the previous frame's GPU computation to emitter output ports (On Death, On Collision, On Lifetime).
- Phase 2 — Build GPU uniforms for all emitters, fields, colliders, and lights. Collect per-emitter visual settings (blend mode, PBR materials, textures, trail parameters).
- GPU Simulation — Dispatch the Metal compute kernel to spawn new particles, integrate physics, apply fields, resolve collisions, and update trails.
- Render — Execute multi-pass rendering with per-emitter visual types, blend modes, and textures. 3D passes render first (with depth), then 2D passes.
- Bloom — If enabled, apply bloom post-processing (extract bright pixels, Gaussian blur, composite).
System Transform
The Position, Rotation, and Scale inputs build a system transform matrix that is applied at render time, not during simulation. This means all existing particles move when the system transform changes, not just newly spawned ones. The simulation itself runs in local space (identity transform).
Time Control
The system supports three time modes:
- Internal timer (default): Accumulates real frame deltas, scaled by Time Scale.
- External time: When External Time >= 0, the system uses the external value as absolute time, ignoring the internal clock. Useful for synchronizing particles to music or external data.
- Pause: Set Time Scale to 0 to freeze the simulation while keeping particles visible.
Limits
| Resource | Maximum |
|---|---|
| Particles | 50,000 per system |
| Emitters | 128 per system |
| Fields | 16 per system |
| Colliders | 16 per system |
| Lights | 8 per system |
| Trail Length | 32 points per particle |
| Trigger Events | 1,024 per frame |
Use Cases
- Real-time particle effects: fire, smoke, sparks, rain, snow, dust
- Data visualization with particle-based representations
- Interactive art installations driven by external data (EEG, MIDI, OSC)
- Music-reactive particle systems synchronized via External Time
- 3D particle scenes with perspective, lighting, and shadows
- Cascading particle chains using the trigger system (fireworks, explosions)
Tips
- Start with one Emitter inside the system. Add Shape, Velocity, Spawn, and Type nodes connected to the Emitter to configure behavior.
- The system transform (Position/Rotation/Scale) affects all particles uniformly. Use individual Emitter positions for localized spawn points.
- Camera Distance controls 3D perspective strength. Set to 0 for flat 2D rendering, increase for dramatic depth effects.
- Bloom works best with emissive particles or additive blending. Set the Emitter's Emissive input above 0 and enable Bloom on the system.
- Use the Particle Debug node inside the system to monitor alive count, GPU timing, memory usage, and trigger events in real time.
- Keep Max Particles as low as possible for your effect. Lower counts mean less GPU memory and faster simulation.
- The Alive Count output has one-frame latency because it reads back from the GPU asynchronously, avoiding CPU stalls.
Open Particle System in the interactive catalog →
Particle System is one of 381 nodes in Grafit Pro.
Free download. Every feature for 7 days, no card. Then €99.99 once — or keep playing your projects as a Player.