Specular aliasing
The sparkling and shimmering of highlights on glossy, bumpy or finely detailed surfaces; why mipmapped normal maps and dense geometry cause it, how studios fix it in content (Toksvig, roughness mips, The Order 1886) and at runtime (TAA, geometric specular AA, roughness limiters), and what artists can do.
Specular aliasing is the sparkle, flicker and crawling of highlights on glossy surfaces with fine detail. Godot's antialiasing guide describes aliasing as a "staircase" on edges and as "flickering and/or sparkles on reflective surfaces (specular aliasing)" (Godot documentation: 3D antialiasing). Think of a polished, normal-mapped floor that fizzes with white pixels as you walk, or the edge highlights of a dense metal grille that crawl when the camera moves.
Ready at Dawn, who built The Order: 1886, found that "shader aliasing became a common problem for surfaces with low specular roughness", causing highlights "to flicker and shimmer over time, which can be highly distracting for the viewer" (Neubelt & Dawn) 2013).
#Why it happens
Each pixel evaluates the lighting once, at one point. Stefan Groenewoud, a senior staff technical artist at Bend Studio, puts it this way: "Your pixel shader evaluates the BRDF at one fixed point on screen per pixel" (ArtStation blog: Day 24 - Quick - Specular Aliasing). If the surface direction changes a lot inside that pixel, one sample cannot represent it, and which direction gets sampled changes from frame to frame.
Glossiness makes it worse: "The smoother your material, the worse it is; a tight specular lobe amplifies every small normal deviation" (ArtStation blog: Day 24 - Quick - Specular Aliasing). Two sources feed the problem:
- Normal maps at a distance. Mipmaps average the normals, and "The result of averaging or interpolating unit normals is less than unit length" (Toksvig 2004). Shaders normally renormalise that shorter vector, so the bumps disappear from the low mips, but the roughness map still says "glossy". The surface becomes a smooth mirror built from noisy samples.
- Dense geometry. Small bevels, cables, grilles and distant high-poly meshes have more curvature per pixel than one sample can capture (ArtStation blog: Day 24 - Quick - Specular Aliasing).
#Fixing it in the content
The idea, first published by Michael Toksvig at NVIDIA in 2004, is to use that lost length rather than throw it away: "the shortening can be used as a measure of normal variation to eliminate the common problem of strobing/sparkling noise" (Toksvig 2004). Lowering the gloss where normals disagree "makes the specular highlight wider and fainter making the surface appear more dull" (Toksvig 2004), which is what the bumpy surface really looks like from far away.
Studios moved this work offline:
- Stephen Hill's 2011 Specular Showdown in the Wild West proposed a Toksvig map: "pre-compute the Toksvig Factors from a gaussian-filtered version of each MIP level" and "Store the Toksvig Factor in a texture" (Self Shadow: Specular Showdown in the Wild West).
- For The Order: 1886, Ready at Dawn built it into their texture pipeline. The adjusted value "is stored in the texels of the various mip levels of the roughness map", with results "very similar to using Toksvig's formula to pre-compute a roughness map" (Neubelt & Dawn) 2013). It costs nothing at runtime.
- Groenewoud's recommendation today is the same: "generate roughness mips to account for normal variance" (ArtStation blog: Day 24 - Quick - Specular Aliasing).
In engines this is usually a texture setting:
- Unreal Engine: assign the normal map as the Composite Texture of the roughness texture. It targets "Aliasing or shimmering of normal maps in the distance", raising roughness where the normal map varies, with Composite Power controlling the strength. It requires the two maps to share a UV layout and ignores direction (it is isotropic) (Unreal Engine documentation: Composite Texture).
- Godot: set Roughness > Src Normal on the roughness texture's import. Godot says this "can help decrease specular aliasing slightly in 3D" (Godot documentation: Importing images).
#Fixing it at render time
- Temporal antialiasing. Godot calls TAA "the most effective form of antialiasing against specular aliasing", at the price of some blur and ghosting (Godot documentation: 3D antialiasing). MSAA "is also ineffective on specular aliasing", and FXAA and SMAA, lacking temporal data, "will not do much against" it (Godot documentation: 3D antialiasing).
- Geometric specular AA. HDRP's Lit material can perform "geometric anti-aliasing on this material", with a Screen Space Variance strength and a Threshold for the smoothness reduction (High Definition Render Pipeline manual 17.0: Lit material Inspector reference). It targets curvature from the mesh itself, which texture filtering cannot see.
- Roughness limiters. Godot's screen-space roughness limiter is on by default and "works best on detailed geometry", with limited effect on roughness maps (Godot documentation: 3D antialiasing).
#What artists can do
- Avoid very low roughness on finely detailed normal maps. Polished, bumpy surfaces are the worst case (ArtStation blog: Day 24 - Quick - Specular Aliasing).
- Turn on roughness filtering (Composite Texture in Unreal, Src Normal in Godot) for glossy materials with dense normal detail (Unreal Engine documentation: Composite Texture; Godot documentation: Importing images).
- Watch tiny bevels and dense high-poly on distant objects; use LODs that drop detail smaller than a pixel.
- Review in motion. Specular aliasing is a temporal artefact. A still screenshot can look perfect while the game fizzes.
#Further reading and watching
Related: normal map, roughness map, mipmaps, physically based rendering, exposure and post-processing.
References
- · 3D antialiasing (documentation source) · Godot documentation (GitHub) · docs · accessed 2026-10-21
- · Crafting a Next-Gen Material Pipeline for The Order: 1886 · SIGGRAPH 2013 Physically Based Shading course, 2013 · paper · accessed 2026-10-21
- · Day 24 - Quick - Specular Aliasing · ArtStation blog, 2026 · article · accessed 2026-10-21
- · Mipmapping Normal Maps · NVIDIA technical brief, 2004 · paper · accessed 2026-10-21
- · Specular Showdown in the Wild West · Self Shadow (blog), 2011 · article · accessed 2026-10-21
- · Composite Texture (Unreal Engine 4.27) · Unreal Engine documentation, 2021 · docs · accessed 2026-10-21
- · Importing images (documentation source) · Godot documentation (GitHub) · docs · accessed 2026-10-21
- · Lit material Inspector reference (HDRP) · High Definition Render Pipeline manual 17.0 · docs · accessed 2026-10-21
Pages that link here
- Mipmaps Key term
Last updated 2026-10-22