Point Trail
Records the position history of each point over time and outputs trailing paths — with built-in fading, smoothing, and a points output for dotted trails.
Category: Shapes Menu path: Shapes > Point Trail
Ports
| Port | Type | Direction | Description |
|---|---|---|---|
points_in | points | input | Points to track (typically from PointAdvect or TrackPoints) |
out | shape | output | One open path per tracked point. Per-vertex curveu attribute (0 = tail, 1 = head); per-vertex colors when fade > 0; per-path index + inherited color |
points | points | output | Every trail sample as a point — feed DrawPoints for dotted trails. Carries curveu, opacity (the fade ramp), sourceIndex, and color (when inheriting) |
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
trailLength | scalar | 30 | Maximum number of samples kept per point |
everyNth (UI: "Frame Interval") | scalar | 1 | Sample every N frames. Higher values cover a longer time window with fewer vertices |
outputMode | enum | Polyline | Polyline = straight segments. Smooth = Catmull-Rom beziers through the samples — silky curves, especially with Frame Interval > 1 |
fade | scalar | 0 | 0 = solid trail; 1 = tail fades to fully transparent. Writes per-vertex colors, so DrawShape renders a smooth gradient along each trail (note: this overrides DrawShape's stroke color — the trail tint comes from the source point color or white) |
fadePower | scalar | 1 | Shapes the fade ramp: 1 = linear, >1 = holds opacity near the head then drops, <1 = fades immediately |
inheritColor | boolean | false | Copy each source point's color attribute onto its trail (per-path color; also tints the fade gradient) |
Expose Channels
When enabled (E button on node header), adds input ports that override params via edge connections:
| Port | Type | Overrides |
|---|---|---|
trailLength_in | scalar | trailLength |
How It Works
The trail at any frame is a deterministic function of the timeline: the upstream points sampled at the current frame and the trailLength sample frames behind it. When you scrub, export, or jump anywhere, the engine re-evaluates the upstream point chain at those history frames and rebuilds the exact trail — no warm-up, no stale state, no dependence on what was played before. A snapshot cache keeps sequential playback incremental (one upstream sample per frame), so the rebuild cost only appears on cold jumps.
Practical consequences:
- Scrubbing to any frame shows the correct full trail immediately.
- Exports match the preview exactly, regardless of the export's start frame.
- The old "Building trails" pre-roll pass is gone — it's no longer needed.
Points keep their trails as long as their stable IDs persist; a point that disappears upstream takes its trail with it, and a reborn ID starts fresh.
Frame Interval × Trail Length controls the time window: (trailLength=30, frameInterval=1) covers 30 frames of motion at full density; (30, 3) covers 90 frames at ⅓ density.
Usage Examples
Basic: Particle trails
Grid → PointAdvect (Noise vectorField) → PointTrail (trailLength: 60, fade: 1) → DrawShape (strokeWidth: 1, fillEnabled: false) → Output. Each particle leaves a 2-second trail that melts away at the tail.
Comet trails from tracked footage
TrackPoints (Features) → PointTrail (Smooth, fade 1, fadePower 2) → DrawShape. Tracked features sprout smooth comet tails that follow the footage.
Dotted trails
PointTrail's points output → DrawPoints. The opacity attribute already carries the fade ramp, so dots dissolve along the tail; map curveu through AttributeToField to drive per-dot scale too.
Colored trails
PointAttributes (target: Color, ColorField from Gradient) → PointTrail (inheritColor: on) → DrawShape. Each trail takes its particle's color.
Tips
Smoothmode pairs well with Frame Interval 2–4: fewer samples, rounder curves, longer time window.- A cold scrub re-evaluates the upstream point chain up to
trailLengthtimes for that one frame. Pure CPU chains (Grid/PointAdvect/fields) are effectively free; if the chain samples video via ImageSample, prefer moderatetrailLengthvalues. fadeuses per-vertex colors, which take priority over DrawShape's stroke color — turn oninheritColor(or color the points upstream) to control the tint.- For per-vertex effects beyond fading, the
curveuattribute (0 at the tail, 1 at the head) is always written — drive opacity/strokeWidth via ShapeAttributes + AttributeToField.
Related Nodes
- PointAdvect — the usual upstream: particles flowing through a field
- TrackPoints — tracked footage features as trail sources
- DrawShape — renders the trail paths
- DrawPoints — renders the
pointsoutput as dots - ShapeAttributes — custom per-vertex styling on trails