Why GPU Compression Matters
An uncompressed 4K RGBA texture uses 64 MB of VRAM. GPU texture compression reduces this to 8–16 MB while remaining directly sampleable by the GPU — no decompression step needed during rendering. This is fundamentally different from file compression (PNG, JPEG): GPU formats trade some visual quality for constant-time random access, which is essential for real-time rendering.
BCn Formats (Desktop and Console)
The BC (Block Compression) family is the standard on PC, Xbox, and PlayStation. BC1 (DXT1) compresses RGB textures at 8:1 ratio — ideal for brick, concrete, and opaque materials. BC3 (DXT5) adds an alpha channel for transparency or smoothness data. BC5 stores two-channel data and is the standard for normal maps, preserving the X and Y components with minimal angular error. BC7 offers the highest quality at 4:1 compression — use it when quality is paramount and your target hardware supports it.
ASTC (Mobile and Modern Platforms)
Adaptive Scalable Texture Compression (ASTC) provides a flexible range of compression ratios by varying block size from 4×4 to 12×12 pixels. Smaller blocks mean higher quality but larger files. For mobile games, 6×6 blocks offer a good balance for noise and organic textures, while 8×8 works for less detailed surfaces. ASTC supports HDR and alpha natively, making it more versatile than ETC2.
Compression Artifacts to Watch For
Block compression divides the image into small blocks and approximates colors within each block. This can cause block artifacts in smooth gradients, color bleeding at sharp edges, and halo effects around high-contrast boundaries. Normal maps are particularly sensitive — always use the dedicated normal map format (BC5 or ASTC channel-aware mode) rather than compressing as a color texture.
Choosing the Right Format
For desktop: BC1 for opaque color, BC3 for color+alpha, BC5 for normal maps, BC7 for maximum quality. For mobile: ASTC 6×6 for general use, ASTC 4×4 for UI and high-detail. For web: use PNG for lossless delivery, WebP for lossy efficiency — browsers handle decompression, so GPU formats don’t apply. Let your engine’s import pipeline handle the conversion from your source PNG.