Vidicon image lag
Why a photoconductive camera-tube target keeps part of a bright image between scans — and how a brightness-dependent temporal history reproduces the visible trail.
Visible effect
Motion reveals an image that the target has not released
Bright moving objects leave a soft, decaying trail behind their previous positions. Unlike spatial blur, the trail records where the object was in earlier frames and can remain visible after it has moved away.
The effect is usually strongest in highlights because the photoconductive target does not return every stored region to equilibrium at the same rate.
Physics
The photoconductive target is a short-lived analogue memory
A small target region can be approximated as capacitance with a light-dependent resistance. Illumination changes its stored potential; the scanning beam reads and partly restores it. Finite photoconductor response and incomplete discharge mean that the next scan can still contain part of the previous state.
Mathematics
A half-life makes the recurrence independent of frame rate
Let S_t be the current source, H_t the stored target state, and Δt elapsed time. The retentionr comes from a half-life rather than a fixed per-frame coefficient:
The playground interpolates between a short base half-life and a longer bright half-life. Brightness is measured from the previous target state: once a highlight moves away, its stored value must still select the slower decay or the trail would collapse immediately.
Shader
GLSL history update
Each frame uses two fullscreen passes. The history update reads the source and previous target, writes the next target, then swaps the history textures. The display pass mixes that new target with the direct source without changing the recurrence.
// WHAT: Advance one pixel of the vidicon target-history approximation.
// HOW: Choose a half-life from the previous target luminance, convert that
// half-life into frame-rate-independent retention, then blend old and new state.
// WHY: Bright target charge decays more slowly, producing trails whose duration
// remains stable when frame time changes.
float vidiconLuminance(vec3 colour) {
return dot(colour, vec3(0.2126, 0.7152, 0.0722));
}
float vidiconRetention(float deltaTime, float halfLife) {
// exp2(-dt / halfLife) guarantees exactly 50% retention after one half-life.
return exp2(-max(deltaTime, 0.0) / max(halfLife, 0.0001));
}
vec3 vidiconHistoryStep(
vec3 source,
vec3 previousTarget,
float deltaTime,
float threshold,
float baseHalfLife,
float brightHalfLife
) {
// Previous target brightness controls persistence, not the arriving source.
float brightWeight = smoothstep(
threshold,
1.0,
vidiconLuminance(previousTarget)
);
float halfLife = mix(baseHalfLife, brightHalfLife, brightWeight);
float retention = vidiconRetention(deltaTime, halfLife);
// retention=0 follows the source immediately; retention=1 freezes history.
return mix(source, previousTarget, retention);
}- Current source + previous targetTwo input textures
- Pass 1 · History updateWrite the next RGBA8 target
- Aspect-fill sample the source
- Read the previous target
- Apply luminance-dependent retention
- Pass 2 · Display compositeDefault framebuffer
- Read the new target and direct source
- Apply trail-strength mix
- Display output
Why these steps are here
- Upload the current source. Procedural motion and the target history advance from the same elapsed time.
- Read, then write. The previous state is sampled from one texture while the next state is written to the other.
- Swap the textures. The new target becomes the history input for the following frame.
- Composite once. Trail strength mixes the stored target with the direct source for inspection without changing the recurrence itself.
Reset copies the current source into target history. Resize also resets because old target pixels no longer correspond to the new render surface.
Notes
- This compact model does not simulate the target as a distributed RC network or reproduce line-by-line beam timing.
- Real lag depends on target material, illumination, operating voltage, temperature, and scan conditions; the two half-lives are an explanatory approximation.
- The model stores RGB together. Multi-tube colour cameras can have different lag in each channel and may produce coloured trails.
- History requires persistent GPU memory and a continuous render sequence. A single still image cannot demonstrate this effect.
References
RCA Review, June 1961 — Vidicon performance — primary research on Vidicon beam operation, lag, resolution, dark current, and local contrast.
RCA Review, September 1954 — television pickup tubes — primary camera-tube research covering aperture response, lag, flare, transfer response, scanning, and shading.