Feature Playground

3D and WebGL · 3.5

Motion echo

Motion that leaves echoes of itself. Long-exposure photography of a moving light.

A temporal trail: fading copies left behind by movement, not spatial duplicates.

4 knobs

How it actually works

This is the clearest demonstration in the index of persistence as a mechanism, and it is the thing a plain hover shader fundamentally cannot do. The shader has no memory of the last frame. Give it one, and a single number becomes trail length.

Feed the previous frame's render target back in at reduced opacity, so the trail emerges from persistence rather than being animated. Two textures, ping-ponged: draw the moving object over a decayed copy of what was there last frame, then swap. Nothing draws the trail. The trail is what is left of everything that has not faded yet.

The knobs, named

Feedback decay is the trail length, and it is one number. Echo count, offset and blend mode are trim.

KnobSourceWhat it teaches
Feedback decay sourced What fraction of the last frame survives into this one. The verified relative uses 0.965 verbatim. This IS the trail length: 0.9 is a smudge, 0.99 is a permanent scar.
Object speed ours How fast the light moves. Fast plus high decay is a solid loop of light.
Object size ours The emitter. Small and bright reads as a spark; large reads as a wash.
Path ours What is moving. Pick pointer and you are drawing with your mouse into a decaying buffer.

sourced means the source names this parameter. ours means the source names none and the knob is our design against the mechanism. No knob here is invented and passed off as sourced.

Evidence

VERIFIED (rendered) for existence; mechanism INFERRED

/features/reverb-effect confirmed in gradientlab's 19-feature catalogue. The mechanism is INFERRED: do not claim we know how they built it. The decay-as-trail-length constant (0.965) is sourced from the index's verified GPGPU-trail relative, not from gradientlab.

Seen on
gradientlab.co/features/reverb-effect (REVERB, "Motion that leaves echoes of itself").
Dependencies
any shader context with a second render target
Difficulty
moderate
Performance
Two render targets, one extra full-screen read/write per frame. It never idles, so gate the rAF on visibility. Ours is IO-gated like everything else.
Accessibility and the floor
Under reduced motion, drop the echo count to zero, which leaves the base effect intact. Ours freezes the path and holds a single representative still.

Notes

Composability. Echo the ripple (3.1) instead of a dot and the water leaves wakes. The mechanism does not care what it remembers.

The decay constant is deceptive. It is per frame, not per second, so 0.965 means something different at 144Hz than at 60Hz, and the trail on a high-refresh monitor is genuinely shorter. Frame-rate-independent decay is pow(decay, dt * 60). We do that, and it is why the trail looks the same on both of my screens.