Skip to main content

Retro Look

The look is the visual half of RetroRender — pixelation, color reduction, dithering, vertex wobble and CRT scanlines. It is entirely material-based (no runtime C++) and driven by a Material Parameter Collection, so a single preset can steer the whole style.

Drag the handle to compare the same frame with the look off and on:

The same scene with the RetroRender look off and onLook on
The same scene with the RetroRender look off and onLook off

Components

All content lives under /RetroRender/Materials.

AssetTypeRole
MPC_RetroMaterial Parameter CollectionCentral control values (snap, colors, dither, resolution, scanlines).
MF_PixelateMaterial FunctionQuantizes UVs to a low resolution grid.
MF_ColorReductionMaterial FunctionPosterizes each channel to a set number of levels.
MF_DitherMaterial FunctionProcedural ordered dithering in screen space (no texture asset needed).
MF_AffineUVMaterial FunctionApproximate affine-UV pass.
MF_VertexSnapMaterial FunctionPS1 vertex "wobble" via World Position Offset.
PP_RetroPost-process materialFull-screen chain: Pixelate → Color Reduction → Dither → Scanlines.
M_Retro_Opaque / M_Retro_MaskedMaster materialsPer-object look (texture + affine + color reduction + vertex snap).

The post-process: PP_Retro

PP_Retro is where the screen-space look happens. Add it to a Post Process Volume → Post Process Materials (see Getting Started). Its chain:

  1. Pixelate — the scene UVs are quantized to PixelateResolution, sampling the scene at low resolution.
  2. Color Reduction — each channel is posterized to ColorLevels.
  3. Dither — an ordered screen-space pattern is added, scaled by DitherStrength.
  4. Scanlines — every other screen row is darkened, weighted by Scanlines (used by the CRT preset).

Master materials

M_Retro_Opaque and M_Retro_Masked apply the look per object:

  • A BaseColor texture parameter (assign your texture here).
  • MF_AffineUV on the UVs.
  • MF_ColorReduction with ColorLevels.
  • MF_VertexSnap wired to World Position Offset for the wobble (M_Retro_Masked also drives opacity mask from the texture alpha).

Create Material Instances from these masters for your baked meshes.

Parameters (MPC_Retro)

The Look Preset or Apply Look Preset writes these into MPC_Retro:

ParameterTypeMeaning
SnapResolutionVector (xy)Vertex-snap grid resolution. Lower = coarser wobble.
SnapStrengthScalarVertex-snap intensity (0 = off).
AffineAmountScalarAffine-UV amount.
ColorLevelsVector (rgb)Posterization levels per channel.
DitherStrengthScalarOrdered-dither intensity.
PixelateResolutionVector (xy)Post-process pixelation target resolution.
ScanlinesScalarCRT scanline weight (0 = off).

A note on affine texture mapping

The PS1 "texture swim" comes from affine (non-perspective-correct) UV interpolation. Modern GPUs interpolate perspective-correctly, and Unreal does not expose a per-pixel noperspective interpolator, so the material-side MF_AffineUV is an approximation. Combine it with the Decimate Baker — larger, low-poly triangles produce the characteristic swim more authentically than a dense mesh.

Drive everything from one place

Because the whole look reads MPC_Retro, you rarely edit materials directly. Pick a preset, press Apply Look Preset, and every material updates at once.