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 bright target region persists after the source moves Three moments show a bright source moving right while the stored target signal at its earlier positions decays rather than disappearing immediately.t₀ · TARGET CHARGEDstored state follows lightt₁ · SOURCE MOVEDprevious position remainst₂ · DECAYolder charge fadescurrent illuminationstored target state
The source occupies only its current position, but the electrical target still contains a weaker record of earlier positions. Reading that state turns finite target response into a directional temporal trail.

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.

vidiconHistoryStepGLSL
// 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);
}
Processing pipelineBoxes mark actual render-pass boundaries.
  1. Current source + previous targetTwo input textures
  2. Pass 1 · History updateWrite the next RGBA8 target
    • Aspect-fill sample the source
    • Read the previous target
    • Apply luminance-dependent retention
  3. Pass 2 · Display compositeDefault framebuffer
    • Read the new target and direct source
    • Apply trail-strength mix
  4. Display output
Swap the history textures: the new target becomes the previous target for the next frame.

Why these steps are here

  1. Upload the current source. Procedural motion and the target history advance from the same elapsed time.
  2. Read, then write. The previous state is sampled from one texture while the next state is written to the other.
  3. Swap the textures. The new target becomes the history input for the following frame.
  4. 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.