Skip to content
The Technical ArtistArt. Code. Pipelines. Games.
Home/Field Notes/Texture Formats
cheat sheet
printable
import dialogs, decoded

Texture Compression Formats

reference~3 min read

Use this sheet to compare texture formats, memory costs, and common map settings. It covers BC formats for desktop and console, and ASTC for mobile. Check the target platform and inspect the compressed result before settling on a format.

The Desktop/Console Family (Bc = Block Compression, 4x4 Pixel Blocks)

FormatakaBits/pxChannelsUse it forWatch out
BC1DXT14RGB (+1-bit A)Opaque colour, the default workhorseGreen channel slightly higher precision; blocky on smooth gradients
BC3DXT58RGBAColour with real alpha (decals, foliage cards)Alpha is smooth but colour = BC1 quality
BC4-4Single channelGreyscale data: height, masks, noise, roughness aloneStores a single channel at 4 bits per pixel; compare quality with a packed alternative
BC5-8Two channelsNormal maps (X,Y; Z reconstructed in shader)Engines set this automatically when you mark "normal map" - that's what the checkbox does
BC6H-8RGB, HDRHDRIs, skyboxes, emissive HDRNo alpha; encode times are long
BC7-8RGB(A)Hero colour textures where BC1 artefacts show2x BC1's memory - spend it on faces and UI, not gravel

Mobile: Astc

One format, variable block size = quality dial: 4x4 (8 bpp, best) -> 6x6 (3.6, the usual default) -> 8x8 (2, distant/unimportant).
Rule of thumb: UI and faces 4x4/5x5 - standard materials 6x6 - lightmaps and far scenery 8x8.
Older Android floor: ETC2 (8 bpp RGBA). Older iOS targets may require PVRTC; check the devices you support.

sRGB: On Or Off (The Eternal Question)

MapsRGB
Albedo / base colourON
Normal mapOFF
Roughness / metallic / AO / masks / ORMOFF
Emissive colourON (it's colour)
Height / displacement / noiseOFF
The rule in one breath: colour = sRGB on, numbers = off. Symptoms of getting it wrong: the debugging catalogue, row one.

The Per-Map Playbook (Desktop)

MapFormat
Albedo (opaque)BC1 - sRGB
Albedo + alphaBC3 (or BC7 if hero) - sRGB
NormalBC5 - linear
Packed ORM (packer)BC1 - linear
Single mask/heightBC4 - linear
HDR sky/emissiveBC6H - linear
UIBC7, or uncompressed if it must be pixel-true

Memory Maths (Why Formats Matter)

Uncompressed RGBA8 = 32 bits/px -> a 4K texture = 64 MB before mips (+33% with).
Same 4K in BC1 = 8 MB. In BC7/BC3 = 16 MB. The dropdown is an 8x memory decision.
Quick maths: width x height x bpp / 8 x 1.33 (mips) = bytes on the GPU.
Mips are non-negotiable for 3D - no mips = shimmer + worse cache performance, not "sharper."

Gotchas That Survive Every Engine Version

Block formats need multiple-of-4 dimensions; power-of-two sizes get you that plus clean mips - our UV tool and noise tool only emit POT for this reason.
BC compression happens at import/cook - your source PNG/TGA stays lossless in version control; keep the source assets so compression settings can be changed later.
Fine text and crisp gradients are BC1's worst case - that's what BC7 (or uncompressed UI) is for.
Don't double-compress: JPEG source -> BC = both artefact families at once. Author in PNG/TGA/EXR.

Deeper dives: Textures & Streaming for the engine-side budget story, and the Channel Packer to put three maps in one BC1's worth of memory right now.