Saturation loss
How unequal tube channels, colour encoding, bandwidth, and analogue processing reduce chroma relative to luminance.
Visible effect
Chroma shrinks while luminance structure survives
Colour differences weaken while the luminance structure remains readable. Strong reds, greens, and blues move toward a neutral image without requiring the same reduction in black-to-white contrast.
The effect belongs to a colour-camera and analogue-signal context rather than to a single monochrome Vidicon target. Multi-tube alignment, channel response, encoding, recording, and transmission may all contribute.
Physics
Colour processing must preserve channel differences
A monochrome Vidicon produces only one signal. A colour camera first forms several filtered tube channels, then aligns their levels and combines them through a colour matrix and bandwidth-limited channel path.
Mismatch, unequal gain, matrix error, or reduced chroma bandwidth can shrink colour differences before the camera hands its output to recording or transmission equipment.
Mathematics
Interpolate colour channels toward a luma reference
Weighted luma Y defines a neutral equal-channel vector. Loss L blends the colour signal toward that vector, preserving broad brightness structure while shrinking chroma amplitude.
Shader
Saturation isolated from contrast
The shader computes a neutral reference and mixes toward it without applying gain, blur, or geometric changes.
// WHAT: Reduce colour differences while retaining readable luminance detail.
// HOW: Build a neutral grey reference, then interpolate each RGB pixel toward
// that reference according to the selected loss amount.
// WHY: Saturation loss means colour channels converge; reducing all channels
// equally would darken the picture but would not remove colour separation.
vec3 reduceSaturation(
vec3 source,
float loss,
float lumaPreservation
) {
float videoLuminance = dot(source, vec3(0.299, 0.587, 0.114));
float simpleAverage = (source.r + source.g + source.b) / 3.0;
// lumaPreservation=0 uses a plain channel average. At 1 it uses weighted
// video luminance, which better preserves the perceived brightness structure.
float neutralLevel = mix(
simpleAverage,
videoLuminance,
clamp(lumaPreservation, 0.0, 1.0)
);
return mix(source, vec3(neutralLevel), clamp(loss, 0.0, 1.0));
}- Source texture
- Luma-relative chroma reductionOne fullscreen render pass
- Measure source luma
- Construct the neutral signal
- Reduce chroma amplitude
- Mix the effect
- Display output
Why these steps are here
- Measure weighted luma.
- Construct an equal-channel neutral reference.
- Expose average-versus-luma weighting only as a diagnostic control.
- Blend by saturation loss.
- Apply effect mix independently from signal loss.
Notes
- The model operates directly in RGB and is not a complete analogue colour-matrix or composite-video simulation.
- Channel imbalance can rotate hue rather than merely reduce saturation.
- Chroma bandwidth loss may blur colour edges while leaving luma edges sharp; that requires a spatial colour-difference filter.
References
ITU-R BT.601 — studio digital television coding parameters — authoritative reference for separating luminance-related and colour-difference components in video.