Scanline construction
How the camera tube’s electron beam converts a two-dimensional target pattern into a sequential signal one horizontal line at a time.
Visible effect
A two-dimensional target becomes a sequential line raster
The stored target image is read as a raster: one horizontal path after another, forming a time-varying electrical signal rather than emitting a complete frame simultaneously. Finite line spacing and beam aperture limit vertical detail.
The playground exaggerates line separation to make sampling visible. Those dark separators are a diagnostic visualization of the camera raster, not a claim that a camera tube inherently adds display-CRT scanlines to its output.
Physics
The electron beam reads target charge along repeated horizontal paths
Deflection coils guide the read beam across one line, retrace it, and advance it vertically. The resulting current varies over time and is assembled into a raster by synchronized equipment.
The implementation exposes the sampling operation explicitly and keeps its visual line aperture diagnostic.
Mathematics
Sample each output row from its line centre
Line count N selects integer line index ell. The source is sampled at centre vc, while aperture function a visualizes the finite vertical beam footprint within that line cell.
Shader
Explicit line-centre sampling and aperture
The shader quantises vertical coordinate to a line centre, samples the target there, and optionally modulates the cell to expose its aperture.
// WHAT: Show how a continuous target image is sampled as horizontal scan rows.
// HOW: Assign every destination y coordinate to a line index, sample the source
// at that line's centre, and optionally reveal a finite vertical beam aperture.
// WHY: A camera tube reads stored target charge sequentially line by line; the
// diagnostic dark gaps explain sampling and are not claimed CRT display gaps.
vec3 constructScanlines(
sampler2D source,
vec2 destinationUv,
float destinationAspect,
float sourceAspect,
float lineCount,
float aperture,
float visibility
) {
float safeLineCount = max(2.0, lineCount);
float lineIndex = floor(destinationUv.y * safeLineCount);
float lineCenterY = (lineIndex + 0.5) / safeLineCount;
// Keep horizontal position continuous but quantize vertical sampling to the
// centre of one camera scan row. The helper also handles source aspect crop.
vec2 sampleUv = vidiconSourceUv(
vec2(destinationUv.x, lineCenterY),
destinationAspect,
sourceAspect
);
vec3 sampledLine = texture(source, sampleUv).rgb;
// linePhase is zero at a row centre and one at the boundary between rows.
// beamTransmission is only an explanatory aperture overlay.
float linePhase = abs(fract(destinationUv.y * safeLineCount) - 0.5) * 2.0;
float safeAperture = clamp(aperture, 0.05, 1.0);
float beamTransmission = 1.0 - smoothstep(
safeAperture,
1.0,
linePhase
);
return sampledLine * mix(
1.0,
beamTransmission,
clamp(visibility, 0.0, 1.0)
);
}- Source texture
- Camera raster samplingOne fullscreen render pass
- Select an integer scan line
- Sample the target at the line centre
- Evaluate the diagnostic beam aperture
- Preserve continuous horizontal sampling
- Display output
Why these steps are here
- Choose a finite visible line count.
- Calculate integer line index.
- Sample at the centre of that line.
- Apply a controllable diagnostic aperture.
- Keep horizontal coordinate continuous.
Notes
- The model does not encode blanking, sync pulses, interlace, retrace, or video bandwidth.
- At realistic line counts the structure may be below the playground canvas resolution.
- Use the visibility control only as an explanatory overlay, not as evidence of how a specific display would reproduce the signal.
References
RCA Review, September 1954 — television pickup tubes — primary camera-tube research covering aperture response, lag, flare, transfer response, scanning, and shading.
RCA Review, June 1961 — Vidicon performance — primary research on Vidicon beam operation, lag, resolution, dark current, and local contrast.