TA logoThe Technical Artist
Home/Field Notes/Texture Formats
cheat sheet
printable
import dialogs, decoded

Texture Compression Formats

reference~3 min readreviewed 2026-07-05

Every import dialog asks; this page answers. What each format is, what it costs, and which map goes in which - for desktop (BC) and mobile (ASTC).

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

FormatakaBits/pxChannelsUse it forWatch out
BC1DXT14RGB (+1-bit A)Opaque color, the default workhorseGreen channel slightly higher precision; blocky on smooth gradients
BC3DXT58RGBAColor with real alpha (decals, foliage cards)Alpha is smooth but color = BC1 quality
BC4-4Single channelGrayscale data: height, masks, noise, roughness aloneThe most underused format in games - half the cost of shoving gray into BC1
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 color textures where BC1 artifacts 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). iOS pre-A8 legacy PVRTC - hopefully not your problem.

sRGB: On Or Off (The Eternal Question)

MapsRGB
Albedo / base colorON
Normal mapOFF
Roughness / metallic / AO / masks / ORMOFF
Emissive colorON (it's color)
Height / displacement / noiseOFF
The rule in one breath: color = 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 Math (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 math: 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. The 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; never commit pre-compressed DDS unless you enjoy locked-in artifacts.
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 artifact 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.