← All resources

Normal Map Compression Revisited

Auto-discovered

Blog Advanced

Ignacio Castaño

Visit resource ↗

Description

Normal Map Compression Revisited is a February 2026 blog post by Ignacio Castaño on practical normal-map encoding for spark.js and web 3D pipelines, with notes that also apply to game engines.

It covers BC5 and EAC_RG two-channel XY formats with shader Z reconstruction, historical DXT5/BC3 swizzled packing, ASTC normal swizzles, mip generation, and three.js integration from r182 for compressed normals. Pitfalls include UNORM unpack bias at UV seams (as seen in The Witness), UNORM versus SNORM tradeoffs, orthographic versus other unit-vector projections, and quality differences between BC5 and EAC on smooth surfaces.

It is for intermediate to advanced graphics and web-3D developers who compress or sample normal maps. Familiarity with block compression formats and tangent-space normals is assumed.

The article is a free HTML post with code snippets showing spark.encodeTexture options and shader reconstruction formulas.

It is useful as a compact checklist of normal-map compression choices and easy-to-miss decoding bugs when shipping web or engine assets.