Point Advect
Moves points through a vector field over time using Euler integration. Stateful -- positions accumulate frame by frame.
Category: Point Ops Menu path: Point Ops > Point Advect
Ports
| Port | Type | Direction | Description |
|---|---|---|---|
points_in | points | input | Source points (seed positions come from layer start frame) |
field_in | vectorField | input | Vector field that drives point motion |
out | points | output | Advected points at the current frame |
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
speed | scalar | 100 | Velocity multiplier applied to the field |
substeps | scalar | 1 | Integration substeps per frame (higher = more accurate in fast-changing fields) |
How It Works
PointAdvect is a stateful node. At the layer's start frame, it reads the upstream points as seed positions. On each subsequent frame, it evaluates the vector field at each point's current position and moves the point by field_value * speed * dt, using forward Euler integration.
Results are stored in a SimulationCache keyed by (composition, node, frame). This means:
- Sequential playback builds on the previous frame's result (fast).
- Scrubbing to an arbitrary frame replays from the nearest cached frame.
- Changing upstream parameters (different seed points, different field) invalidates the cache via a validity hash.
Use resetSimulation (or the reset button in the UI) to clear the cache and start fresh.
Usage Examples
Basic: Flowing particles
Grid -> PointAdvect (field: Noise.vectorField, Curl type) -> DrawPoints -> Transform2D -> Output. Points drift along a smooth, swirling flow field.
Trails
Grid -> PointAdvect -> PointTrail -> DrawShape -> Transform2D -> Output. Each point leaves a polyline trail showing its path history.
Controlled speed
Connect a Time or Math node to drive speed via keyframes. Ramp speed from 0 to 200 over the first second for a gradual start.
Tips
- Use Curl noise type for the field -- it produces divergence-free flow that avoids clumping and convergence points
- Increase
substepswhen the field changes rapidly in space (tight vortices) to prevent points from jumping through features - The simulation snaps
comp_frameto integer for cache lookup, so sub-frame motion blur sampling still uses the integer-frame simulation state - Playback must be sequential for correct results -- scrubbing backwards replays from the start (or nearest cached frame)
resetSimulationclears both SimulationCache and TrailCache
Related Nodes
- Grid -- common seed point source
- Noise -- vectorField output drives the flow
- PointTrail -- record advected positions as polyline trails
- PointAttributes -- set per-point attributes before or after advection
- DistanceField -- shape-based vector field for advection around geometry