‘Retro’ is a comprehensive collection of retro-style post-processing effects, designed to transform modern 3D visuals into nostalgic retro aesthetics. It consists of the following effects:
All ‘Retro’ effects are developed for ‘Universal Render Pipeline’ (or URP), which means they will not work with Built-In, or HDRP.
All effects are compatible with Unity 6, and use the new Render Graph. You will need to have URP version 17.0.2 or higher installed. In the official documentation you can find the steps to install it correctly.
Make sure that the ‘Compatibility Mode’ is disabled (Project Settings > Graphics > Render Graph).
The effects must be registered in your project’s URP configuration:
Once installed, you have to add the effect you want to use from ‘Retro’ as a ‘Render Feature’. This official tutorial tells how to do it.
Remember that the camera you are using must have the ‘Post Processing’ option enabled.
‘Quality’ levels (Project Settings > Quality) can have their own active ‘Render Pipeline Asset’.
If so, whatever you assign in ‘Scriptable Render Pipeline Settings’ in ‘Graphics’ will be ignored.
Remember to add the effect to the quality levels you want to use.
To apply the effects to your scene:
To increase compatibility with VR devices, I recommend that you select ‘Stereo Rendering Mode’ in ‘Multi Pass’ mode:
Immerse players in the analog warmth of the 80s and 90s. ‘VHS’ meticulously recreates the tracking errors, color bleeding, tape noise, and magnetic degradation of vintage home video, perfect for found-footage horror, flashbacks, or a cozy retro vibe.
To ensure optimal performance and compatibility, your project must meet the following requirements:
The effect must be registered in your project’s URP configuration:
To apply the effect to your scene:
The signature VHS appearance emerges from multiple layers of tape-related distortions that simulate physical tape mechanics and signal degradation. The tape wave creates horizontal displacement using both low and high-frequency noise, simulating the mechanical instability of VCR playback heads. This is implemented through UV coordinate perturbations that shift pixel sampling positions horizontally across the screen.
Tape creases represent physical damage to the magnetic tape, manifested as vertical bands of distortion that scroll vertically through the image. These creases combine a phase calculation using sine functions with noise-based modulation, creating realistic banding patterns that vary in intensity and position. The crease strength determines how severe these distortions appear, while the count parameter controls the number of bands present simultaneously.
The bottom warp effect simulates head-switching noise, a characteristic artifact visible at the bottom of VHS recordings where the playback head transitions between tracks. This effect applies displacement and jitter specifically to the lower portion of the screen based on the height parameter, creating the distinctive horizontal tearing pattern at the image bottom.
VHS technology employed a sophisticated color encoding system with significantly reduced bandwidth for chrominance (color) information compared to luminance (brightness). The effect faithfully replicates this by downscaling the chroma channel to 1/16th resolution and luma to 1/2 resolution before blending them back together. This bandwidth reduction causes the characteristic color bleeding and softness inherent to VHS recordings.
The implementation processes the image in YIQ color space rather than RGB, allowing for accurate simulation of how VHS encoded color information. YIQ separates luminance from chrominance into in-phase and quadrature components. This enables precise control over the characteristic color shifts and saturation variations typical of aging VHS tapes.
With ‘Intensity’ you can control the overall strength of the effect [0.0 - 1.0]. If it is 0, the effect will not be active.
The effect provides two quality modes that balance computational cost against visual fidelity. Each mode offers different parameter availability suited for target platform capabilities.
| Quality | Determines shader complexity and available features |
| Samples | YIQ calculation samples (HighFidelity only) |
| Resolution | Final output resolution scaling |
The resolution parameter scales the final output, with Quarter (1/4) providing the classic VHS appearance. Lower resolutions increase the apparent pixelation and blur while improving performance, making it possible to achieve different aesthetic results from near-digital to heavily degraded tape looks.
The YIQ color space parameters control color reproduction and bandwidth limitation.
| YIQ | YIQ color space (x: luma, y: in-phase, z: quadrature) |
| Luma Band | Luma resolution reduction factor (VHS uses half) |
| Color Noise | Tape noise |
| Chroma Band | Chroma resolution reduction factor (VHS uses 1/16th) |
The YIQ parameter provides fine-grained control over color reproduction. The luma component (x) affects overall brightness, while in-phase (y) and quadrature (z) components manipulate specific color channels. Increasing these values creates the characteristic oversaturated colors of VHS, while decreasing them produces the faded appearance of aging tapes.
Shadow tinting simulates color casts common in VHS recordings due to phosphor decay or tape chemical breakdown. The default purple tint creates a distinctive horror aesthetic, but this can be adjusted to match specific visual requirements.
| Shadow Tint | Shadow tint color |
| White Level | Color levels (white) |
| Black Level | Color levels (black) |
The YIQ parameter provides fine-grained control over color reproduction. The luma component (x) affects overall brightness, while in-phase (y) and quadrature (z) components manipulate specific color channels. Increasing these values creates the characteristic oversaturated colors of VHS, while decreasing them produces the faded appearance of aging tapes.
Shadow tinting simulates color casts common in VHS recordings due to phosphor decay or tape chemical breakdown. The default purple tint creates a distinctive horror aesthetic, but this can be adjusted to match specific visual requirements.
The physical tape degradation is controlled through multiple parameters that simulate different aspects of VHS signal instability and damage.
| Tape Crease Strength | Noise band that also deforms the color |
| Tape Crease Noise | Band noise |
| Tape Crease Velocity | Band speed |
| Tape Crease Count | Number of bands |
| Tape Crease Distortion | Band color distortion (HighFidelity only) |
The tape parameters work synergistically to create the organic, unpredictable nature of VHS playback. The crease system combines periodic motion with noise modulation, preventing the bands from appearing artificial or repetitive. The velocity parameter can be negative to reverse the scrolling direction or set to zero for stationary bands, useful for creating paused VCR effects.
The tape noise system simulates high and low frequency mechanical distortions from the tape transport mechanism.
| Tape Noise High | Tape distortion (high frequency) |
| Tape Noise Low | Tape distortion (low frequency) |
AC beat interference simulates electrical hum from power sources affecting the analog signal, creating horizontal bands of brightness variation that scroll through the image. This was particularly common in older consumer VCRs with poor shielding.
| AC Beat Strength | Amount of AC interferences |
| AC Beat Count | AC interferences density |
| AC Beat Velocity | AC interferences velocity |
The bottom warp effect simulates head-switching noise, a characteristic artifact visible at the bottom of VHS recordings where the playback head transitions between tracks.
| Bottom Warp Height | ‘Head-switching’ noise height |
| Bottom Warp Distortion | Distortion strength |
| Bottom Warp Jitter Extent | Extra noise |
| Vignette | Vignette effect strength |
Standard color correction parameters apply to the final output.
| Brightness | Additive luminance offset |
| Contrast | Mid-tone contrast expansion |
| Gamma | Nonlinear tonal mapping (inverted) |
| Hue | Color wheel rotation |
| Saturation | Color intensity relative to luminance |
using UnityEngine;
using UnityEngine.Rendering;
using FronkonGames.Retro.VHS;
// ...
[SerializeField]
private VolumeProfile volumeProfile;
// Access the effect
if (volumeProfile.TryGet(out VHSVolume volume))
{
volume.intensity.value = 1.0f;
volume.quality.value = Quality.HighFidelity;
volume.samples.value = 8;
volume.resolution.value = Resolution.Half;
volume.tapeCreaseStrength.value = 0.8f;
volume.colorNoise.value = 0.2f;
// ...
}The effect executes in a single render pass. Cost varies with quality setting and sample count.
For a well-maintained VCR recording appearance:
For maximum degradation and damage simulation:
For unsettling, atmospheric effects:
Unlock the golden age of gaming with ‘Pixelator’. This versatile powerhouse goes beyond simple downsampling, offering advanced pixelation modes (including circular and hexagonal), rich dithering patterns, and authentic color posterization to craft distinctive low-res art styles instantly.
To ensure optimal performance and compatibility, your project must meet the following requirements:
The effect must be registered in your project’s URP configuration:
To apply the effect to your scene:
The foundation of Pixelator lies in its diverse pixelation modes that go far beyond simple square blocking. Each mode implements unique UV coordinate transformations and shape-based sampling to create distinct visual styles.
Rectangle Mode provides the classic blocky pixelation by dividing the screen into uniform rectangular cells. The pixel size and scale parameters control the coarseness, while the aspect ratio settings ensure proper proportions across different screen resolutions.
Circle Mode creates circular pixel clusters with adjustable radius, producing an organic, bubble-like aesthetic. The background color parameter fills the gaps between circles, allowing for creative color combinations and transparency effects.
Hexagon Mode implements hexagonal tiling for a honeycomb-like pattern that mimics certain LED displays and artistic styles. The geometry-based sampling creates natural edge transitions between adjacent cells.
Knitted Mode simulates woven textile patterns with configurable thread counts. This mode creates interlaced visual effects reminiscent of knitted fabrics or basket-weave patterns, adding tactile texture to digital imagery.
Specialized Modes including Triangle, Diamond, and Leaf shapes offer additional artistic options for specific aesthetic requirements. Each mode uses custom shader logic to define cell boundaries and sampling regions.
Pixelator employs sophisticated color processing techniques to achieve authentic retro color limitations. The posterization system quantizes color values to discrete steps, configurable separately for RGB channels, luminance, or HSV color space.
The dithering implementation uses ordered Bayer patterns with adjustable pattern scales (2x2, 4x4, or 8x8). The threshold scale and color steps parameters control the intensity and granularity of the dither effect, creating smooth color transitions even with limited palettes.
Gradient mapping via CIELAB color space enables accurate color replacement based on luminance values. The system samples multiple points along the gradient curve to find optimal color matches, with optional luminance preservation for maintaining image depth.
The integrated filter collection provides one-click aesthetic transformations. Filters operate by applying color matrix transformations, overlay blending, and specialized channel manipulations:
With ‘Intensity’ you can control the overall strength of the effect [0.0 - 1.0]. If it is 0, the effect will not be active.
The core pixelation behavior is controlled through these parameters that define shape, size, and appearance of the pixel grid.
| Pixelation Mode | Shape of the pixelation cells |
| Pixel Size | Size of individual pixels |
| Screen Aspect Ratio | Use screen aspect for pixel scaling |
| Aspect Ratio | Custom aspect ratio when not using screen |
| Pixel Scale | Scale multiplier for pixel dimensions |
| Radius | Circle radius (Circle mode only) |
| Background | Fill color for gaps between shapes |
| Threads | Thread count (Knitted mode only) |
These parameters control gradient-based color mapping to achieve limited palette aesthetics.
| Gradient Intensity | Strength of gradient color mapping |
| Gradient | Color gradient for mapping |
| Apply Luminance | Preserve original luminance |
| Luminance Range | Min/Max luminance for gradient mapping |
| Gradient Mapping Mode | Color space for gradient matching |
| CIELAB Samples | Sample count for CIELAB mode |
A tool with thousands of palettes is included. Just click on the magnifying glass to find the perfect color palette.
| Chromatic Aberration Intensity | Color channel separation strength |
| Chromatic Aberration Offset | RGB channel offset directions |
| Bevel | 3D bevel effect on pixel edges |
The dithering implementation uses ordered Bayer patterns with adjustable pattern scales (2x2, 4x4, or 8x8).
| Dither Intensity | Strength of dither pattern |
| Dither Pattern Scale | Bayer pattern size (2x2, 4x4, 8x8) |
| Dither Threshold Scale | Dither pattern influence |
| Dither Color Steps | Number of color steps for dithering |
The posterization system quantizes color values to discrete steps, configurable separately for RGB channels, luminance, or HSV color space.
| Posterize Intensity | Overall posterization strength |
| Posterize RGB Steps | Steps per RGB channel |
| Posterize Luminance Steps | Steps for luminance mode |
| Posterize HSV Steps | Steps for HSV mode |
| Posterize Gamma | Gamma correction for posterization |
| Filters Intensity | Global filter strength |
| Sepia Intensity | Sepia tone strength |
| Cool Blue Intensity | Cool blue filter strength |
| Warm Filter Intensity | Warm overlay strength |
| Invert Color Intensity | Color inversion strength |
| Hudson Intensity | Hudson filter strength |
| Hefe Intensity | Hefe filter strength |
| X-Pro Intensity | Cross-process strength |
| Rise Intensity | Rise filter strength |
| Toaster Intensity | Toaster filter strength |
| IR Filter Intensity | Infrared filter strength |
| Thermal Filter Intensity | Thermal vision strength |
| Duotone Intensity | Duotone effect strength |
| Duotone Color A | First duotone color |
| Duotone Color B | Second duotone color |
| Night Vision Intensity | Night vision strength |
| Pop Art Intensity | Pop art filter strength |
| Blueprint Intensity | Blueprint/technical drawing style |
| Blueprint Edge Color | Edge highlight color |
| Blueprint Background | Background color |
| Blueprint Edge Threshold | Edge detection sensitivity |
Standard color correction parameters apply to the final output.
| Brightness | Additive luminance offset |
| Contrast | Mid-tone contrast expansion |
| Gamma | Nonlinear tonal mapping (inverted) |
| Hue | Color wheel rotation |
| Saturation | Color intensity relative to luminance |
using UnityEngine;
using UnityEngine.Rendering;
using FronkonGames.Retro.Pixelator;
// ...
[SerializeField]
private VolumeProfile volumeProfile;
// Access the effect
if (volumeProfile.TryGet(out PixelatorVolume volume))
{
volume.intensity.value = 1.0f;
volume.pixelationMode.value = Pixelator.PixelationModes.Circle;
volume.pixelSize.value = 0.5f;
volume.posterizeIntensity.value = 0.8f;
volume.posterizeRGBSteps.value = new Vector3Int(4, 4, 4);
volume.filtersIntensity.value = 1.0f;
volume.thermalFilterIntensity.value = 0.5f;
volume.ditherIntensity.value = 0.6f;
volume.bevel.value = 2.0f;
}The effect executes in a single render pass. Cost varies with pixelation mode complexity and dithering settings.
For authentic retro gaming aesthetics:
For stylized artistic presentations:
For stealth game aesthetics:
Transport your audience back in time with ‘Old Films’. From the silent era to the gritty 70s, this effect authentically simulates film stock characteristics, projector jitter, dust, scratches, and grain, delivering a cinematic experience that feels truly lived-in.
To ensure optimal performance and compatibility, your project must meet the following requirements:
The effect must be registered in your project’s URP configuration:
To apply the effect to your scene:
The foundation of Old Films lies in its accurate reproduction of vintage camera color science. The system implements Color Decision Lists (CDL) derived from actual historical film stock characteristics. Each manufacturer preset recreates the unique color response curves of specific camera models:
German Engineering presets including KineExakta I/II, Leica I, and Leica III recreate the warm yellows and muted cyans characteristic of 1930s-1940s German optical systems. These cameras used specific lens coatings and film processing techniques that created distinct color casts.
Japanese Innovation presets like Canon VT and Nikon F capture the sharp contrast and distinct blue shadows of post-war Japanese camera technology. These presets implement film grain patterns specific to Japanese film stock of the era.
American Consumer presets for Kodak Retina series cameras reproduce the consumer-grade color processing of 1950s-1960s family photography, with characteristic warm skin tones and slightly oversaturated greens.
Each manufacturer preset automatically configures color temperature, tint, saturation curves, and contrast profiles specific to the camera’s optical characteristics.
Old Films implements multi-layered noise systems to simulate physical film damage:
Scratches use procedural noise generation with temporal coherence to create linear damage patterns that evolve realistically over time. The intensity and speed parameters control the visibility and movement rate of scratch artifacts.
Blotches simulate chemical damage or dust accumulation through randomized circular mask generation. The noise-based distribution ensures organic placement across the frame.
Film Frame Movement introduces subtle temporal instability through per-frame position offset simulation. This mimics the mechanical imperfections of early film transport systems that caused frames to shift slightly during projection.
Frame Jumping creates occasional vertical displacement artifacts that simulate sprocket hole wear or projection stuttering. The jump interval and speed control the frequency and magnitude of these disruptions.
The grain system uses blue noise generation for natural, visually pleasing film grain that doesn’t produce aliasing patterns. Key characteristics:
The vignette system simulates lens light falloff characteristic of vintage optics, with configurable shape and intensity.
With ‘Intensity’ you can control the overall strength of the effect [0.0 - 1.0]. If it is 0, the effect will not be active.
Select a vintage camera manufacturer and configure frame behavior.
| Manufacturer | Vintage camera preset |
| Move Frame | Subtle frame position jitter |
| Jump Frame | Frame jumping intensity |
| Vignette | Corner darkening intensity |
| Sepia | Brownish tint intensity |
| Grain | Film grain intensity |
| Blink Strength | Damaged film flicker effect |
| Blink Speed | Blink animation speed |
| Blotches | Chemical/dust damage count |
| Blotch Size | Blotch size |
| Scratches | Film scratch intensity |
| Lines | Analog noise line count |
| Lines Strength | Noise line intensity |
Standard color correction parameters apply to the final output.
| Brightness | Additive luminance offset |
| Contrast | Mid-tone contrast expansion |
| Gamma | Nonlinear tonal mapping (inverted) |
| Hue | Color wheel rotation |
| Saturation | Color intensity relative to luminance |
using UnityEngine;
using UnityEngine.Rendering;
using FronkonGames.Retro.OldFilms;
// ...
[SerializeField]
private VolumeProfile volumeProfile;
// Access the effect
if (volumeProfile.TryGet(out OldFilmsVolume volume))
{
volume.intensity.value = 1.0f;
volume.manufacturer.value = OldFilms.Manufacturers.LeicaI;
volume.sepia.value = 0.5f;
volume.grain.value = 0.3f;
volume.blotches.value = 0.4f;
volume.scratches.value = 0.2f;
volume.blink.value = 0.1f;
volume.vignette.value = 0.4f;
volume.jumpFrame.value = true;
volume.jumpFrameInterval.value = 15.0f;
}The effect executes in a single render pass with procedurally generated noise. Performance cost scales with damage effect intensity due to increased noise sampling.
For authentic early cinema appearance:
For warm nostalgic memories:
For distressed archival footage:
The ultimate cathode-ray tube simulation. ‘CRT TV’ delivers a hyper-realistic display experience complete with adjustable shadow masks, phosphor glow, scanlines, barrel distortion, and signal interference. It’s not just a filter; it’s a virtual monitor for your digital world.
To ensure optimal performance and compatibility, your project must meet the following requirements:
The effect must be registered in your project’s URP configuration:
To apply the effect to your scene:
The shadow mask was a critical component of color CRT displays, responsible for ensuring each electron beam struck only its designated phosphor color. CRT TV implements multiple shadow mask types:
Aperture Grille (Sony Trinitron-style) creates vertical phosphor stripes with fine wire grilles separating red, green, and blue channels. This produces a brighter image with sharper horizontal resolution, characteristic of professional video monitors.
In-Line Shadow Mask represents the traditional delta-gun CRT design with triangular phosphor dot arrangements and a perforated metal mask. This creates the distinctive “slot mask” appearance common in consumer televisions of the 1980s-1990s.
Dot Triad simulates early color CRTs with round phosphor dots arranged in triangular patterns. This vintage configuration produces softer images with characteristic moiré patterns at certain resolutions.
The shadow mask implementation includes customizable strength (visibility), scale (aperture size), and brightness compensation to maintain image luminosity despite the light-blocking mask structure.
The simulation models physical electron beam behavior that defined CRT image quality:
Barrel Distortion reproduces the spherical curvature of CRT glass tubes. The fisheye strength controls the degree of curvature, while the distortion parameter adds secondary aberrations. Modern flat-screen CRTs (late 1990s) had minimal distortion, while early televisions exhibited pronounced curvature.
Scanline Structure simulates the visible horizontal gaps between electron beam sweeps. The implementation includes adjustable scanline count, intensity, and softness to match different display resolutions and beam focus characteristics.
Vertical Interlacing optionally simulates the alternating field display of interlaced video signals. This creates the characteristic flicker and line-crawl of NTSC/PAL broadcasts at 60Hz/50Hz field rates.
Beam Persistence (Phosphor Glow) models the afterglow of phosphor coatings when struck by electrons. Longer persistence creates motion blur beneficial for fast-moving content, while short persistence provides crisp static images.
Analog broadcast signals suffered multiple forms of interference that CRT TV faithfully reproduces:
Ghosting simulates multi-path signal reception where reflected signals arrive slightly delayed, creating duplicate offset images.
Signal Noise generates static interference from weak broadcast reception or electromagnetic interference, with configurable intensity and movement.
Vertical Hold instability causes the image to scroll vertically when sync signals are corrupted, controlled by the shake strength and speed parameters.
Color Bleeding models chroma signal distortion causing color fringing at sharp luminance transitions, typical of composite video connections.
With ‘Intensity’ you can control the overall strength of the effect [0.0 - 1.0]. If it is 0, the effect will not be active.
Core parameters defining the physical CRT display shadow mask characteristics.
| Shadowmask Strength | Visibility of RGB phosphor grid |
| Shadowmask Luminosity | Brightness of the shadow mask |
| Shadowmask Scale | Size of shadow mask apertures |
| Vertical Gap Hardness | Vertical gap hardness factor |
| Horizontal Gap Hardness | Horizontal gap hardness factor |
| Color Offset | RGB color offset for phosphor dots |
| Fisheye Strength | Fisheye distortion amount |
| Fisheye Zoom | Fisheye zoom factor |
| Distortion | Secondary distortion amount |
| Distortion Speed | Animation speed for distortion |
| Distortion Amplitude | Distortion wave amplitude |
| Vignette Smoothness | Edge darkening falloff rate |
| Vignette Rounding | Rounding of vignette shape |
| Vignette Borders | Horizontal/vertical border size |
| Shine Strength | Glass reflection/glare intensity |
| Shine Color | Reflection color tint |
| Shine Position | Reflection center position |
| RGB Offset Strength | Color channel misalignment |
| Color Bleeding Strength | Chroma smear amount |
| Color Bleeding Distance | Distance of color bleeding |
| Color Curves | Color curve adjustment |
| Gamma Color | Gamma color adjustment |
| Scanlines | Horizontal line visibility |
| Scanlines Count | Number of scanlines |
| Scanlines Velocity | Animation speed (can be negative) |
| Interference Strength | Static/snow interference intensity |
| Peak Strength | Peak interference strength |
| Peak Position | Peak position in the image |
| Shake Strength | Vertical instability amplitude |
| Shake Rate | Shake animation rate |
| Movement Strength | Horizontal displacement strength |
| Movement Rate | Movement animation rate |
| Movement Speed | Movement speed factor |
| Grain | Film grain intensity |
| Static Noise | Static noise texture amount |
| Bar Strength | Vertical bar distortion strength |
| Bar Height | Bar height relative to screen |
| Bar Speed | Bar animation speed |
| Bar Overflow | Bar overflow amount |
| Flicker Strength | Brightness pulsation intensity |
| Flicker Speed | Flicker animation rate |
Standard color correction parameters apply to the final output.
| Brightness | Additive luminance offset |
| Contrast | Mid-tone contrast expansion |
| Gamma | Nonlinear tonal mapping (inverted) |
| Hue | Color wheel rotation |
| Saturation | Color intensity relative to luminance |
using UnityEngine;
using UnityEngine.Rendering;
using FronkonGames.Retro.CRTTV;
// ...
[SerializeField]
private VolumeProfile volumeProfile;
// Access the effect
if (volumeProfile.TryGet(out CRTTVVolume volume))
{
volume.intensity.value = 1.0f;
volume.shadowmaskStrength.value = 0.8f;
volume.shadowmaskScale.value = 1.0f;
volume.screenCurvature.value = 0.3f;
volume.barrelDistortion.value = 0.2f;
volume.scanlines.value = 0.9f;
volume.interference.value = 0.15f;
volume.shakeStrength.value = 0.05f;
volume.rgbOffset.value = 0.3f;
volume.colorBleeding.value = 0.4f;
volume.screenShine.value = 0.1f;
}The effect executes in a single render pass with procedurally generated patterns. Performance cost varies with screen resolution due to scanline generation.
For authentic home TV experience:
For broadcast/BVM aesthetic:
For horror or dystopian aesthetics:
Embrace the beauty of limitation. ‘Lo-Fi’ is a comprehensive toolkit for crafting aesthetic degradation, offering deep control over color palettes, bit-crushing, and dithering. Perfect for creating moody, atmospheric visuals that evoke the spirit of early digital art and experimental indie games.
To ensure optimal performance and compatibility, your project must meet the following requirements:
The effect must be registered in your project’s URP configuration:
To apply the effect to your scene:
The centerpiece of Lo-Fi is its sophisticated color palette system that transforms modern 24-bit color into limited, stylized palettes. The system supports multiple palette sources:
Built-in Palettes (+3000) include historically accurate color sets from classic hardware: Game Boy (4 shades), CGA (16 colors), EGA (64 colors), and various artistic palettes. Each palette is stored as a lookup texture for efficient GPU sampling.
Custom Palettes allow you to define your own color sets using Unity gradient assets. The system converts gradients into optimized lookup textures at load time.
Sampling Methods determine how input colors map to palette entries:
Blend Modes control how palette colors mix with the original image:
Quantization reduces color depth to simulate limited hardware color capabilities:
RGB Quantization independently reduces red, green, and blue channel precision. Setting all to 8 recreates 8-bit color (256 colors), while 2 creates harsh posterized effects.
Luminance Quantization reduces grayscale levels independently of hue, preserving color relationships while limiting tonal range.
HSV Quantization operates in hue-saturation-value space, allowing selective reduction of hue variation while maintaining brightness or saturation.
The pixelation system divides the screen into rectangular blocks and samples a single color per block. Key parameters:
Pixel Size controls block dimensions in screen pixels. Larger values create more abstract, chunky aesthetics.
Pixel Rounding applies corner rounding to blocks, creating soft organic shapes rather than hard squares.
Pixel Blend determines how the pixelated result combines with the original image, allowing partial pixelation effects.
Pixel Sobel applies edge detection highlighting to block boundaries, creating embossed 3D-like effects on pixel edges.
Pixel Bevel simulates directional lighting on pixel blocks, creating depth and dimension.
Lo-Fi includes optional CRT simulation features:
Scanlines create horizontal dark bands between pixel rows. The intensity, count, and speed parameters control visibility and animation.
Chromatic Aberration simulates lens distortion by offsetting RGB channels, creating vintage optical effects.
Vignette darkens screen corners to simulate CRT light falloff and focus limitations.
Screen Shine adds a reflective overlay simulating glass screen glare.
With ‘Intensity’ you can control the overall strength of the effect [0.0 - 1.0]. If it is 0, the effect will not be active.
| Palette | Enable palette color remapping |
| Profile | Palette asset to use |
| Mode | Palette color blending method |
| Sample Method | Color matching algorithm |
| Resolution | Palette texture resolution |
| Luminance Pow | Contrast between brightness areas (Luminance mode) |
| Range | Min/Max luminance for remapping (Luminance mode) |
| Invert | Reverse palette order (Luminance mode) |
| Color Threshold | Maximum allowed color deviation (other modes) |
Click on the magnifying glass icon to access the palette search tool and find the colors you are looking for.
| Pixelate | Enable block pixelation |
| Pixel Size | Size of pixel blocks |
| Pixel Blend | Blending with original |
| Pixel Tint | Color overlay on pixels |
| Pixel Sobel | Edge detection on pixels |
| Pixel Sobel Power | Sobel edge intensity |
| Pixel Sobel Angle | Light direction for Sobel |
| Pixel Sobel Light | Light brightness |
| Pixel Sobel Ambient | Base lighting level |
| Pixel Round | Corner rounding amount |
| Pixel Bevel | 3D bevel effect intensity |
| Pixel Samples | Anti-aliasing sample count |
| Scanline | Horizontal line visibility |
| Scanline Count | Number of scanlines |
| Scanline Speed | Animation speed |
| Vignette | Corner darkening |
| Quantization | Enable color depth reduction |
| Colors | Maximum number of quantized colors |
| Chromatic Aberration | RGB channel separation |
| Shine | Glass reflection |
| Shine Size | Reflection spread |
| Aperture | Screen edge mask |
| Curvature | Screen curvature |
| Border | Show monitor bezel |
| Border Color | Bezel color |
| Border Smooth | Edge softness |
| Border Noise | Bezel texture |
| Border Margins | Bezel width/height |
Standard color correction parameters apply to the final output.
| Brightness | Additive luminance offset |
| Contrast | Mid-tone contrast expansion |
| Gamma | Nonlinear tonal mapping (inverted) |
| Hue | Color wheel rotation |
| Saturation | Color intensity relative to luminance |
using UnityEngine;
using UnityEngine.Rendering;
using FronkonGames.Retro.LoFi;
// ...
[SerializeField]
private VolumeProfile volumeProfile;
// Access the effect
if (volumeProfile.TryGet(out LoFiVolume volume))
{
volume.intensity.value = 1.0f;
volume.palette.value = true;
volume.mode.value = LoFi.BlendModes.Solid;
volume.sampleMethod.value = LoFi.SampleMethod.Luminance;
resolution.value = LoFi.PaletteResolutions._16;
volume.pixelate.value = true;
volume.pixelSize.value = 8;
volume.pixelSobel.value = 0.5f;
volume.pixelBevel.value = 0.3f;
volume.scanline.value = 0.5f;
volume.vignette.value = 0.4f;
volume.chromaticAberration.value = 0.3f;
}The effect executes in a single render pass. Palette generation is cached when parameters don’t change. Performance cost scales with pixelation block count.
For authentic 4-shade portable gaming:
For 90s digital art vibes:
For stylized low-fi game aesthetic:
Capture the imperfect charm of broadcast television. ‘NTSC’ faithfully emulates the composite signal artifacts of the analog era, including ‘rainbow’ moiré, dot crawl, and signal bleeding. Essential for vaporwave aesthetics and authentic 80s/90s broadcast simulations.
To ensure optimal performance and compatibility, your project must meet the following requirements:
The effect must be registered in your project’s URP configuration:
To apply the effect to your scene:
The NTSC (National Television System Committee) standard encodes color information within a luminance signal for backward compatibility with black-and-white televisions. The NTSC effect simulates this complex analog encoding/decoding pipeline that introduced characteristic artifacts:
YIQ Color Space is the foundation of NTSC encoding. The input RGB image is converted to Y (luminance/brightness), I (in-phase chrominance), and Q (quadrature chrominance) components. This separation allows independent bandwidth limitation of color information.
Bandwidth Limitation is the source of many NTSC artifacts. The human eye is more sensitive to luminance detail than color detail, so NTSC allocates approximately 4.2MHz bandwidth to luminance (Y) but only 1.5MHz to I and 0.5MHz to Q. The effect simulates these limitations through low-pass filtering with configurable wavelengths.
Quadrature Amplitude Modulation (QAM) encodes I and Q chrominance signals onto a 3.58MHz color subcarrier. The AM carrier signal wavelength parameters control how color information is modulated onto the luminance signal.
Colorburst Signal provides phase reference for decoding. The colorburst wavelength parameters define the subcarrier reference signal that receivers use to correctly demodulate color information.
The NTSC encoding process inevitably creates visual artifacts:
Rainbow Artifacts (Cross-Color) occur when high-frequency luminance detail is mistaken for chrominance information during decoding. This creates colored “rainbows” along sharp edges like text or striped patterns. Controlled by the NTSC Scale and colorburst wavelength parameters.
Dot Crawl appears as moving checkerboard patterns along vertical color transitions, caused by incomplete separation of luminance and chrominance during decoding. Adjusted through the Y/I/Q lowpass wavelengths.
Color Bleeding results from limited chrominance bandwidth, causing color to smear horizontally at sharp transitions. Higher I and Q lowpass wavelengths reduce bleeding but may introduce other artifacts.
Phase Alternation (PAL-specific, but simulated here) reverses the phase of the color subcarrier on alternate lines to cancel phase errors. Setting this to PI (3.14159) enables PAL-style color error correction.
Analog broadcast signals were susceptible to various noise sources:
Static/Noise simulates random RF interference creating the characteristic “snow” on weak broadcast signals. The noise strength and window bias parameters control visibility and distribution.
Window Bias offsets the sinc filter window shape, creating asymmetric artifacts where smearing occurs more to one side than the other, simulating receiver misalignment.
Decoding Errors result from imperfect signal separation. The decode lowpass wavelength controls final filtering that affects how cleanly luminance and chrominance are separated.
With ‘Intensity’ you can control the overall strength of the effect [0.0 - 1.0]. If it is 0, the effect will not be active.
Core NTSC signal configuration parameters.
| Window radius | Sinc filter sample window size |
| Scale | Overall artifact scaling factor |
| Phase alternation | PAL-style phase reversal (0 = off, PI = on) |
Controls noise and signal degradation simulation.
| Noise strength | Static/snow intensity |
| Window bias | Filter window offset (creates asymmetric artifacts) |
Controls how the signal is encoded for broadcast transmission.
| AM carrier Wavelength | Color subcarrier modulation wavelength |
| Y low-pass | Luminance bandwidth limit |
| I low-pass | I chrominance bandwidth (higher = more color smear) |
| Q low-pass | Q chrominance bandwidth (higher = more color smear) |
| Colorburst encoder | Encoder color reference signal |
Controls how the signal is received and decoded.
| AM demodulate wavelength | Color demodulation wavelength |
| AM decode high-pass | High-pass filtering in decoder |
| Colorburst decoder | Decoder color reference signal |
| Decode low-pass | Final signal filtering |
Standard color correction parameters apply to the final output.
| Brightness | Additive luminance offset |
| Contrast | Mid-tone contrast expansion |
| Gamma | Nonlinear tonal mapping (inverted) |
| Hue | Color wheel rotation |
| Saturation | Color intensity relative to luminance |
using UnityEngine;
using UnityEngine.Rendering;
using FronkonGames.Retro.NTSC;
// ...
[SerializeField]
private VolumeProfile volumeProfile;
// Access the effect
if (volumeProfile.TryGet(out NTSCVolume volume))
{
volume.intensity.value = 1.0f;
volume.ntscNoiseStrength.value = 0.2f;
volume.yLowPassWavelength.value = 1.5f;
volume.iLowPassWavelength.value = 6.0f;
volume.qLowPassWavelength.value = 9.0f;
volume.ntscScale.value = 1.2f;
volume.ntscPhaseAlternation.value = Mathf.PI; // Enable PAL-style
volume.decodeLowPassWavelength.value = 3.5f;
}The effect uses a multi-pass implementation (Encode -> Decode) with sinc-based convolution filters. Performance scales with the window radius parameter.
For genuine VHS/broadcast aesthetic:
For broken broadcast reception:
For stylized retro digital art:
Paint your world in shadow and light. ‘Noir’ provides a sophisticated suite of monochrome rendering techniques, from high-contrast ink styles to subtle halftones and dithering. Create dramatic, mysterious atmospheres worthy of a classic detective thriller.
To ensure optimal performance and compatibility, your project must meet the following requirements:
The effect must be registered in your project’s URP configuration:
To apply the effect to your scene:
Noir implements multiple artistic dithering algorithms for converting continuous-tone images to limited-color representations:
Bayer Dithering uses ordered threshold matrices to create regular dot patterns that simulate intermediate tones. The 4x4 Bayer matrix produces characteristic cross-hatch patterns. Parameters control dither spread (range of values that produce dots) and density (overall pattern intensity).
Dot Screen simulates traditional printing halftones by converting luminance values into dots of varying size. This creates the distinctive newspaper/magazine aesthetic. The luminance gain parameter boosts brightness to ensure dots remain visible in shadow areas.
Halftone creates angled line patterns that vary in density based on luminance. The classic comic book aesthetic uses 45-degree angles for maximum visual separation from image content. Size controls dot diameter, threshold sets the luminance point where halftoning begins.
Lines Method produces linear striations reminiscent of woodcut prints or engraving. Granularity controls line thickness variation, while threshold determines where lines begin appearing.
The duo-tone system maps luminance to two customizable colors, creating striking limited-palette aesthetics:
Luminance Threshold defines the midpoint between light and dark color mapping. Values below this use the darkness color, above use the brightness color.
Softness controls the transition sharpness between colors. High softness creates smooth gradients; low softness produces hard posterized edges.
Luminance Range (Min/Max) constrains which luminance values participate in the effect, allowing highlights or shadows to remain unprocessed.
Exposure adjusts overall brightness before tone mapping, effectively shifting which parts of the image map to each color.
Emboss Dark adds subtle 3D relief to the darker color region, enhancing the artistic quality.
Noir includes film artifact simulation for authentic period aesthetics:
Film Grain uses temporal blue noise for organic grain that evolves frame-to-frame without aliasing. Speed controls grain animation rate.
Scratches create linear damage patterns using procedural noise with temporal coherence. Suitable for simulating aged film stock.
Vignette with time variation adds animated corner darkening that simulates uneven lighting or lens breathing.
Blotches creates randomized dirt/dust patterns using noise-driven distribution.
Chromatic Aberration adds lens-style color fringing that enhances the vintage optical feel.
With ‘Intensity’ you can control the overall strength of the effect [0.0 - 1.0]. If it is 0, the effect will not be active.
Select and configure the artistic dithering technique.
| Method | Dithering algorithm type |
| Noir Intensity | Overall effect strength |
| Dither Spread | Threshold range for Bayer dots (Dither method) |
| Dither Density | Overall Bayer pattern intensity (Dither method) |
| Dither Color Blend | How dither mixes with image (Dither method) |
| Dot Screen Grid Size | Dot pattern grid resolution (DotScreen method) |
| Dot Screen Luminance Gain | Brightness boost for dots (DotScreen method) |
| Dot Screen Color Blend | Dot mixing method (DotScreen method) |
| Halftone Size | Halftone dot diameter (Halftone method) |
| Halftone Angle | Pattern rotation angle (Halftone method) |
| Halftone Threshold | Luminance where halftone starts (Halftone method) |
| Halftone Color Blend | Halftone mixing method (Halftone method) |
| Lines Count | Number of line striations (Lines method) |
| Lines Granularity | Line thickness variation (Lines method) |
| Lines Threshold | Luminance for line onset (Lines method) |
| Lines Color Blend | Line mixing method (Lines method) |
| Sepia Intensity | Brown vintage tint |
| Chromatic Aberration | RGB channel separation |
| Blotches Intensity | Dust/dirt overlay |
| Blotches Speed | Animation rate |
| Vignette Intensity | Corner darkening |
| Vignette Size | Clear central area size |
| Vignette Color | Vignette tint |
| Vignette Smoothness | Edge falloff rate |
| Vignette Time Variation | Animated vignette |
| Film Grain Intensity | Grain strength |
| Film Grain Speed | Grain animation rate |
| Scratches Intensity | Scratch visibility |
| Scratches Speed | Scratch animation rate |
| Duo Tone Intensity | Duo-tone effect strength |
| Duo Tone Brightness Color | Color for light areas |
| Duo Tone Darkness Color | Color for dark areas |
| Duo Tone Threshold | Light/dark division point |
| Duo Tone Softness | Transition smoothness |
| Luminance Min Range | Minimum luminance to process |
| Luminance Max Range | Maximum luminance to process |
| Duo Tone Exposure | Pre-tone brightness adjustment |
| Duo Tone Emboss Dark | 3D relief on dark color |
| Duo Tone Color Blend | Mixing method |
Standard color correction parameters apply to the final output.
| Brightness | Additive luminance offset |
| Contrast | Mid-tone contrast expansion |
| Gamma | Nonlinear tonal mapping (inverted) |
| Hue | Color wheel rotation |
| Saturation | Color intensity relative to luminance |
using UnityEngine;
using UnityEngine.Rendering;
using FronkonGames.Retro.Noir;
// ...
[SerializeField]
private VolumeProfile volumeProfile;
// Access the effect
if (volumeProfile.TryGet(out NoirVolume volume))
{
volume.intensity.value = 1.0f;
volume.method.value = Noir.NoirMethod.Halftone;
volume.noirIntensity.value = 1.0f;
volume.halftoneSize.value = 3.0f;
volume.halftoneAngle.value = 45.0f;
volume.duoToneIntensity.value = 0.8f;
volume.duoToneBrightnessColor.value = Color.white;
volume.duoToneDarknessColor.value = new Color(0.05f, 0.05f, 0.1f);
volume.filmGrainIntensity.value = 0.3f;
volume.vignetteIntensity.value = 0.6f;
volume.sepiaIntensity.value = 0.2f;
}The effect executes in a single render pass with procedurally generated patterns.
For 1940s-50s detective movie aesthetics:
For comic book aesthetics:
For aged photo appearance:
Relive the home computing revolution. ‘Old Computers’ instantly applies the iconic color palettes and resolution constraints of legendary hardware like the C64, Amstrad CPC, and CGA/EGA adapters. It’s a time machine for your rendering pipeline.
To ensure optimal performance and compatibility, your project must meet the following requirements:
The effect must be registered in your project’s URP configuration:
To apply the effect to your scene:
Old Computers accurately reproduces the color capabilities of classic hardware through faithful palette reproduction:
Commodore 64 implements the VIC-II chip’s 16-color palette derived from the YPbPr color space limitations of 1980s composite video. The palette includes characteristic shades like “C64 Brown” and the distinctive cyan/red vibrant pairings.
CGA (Color Graphics Adapter) recreates IBM’s 1981 4-color palettes with their infamous cyan/magenta/white and red/green/brown alternatives. Composite CGA mode (artifact colors) is available for the “16-color” illusion created on composite monitors.
EGA (Enhanced Graphics Adapter) extends to the 64-color palette (from 16 colors at 4 intensities) that defined DOS gaming’s golden age.
Game Boy implements the 4-shade LCD palette (black, dark gray, light gray, white/transparent) that defined portable gaming in 1989.
Amstrad CPC recreates the Gate Array’s 27-color palette selected from 4096 possible RGB values.
MSX, TRS-80 CoCo, Amiga OCS, Acorn Archimedes each implement their specific hardware color generation quirks and limitations.
To complete the retro aesthetic, the effect provides:
Pixelation reduces effective resolution to match the target system’s display resolution. Values represent block size multipliers relative to screen resolution.
Dithering applies ordered Bayer patterns to simulate additional colors through optical blending, as artists did on limited hardware. The strength parameter controls pattern visibility.
Luminance Range mapping ensures the full input image maps to available palette colors by defining minimum and maximum brightness thresholds.
Custom Palette mode allows defining your own 2-16 color palette using individual color parameters when historical accuracy isn’t required.
With ‘Intensity’ you can control the overall strength of the effect [0.0 - 1.0]. If it is 0, the effect will not be active.
Select the target computer system to emulate.
| Computer | Target hardware system |
| CGA Mode | CGA-specific display mode |
| Commodore 64 Mode | C64 display variant |
| MSX Mode | MSX-specific mode |
| EGA Mode | EGA display mode |
| Game Boy Mode | Game Boy variant |
| TRS-80 CoCo Mode | Color Computer mode |
| Amiga OCS Mode | Amiga display mode |
| Acorn Archimedes Mode | Archimedes mode |
| Pixelation | Block size for resolution reduction |
| Dithering | Bayer pattern strength |
| Range Min | Minimum luminance for mapping |
| Range Max | Maximum luminance for mapping |
When Computer is set to Custom or for fine-tuning:
| Custom Colors Count | Number of custom palette entries |
| Palette 0-15 | Individual palette colors |
Standard color correction parameters apply to the final output.
| Brightness | Additive luminance offset |
| Contrast | Mid-tone contrast expansion |
| Gamma | Nonlinear tonal mapping (inverted) |
| Hue | Color wheel rotation |
| Saturation | Color intensity relative to luminance |
using UnityEngine;
using UnityEngine.Rendering;
using FronkonGames.Retro.OldComputers;
// ...
[SerializeField]
private VolumeProfile volumeProfile;
// Access the effect
if (volumeProfile.TryGet(out OldComputersVolume volume))
{
volume.intensity.value = 1.0f;
volume.computer.value = OldComputers.Computers.Commodore64;
volume.commodore64Mode.value = OldComputers.Commodore64Modes.Default;
volume.pixelation.value = 3;
volume.dithering.value = 0.3f;
volume.rangeMin.value = 0.1f;
volume.rangeMax.value = 0.9f;
}The effect executes in a single render pass with palette lookup operations.
For authentic 1980s home computer aesthetic:
For 16-color adventure/platformer look:
For portable 4-shade aesthetic:
Turn your game into living text. ‘ASCII’ reinvents the classic terminal aesthetic with modern performance, replacing pixels with dynamic character sets. Whether for a hacking minigame or a stylistic full-screen effect, it offers shape-aware sampling for surprising clarity. This is not simple text overlay—it’s an intelligent image reconstruction system that analyzes luminance and shape to select the most appropriate character for each cell.
To ensure optimal performance and compatibility, your project must meet the following requirements:
The effect must be registered in your project’s URP configuration:
To apply the effect to your scene:
The effect operates by replacing image regions with text characters from a predefined charset texture atlas:
Charset Texture Atlas is a specially organized texture containing all available characters in a grid layout. The shader uses this as a lookup table, selecting characters based on computed cell properties. Each character occupies a uniform UV space within the atlas.
Character Selection Modes determine how the shader chooses which character represents each image cell:
To create one use the ‘ASCII Charset Tool’ (or menu Window > Fronkon Games > Retro > ASCII > ASCII Charset Tool). With this tool you can create the necessary file to set it to ‘Charset’.
Grid Resolution is determined by the Zoom parameter, which controls how many character cells fit on screen. Higher zoom values = larger characters = lower effective resolution.
Cell Processing occurs in three stages:
Edge Detection analyzes neighboring cells to identify discontinuities, applying sharper character transitions at edges to preserve important visual features.
Super Sampling performs multi-point sampling within each cell for more accurate average color computation, reducing aliasing and producing smoother color transitions.
Boost amplifies character contrast, making characters “pop” against their backgrounds for improved legibility and visual impact.
Font Color applies a global tint to all characters, allowing unified color theming.
Block Color applies per-cell color variation based on computed cell properties, creating subtle depth and variation within the text mosaic.
Background sets the global background color behind all characters.
With ‘Intensity’ you can control the overall strength of the effect [0.0 - 1.0]. If it is 0, the effect will not be active.
| Charset | Character atlas texture |
| Selection Mode | Character selection algorithm |
| Shape Weight | Weight of shape matching vs luminance (ShapeAware mode) |
Advanced options for detail preservation and quality.
| Edge Detection | Enable edge-aware character selection |
| Edge Sensitivity | Edge detection threshold (when Edge Detection enabled) |
| Edge Contrast | Edge sharpness enhancement (when Edge Detection enabled) |
| Super Sampling | Enable multi-point cell sampling |
| Super Sampling Level | Quality level (when Super Sampling enabled) |
Configure the character grid and visual presentation.
| Zoom | Character size scaling |
| Boost | Character contrast amplification |
| Block Color | Enable per-cell color variation |
| Text Color Blend | Font color blending method |
| Text Color | Global character tint |
| Background Color Blend | Background color blending method |
| Background Color | Global background color |
Standard color correction parameters apply to the final output.
| Brightness | Additive luminance offset |
| Contrast | Mid-tone contrast expansion |
| Gamma | Nonlinear tonal mapping (inverted) |
| Hue | Color wheel rotation |
| Saturation | Color intensity relative to luminance |
using UnityEngine;
using UnityEngine.Rendering;
using FronkonGames.Retro.ASCII;
// ...
[SerializeField]
private VolumeProfile volumeProfile;
// Access the effect
if (volumeProfile.TryGet(out ASCIIVolume volume))
{
volume.intensity.value = 1.0f;
volume.selectionMode.value = ASCII.CharacterSelectionMode.ShapeAware;
volume.zoom.value = 1.5f;
volume.boost.value = 1.2f;
volume.edgeDetection.value = true;
volume.superSampling.value = true;
volume.fontColor.value = new Color(0.2f, 1.0f, 0.2f); // Matrix green
volume.background.value = Color.black;
}The effect executes in a single pass with variable computational cost based on mode selection.
For authentic computer terminal aesthetic:
For detailed image reconstruction with character art:
For cascading code aesthetic (combine with animation):
A tribute to the 8-bit legend. ‘Spectrum’ accurately recreates the unique ‘color clash’ attribute limitations and vivid palette of the ZX Spectrum, delivering a distinctively crisp and colorful retro look that screams 1982. This effect is a faithful hardware emulation that replicates the distinctive color constraints that defined a generation of British computing.
To ensure optimal performance and compatibility, your project must meet the following requirements:
The effect must be registered in your project’s URP configuration:
To apply the effect to your scene:
The ZX Spectrum (1982) used a unique and restrictive color system that created its distinctive look:
Attribute Blocks divided the 256×192 pixel display into 8×8 pixel attribute cells. Each cell could display only two colors simultaneously—one foreground (ink) and one background (paper). This limitation created the famous “attribute clash” or “color clash” where objects of different colors approaching each other would cause color artifacts.
Color Palette consisted of 15 colors (8 standard + 7 bright variants). The effect replicates these specific RGB values:
Brightness Attribute provided two intensity levels per cell. Setting the brightness bit affected all pixels in the 8×8 cell, doubling the effective palette to 15 displayable colors (black was the same in both modes).
Simulation Modes allow choosing the authenticity level:
Native Resolution of 256×192 pixels creates the characteristic blocky appearance when scaled to modern displays.
Pixel Size parameter controls how many screen pixels correspond to one Spectrum pixel. Values of 2-4 produce authentic-looking results on 1080p+ displays.
Dithering applies ordered Bayer patterns to soften the harsh color banding between attribute cells, simulating how artists worked around color limitations using stippling techniques.
Brightness Full controls the intensity multiplier applied when a cell has the “bright” attribute bit set. This typically doubles the RGB values of bright colors.
Brightness Half sets the intensity for normal (non-bright) color attributes, usually at 0.85× of the full value, representing the standard intensity colors.
These parameters allow fine-tuning the contrast between bright and normal color cells, matching the particular display characteristics of 1980s CRT monitors used with the Spectrum.
With ‘Intensity’ you can control the overall strength of the effect [0.0 - 1.0]. If it is 0, the effect will not be active.
Control the authenticity level and display resolution.
| Simulation | Attribute clash simulation level |
| Pixel Size | Spectrum pixel to screen pixel ratio |
| Dither | Bayer pattern strength for color transitions |
| Brightness Full | Multiplier for “bright” color attribute |
| Brightness Half | Multiplier for normal color attribute |
| Adjust Gamma | Output gamma correction |
Standard color correction parameters apply to the final output.
| Brightness | Additive luminance offset |
| Contrast | Mid-tone contrast expansion |
| Gamma | Nonlinear tonal mapping (inverted) |
| Hue | Color wheel rotation |
| Saturation | Color intensity relative to luminance |
using UnityEngine;
using UnityEngine.Rendering;
using FronkonGames.Retro.Spectrum;
// ...
[SerializeField]
private VolumeProfile volumeProfile;
// Access the effect
if (volumeProfile.TryGet(out SpectrumVolume volume))
{
volume.intensity.value = 1.0f;
volume.simulation.value = Spectrum.Simulation.Full;
volume.pixelSize.value = 2;
volume.brightnessFull.value = 1.0f;
volume.brightnessHalf.value = 0.85f;
volume.dither.value = 0.2f;
}The effect executes in a single render pass with attribute lookup operations.
For true 1982 hardware emulation:
For modern games with Spectrum colors but without restrictions:
For approachable Spectrum-inspired look:
Pixel-perfect portability. ‘LCD’ simulates the physical grid, pixel ghosting, and sub-pixel structure of early handhelds and digital watches. With adjustable backlight bleed and dead pixels, it adds a tactile layer of realism to any diegetic interface. This effect goes beyond simple pixelation—it models the actual LCD panel hardware at a microscopic level.
To ensure optimal performance and compatibility, your project must meet the following requirements:
The effect must be registered in your project’s URP configuration:
To apply the effect to your scene:
The effect simulates how liquid crystal displays are physically constructed, creating authentic panel appearance:
Pixel Grid Structure divides the display into individual cell compartments separated by dark grid lines. Grid Intensity controls the visibility of these cell boundaries (0 = seamless display, 1 = pronounced black grid). Grid Size adjusts the thickness and spacing of grid lines relative to pixel size.
Grid Color allows tinting the grid lines, simulating different panel types—yellowish grids for passive-matrix displays, darker grids for active-matrix TFT panels.
Bevel Effect adds a 3D appearance to grid intersections, creating the impression of physical depth where cell boundaries meet. This simulates the raised bezel structure around individual LCD cells in early panels.
Modern LCD screens are composed of RGB subpixels, and this effect models that microscopic level:
Subpixel Layout supports both RGB (Red-Green-Blue) and BGR (Blue-Green-Red) arrangements, matching different panel manufacturers. This affects how fine details and color fringing appear.
Subpixel Rendering modulates the color output based on subpixel position, creating characteristic color fringing at high-contrast edges—visible as faint red/cyan edges on vertical lines.
Pixel Gap simulates the inactive black matrix between subpixels, creating authentic “screen door” appearance at close viewing distances.
Real LCD panels suffer from manufacturing defects and aging:
Dead Pixels simulates stuck or dead subpixels—individual RGB elements that remain permanently on or off. Creates scattered bright or dark dots across the display surface.
Backlight Bleed replicates uneven illumination in LCD panels where light leaks around panel edges, creating bright patches particularly visible in dark scenes. Bleed Intensity controls the severity of this effect.
Ghosting creates motion blur trails where previous frames persist, simulating slow LCD response times common in early panels. The Ghosting parameter controls persistence amount.
Jitter adds subtle UV coordinate instability, simulating loose ribbon cables or electrical interference causing the image to “dance” slightly.
Desync creates scanline offset effects where portions of the image shift horizontally, mimicking timing synchronization issues in analog LCD interfaces.
With ‘Intensity’ you can control the overall strength of the effect [0.0 - 1.0]. If it is 0, the effect will not be active.
| Grid Intensity | Visibility of cell grid lines |
| Grid Color | Color of grid lines |
| Grid Size | Grid line thickness/spacing |
| Grid Bevel | 3D depth at grid intersections |
| Subpixel Layout | Subpixel color arrangement |
| Tiling Factor | Subpixel tiling multiplier |
| Jitter Intensity | UV coordinate instability |
| Dead Subpixel Density | Stuck/dead subpixel simulation |
| Dead Subpixel Seed | Random seed for dead pixels |
| Dead Subpixel Color | Tint for dead subpixels |
| Bleed Intensity | Backlight bleed amount |
| Bleed Focus | Bleed effect sharpness |
| Bleed Color | Bleed light tint |
| Color Correction Intensity | Subpixel color correction strength |
| Color Bands Intensity | Color banding simulation |
| Color Bands Brightness | Brightness of color bands |
Standard color correction parameters apply to the final output.
| Brightness | Additive luminance offset |
| Contrast | Mid-tone contrast expansion |
| Gamma | Nonlinear tonal mapping (inverted) |
| Hue | Color wheel rotation |
| Saturation | Color intensity relative to luminance |
using UnityEngine;
using UnityEngine.Rendering;
using FronkonGames.Retro.LCD;
// ...
[SerializeField]
private VolumeProfile volumeProfile;
// Access the effect
if (volumeProfile.TryGet(out LCDVolume volume))
{
volume.intensity.value = 1.0f;
volume.gridIntensity.value = 0.7f;
volume.gridSize.value = 2.0f;
volume.gridColor.value = new Color(0.1f, 0.1f, 0.1f);
volume.subpixelLayout.value = LCD.SubpixelLayout.RGB;
volume.bleedIntensity.value = 0.3f;
volume.ghosting.value = 0.2f;
volume.deadPixels.value = 0.05f;
}The effect executes in a single render pass with procedural subpixel calculations.
For 1990s portable console aesthetic:
For horror or industrial sci-fi diegetic screens:
For sharp, tiny LCD aesthetic:
Instant nostalgia at your fingertips. ‘Vintage Filters’ brings a curated collection of cinematic color grading presets inspired by classic instant film and modern social apps. Add warmth, fade, and character to your scenes with a single click. This effect provides professional-grade color grading through a library of pre-configured filter pipelines that emulate iconic photographic looks.
To ensure optimal performance and compatibility, your project must meet the following requirements:
The effect must be registered in your project’s URP configuration:
To apply the effect to your scene:
Vintage Filters implements a library of curated color grading presets, each representing a distinct photographic or cinematic aesthetic:
1977 recreates the warm, faded aesthetic of vintage color film from the late 1970s, with characteristic yellow-orange color cast and reduced blue channel response.
Apollo simulates NASA mission photography with high contrast, slightly desaturated colors, and emphasis on clarity—perfect for sci-fi and documentary aesthetics.
Gotham creates the blue-tinted, high-contrast look popularized by modern urban photography and graphic novels.
Hudson reproduces the warm-toned, slightly faded Instagram-inspired aesthetic with enhanced highlights and subtle vignette.
Kelvin applies extreme warming with strong orange/yellow cast, simulating tungsten lighting and “golden hour” photography.
Noir creates dramatic high-contrast monochrome with deep blacks and bright highlights, inspired by classic film noir cinematography.
Toaster simulates the warm, brown-tinted look of early mobile phone cameras with light leak simulation and color fringing.
X-Pro (Cross-Processing) recreates the chemical cross-processing technique where slide film is developed in negative chemistry, creating characteristic color shifts—particularly strong magenta/green channel inversion.
Each filter exposes filter-specific parameters that adjust the characteristics of that particular look:
Warmth Controls adjust the color temperature balance—positive values shift toward orange/red, negative toward blue/cyan.
Contrast and Levels modify the tone curve shape, controlling shadow depth, mid-tone brightness, and highlight rolloff.
Overlay and Blend parameters control how filter textures or light leak overlays integrate with the base image.
Fade and Haze introduce atmospheric diffusion and reduced contrast typical of aged film stock or lens fogging.
The effect applies color grading through a multi-stage process:
With ‘Intensity’ you can control the overall strength of the effect [0.0 - 1.0]. If it is 0, the effect will not be active.
Choose the base photographic aesthetic.
| Filter | Color grading preset |
Each filter exposes unique parameters that appear conditionally based on the selected filter:
| Filter | Parameters |
|---|---|
| Amaro | Overlay |
| Hefe | Edge burn, Gradient, Soft light |
| Hudson | Overlay |
| Rise | Overlay |
| Sierra | Overlay |
| Toaster | Overlay warm |
| Sepia | Intensity |
| Kodachrome | Enhancement, Warmth |
| Polaroid | Overexposure, Softness |
| Cross Process | Color shift, Contrast boost |
| Bleach Bypass | Desaturation, Contrast |
| Vintage 80s | Neon intensity, Color pop |
| Film Grain | Intensity, Size |
| Technicolor | Saturation, Color balance |
| Daguerreotype | Contrast, Silvering |
| Cyanotype | Blue intensity |
| Western | Warmth, Dust |
| Night Vision | Gain, Noise |
| Infrared | Foliage, Bloom |
Standard color correction parameters apply after the filter processing.
| Brightness | Additive luminance offset |
| Contrast | Mid-tone contrast expansion |
| Gamma | Nonlinear tonal mapping (inverted) |
| Hue | Color wheel rotation |
| Saturation | Color intensity relative to luminance |
using UnityEngine;
using UnityEngine.Rendering;
using FronkonGames.Retro.VintageFilters;
// ...
[SerializeField]
private VolumeProfile volumeProfile;
// Access the effect
if (volumeProfile.TryGet(out VintageFiltersVolume volume))
{
volume.intensity.value = 1.0f;
volume.filter.value = VintageFilters.Filters.Toaster;
// Filter-specific parameters
volume.toasterOverlayWarm.value = 0.5f;
volume.toasterContrast.value = 1.2f;
volume.toasterFade.value = 0.3f;
}The effect executes in a single render pass with color matrix operations and LUT-based grading.
For golden-hour, travel photography aesthetic:
For high-contrast, moody cityscapes:
For chemical cross-processing look:
For NASA/mission photography aesthetic:
Pocket-sized nostalgia. ‘Handheld 8-Bit’ captures the iconic green-tinted, four-shade aesthetic of the world’s most famous portable console: Game Boy. Perfect for flashbacks, minigames, or giving your entire project that beloved dot-matrix feel. This effect authentically replicates the 4-shade monochrome LCD display that defined portable gaming in the late 1980s and early 1990s.
To ensure optimal performance and compatibility, your project must meet the following requirements:
The effect must be registered in your project’s URP configuration:
To apply the effect to your scene:
The original handheld console (1989) used a passive-matrix LCD display with unique characteristics that this effect faithfully reproduces:
Four Gray Shades - The display could only show four colors (or rather, shades):
The Palette parameters allow customizing these four shades. The default is the iconic “Pee-yellow” phosphor look (0x9bbc0f background, 0x8bac0f light, 0x306230 dark, 0x0f380f black), but you can create custom looks like the Game Boy Pocket (silver), Game Boy Light (backlit), or modern IPS mod aesthetics.
Luminance Threshold determines how input image brightness maps to the four output shades. The effect samples input luminance and quantizes it into four discrete levels based on configurable thresholds.
Pixel Grid Structure mimics the dot-matrix layout where each “pixel” is actually a small liquid crystal cell. Pixel Size controls how large each LCD dot appears, while Pixel Distance defines the gap between cells—simulating the visible grid lines on early LCD panels.
Grid Color sets the color of the inactive space between pixels. For authentic Game Boy, this is slightly greenish-yellow. For Pocket versions, it’s more silver/gray.
Luminosity simulates the backlight strength or reflectivity of the panel. Higher values create brighter, more visible output—important since original units had no backlight and relied on ambient light reflecting off a rear reflector.
Shadow Size creates a subtle drop shadow effect behind pixels, simulating the slight parallax gap between the LCD glass and the reflective backing layer beneath it.
The effect includes specific color grading parameters that work together with the palette system. Since the original hardware was monochrome (effectively), the color grading allows stylistic adjustments:
Brightness and Contrast work together with Threshold to determine how aggressively the image quantizes into the four shades.
Gamma at 0.9 (default) creates the slightly elevated black point typical of LCD displays with imperfect contrast ratios.
Saturation can be reduced to 0 for pure grayscale, or left at higher values for stylized “what if it was in color” looks.
With ‘Intensity’ you can control the overall strength of the effect [0.0 - 1.0]. If it is 0, the effect will not be active.
Control the physical LCD grid and pixel layout.
| Pixel Size | LCD dot physical size |
| Subpixel Size | Size of individual RGB subpixels |
| Pixel Distance | Gap between LCD cells |
| Pixel Offset | Subpixel arrangement offset |
| Shadow Size | Drop shadow behind pixels |
| Shadow Distance | Shadow offset distance |
Define the four luminance levels that create the monochrome look.
| Color 1 | Darkest shade (black equivalent) |
| Color 2 | Dark gray shade |
| Color 3 | Light gray shade |
| Color 4 | Lightest shade (white equivalent) |
| Grid Color | Color of inactive grid |
| Invert | Invert the palette order |
| Luminosity | Backlight/reflectivity boost |
| Threshold | Luminance quantization threshold |
Standard color correction parameters apply before the palette quantization.
| Brightness | Additive luminance offset |
| Contrast | Mid-tone contrast expansion |
| Gamma | Nonlinear tonal mapping (inverted) |
| Hue | Color wheel rotation |
| Saturation | Color intensity relative to luminance |
using UnityEngine;
using UnityEngine.Rendering;
using FronkonGames.Retro.Handheld8Bit;
// ...
[SerializeField]
private VolumeProfile volumeProfile;
// Access the effect
if (volumeProfile.TryGet(out Handheld8BitVolume volume))
{
volume.intensity.value = 1.0f;
volume.pixelSize.value = 6.0f;
volume.pixelDistance.value = 0.15f;
volume.gridColor.value = new Color(0.61f, 0.74f, 0.06f); // Classic Game Boy green
volume.luminosity.value = 1.3f;
volume.threshold.value = 0.25f;
// Set the four-shade palette
volume.color0.value = new Color(0.06f, 0.22f, 0.06f); // Black
volume.color1.value = new Color(0.19f, 0.38f, 0.19f); // Dark gray
volume.color2.value = new Color(0.55f, 0.67f, 0.06f); // Light gray
volume.color3.value = new Color(0.61f, 0.74f, 0.06f); // White/background
}The effect executes in a single render pass with palette quantization.
For the classic “Pee-yellow” aesthetic:
For the sleek silver redesign:
For backlit, vibrant reinterpretation:
For dramatic black and white aesthetic:
If the effect doesn’t appear in your scene:
In order for the UI not to be affected by the effect, you should set the ‘Render Mode’ of your canvas from ‘Screen Space - Overlay’ to ‘Screen Space - Camera’ and dragging your camera with to ‘Render Camera’.
Note that when you make this change, the coordinates of your UI will be in camera space, so you will have to change them.
Bloom’s URP Unity effect is not compatible with postprocessing effects based on ScriptableRendererFeature (like this one).
You will have to add your own one based on ScriptableRendererFeature or you can use this one at no cost ;)
Yes! Any effect can easily be used on a material. Just follow these steps:
Do you have any problem or any suggestions? Send me an email to fronkongames@gmail.com and I’ll be happy to help you.
Remember that if you want to inform me of an error, it would help me if you sent to me the log file.
If you are happy with this asset, consider write a review in the store
❤️ thanks! ❤️