RetroLens is a post-processing package for Unity 6 (URP) that covers
the full range of CRT and LCD display simulation — 21 effect groups
in total, built natively on the Render Graph API.
On the CRT side: scanlines, phosphor masks, barrel distortion, signal
noise, convergence errors, halation, beam current, VHS composite,
NTSC/PAL signal, interlacing, ghosting, glitch lines, signal ringing,
screen glow, vignette, framerate limiting, and more. LCD support adds
subpixel grid layouts (RGB stripe, BGR stripe, PenTile) and motion
blur with backlight bleed. A palette restriction mode locks output to
12 authentic console palettes — NES, Game Boy, CGA, EGA, and others
— with Bayer dithering.
73 built-in presets cover the spectrum from PVM Professional and Sony
Trinitron to VHS Tracking Lost and Ditherpunk. LCD presets include
Game Boy DMG, GBA, PSP, DS, and Game Gear. All 73 are tuned by hand.
Custom presets are saved and browsed through the built-in Preset Browser.
Any two presets can be blended at runtime with animation curve support:
crt.BlendToPreset("VHS Home Video", duration: 1.5f);
CRT power sequences handle warmup, shutdown, channel switching, and
hold failure, each driven by configurable timing curves. A Timeline
track is included for driving these from cinematic sequences.
A real-time Screen Light samples the on-screen image and casts it
into your scene as a dynamic light source.
The Retro Audio Filter runs on Unity's audio thread and covers bit
crushing, sample rate reduction, tape instability (wow and flutter),
analog interference (mains hum, flyback whine, vinyl crackle), six
speaker profiles, and waveshaping saturation. Audio settings are
stored per-preset and blend alongside visuals automatically.
Three quality tiers let you balance fidelity against performance.
Low covers the basics: scanlines, vignette, color grading, pixelation.
Medium adds noise, convergence, barrel distortion, and phosphor masks.
High adds ghosting, glitch, VHS composite, halation, and beam current.
Tiers are set per-platform through the Volume component or via script.
The scripting API exposes every parameter at runtime:
if (RetroLensEffectController.TryGetActive(out var crt))
{
crt.ApplyPreset("Arcade 1984");
crt.SetScanlineIntensity(0.7f);
crt.SetQualityTier(RetroLensQualityTier.Medium);
}
crt.OnPowerOnStart += () => PlaySound("crt_warmup");
crt.OnPowerOffComplete += () => LoadNextScene();
Seven sample scenes are included: a feature showcase, preset gallery,
TV room, transition demo, and a synthwave environment used as shared
content across scenes.
No per-frame allocations on hot paths. Shader variants are stripped
at build time. Full C# and HLSL source is included — no DLLs.
Requires Unity 6 (6000.0+) and URP 17.0+.
Support: info@pinkrooster.nl