Peripheral Color: From Cliff to Gradient

Foveated renderers tend to desaturate the periphery too aggressively. The assumption is intuitive — acuity drops, so color must too — but the biology says otherwise. All three cone classes persist across the retina. L and M cones tile the periphery at lower density; S-cones were never dense to begin with, so their relative drop is modest. Psychophysical measurement puts blue-yellow sensitivity at 15° at ~79% of foveal, red-green at ~29% (Bowers et al. 2025). The periphery is not colorblind. It sees color at lower spatial resolution.

Scrutinizer’s previous color pipeline missed this. A single smoothstep ramp compressed the entire transition into one degree: full color at the fovea, gray by 2°. A red banner and red body text at the same eccentricity got identical treatment. Both wrong.

Original Color spectrum v2 — no foveation applied
Before Color spectrum with old desaturation — peripheral edges wash to gray
After Color spectrum with 12-band chromatic pipeline — peripheral color preserved

Original: unfoveated. Before: color dies at 2°. After: gradient rolloff, blue-yellow survives further than red-green.

What changed

Wider frequency coverage. The Difference-of-Gaussians decomposition extended from 8 bands (down to 0.35 cpd) to 12 bands (down to 0.088 cpd). The old range covered text and icons. The new range covers panel backgrounds, banners, and page-level color — exactly the scales where peripheral color perception is strongest, because S-cone signals pool spatially over large areas.

Swatch-aware preservation. The coarsest MIP level (mip[12], averaging ~64×64 source pixels) provides a free swatch signal. Its Oklab chrominance magnitude distinguishes large uniform color regions from mixed content. Swatches retain up to 30% more color than text at the same eccentricity.

Gradual ramp. The base desaturation ramp widened from 1°–2° to 1°–6°. The per-band CSF attenuation handles frequency-specific rolloff. The ramp’s job is a spatial envelope, not a cliff.

Calibrated RG decay. The red-green channel decay rate (rg_decay) increased from 0.072 to 0.085. At 12.4° (ring 5), the model’s BY/RG ratio is 1.86×, monotonically separating from 1.05× at 2.5°. The single-exponential decay cannot fully capture the biphasic RG falloff that Bowers et al. (2025) measured (steep to ~15°, then slowing), but the rank ordering and channel separation are correct across the measured range.

Validation

24px colored dots at five eccentricity rings (2.5°–12.4°), ~0.94 cpd at 45 ppd, measured through the pipeline:

Color 2.5° 7.5° 12.4°
Red 82.5% 57.8% 39.4%
Green 85.5% 65.2% 49.6%
Blue 94.6% 84.8% 73.5%
Yellow 94.2% 83.9% 72.5%

Tier 1 — must pass 9/9
All four colors decrease monotonically. BY retention ≥ 1.5× RG at 12.4° (1.86×). Both model predictions and rendered screenshots pass.

Tier 2 — should pass 2/3
BY/RG channel ratio at 12.4°: model 2.59 vs Bowers 2.72 at 15° (5% off, threshold 20%). Green tracks red more than blue (10pp vs 24pp gap). Both pass. The miss: rendered pixel values match the analytical model within 15% for only 5/20 measurements. The MIP chain and base desaturation ramp introduce quantization the model doesn’t predict. Rank ordering is correct; absolute values diverge.

Tier 3 — stretch 3/3
Model retention correlates with Hansen et al. (2009) color naming accuracy at r = 1.000. BY outranks RG at every eccentricity ring (20/20).

Full report →