Texture Compression Formats: DXT, ETC, ASTC Comparison and Selection
Why Texture Compression Is Needed
Textures are a major memory consumer in games and real-time rendering; high-resolution textures can consume significant VRAM and bandwidth. Texture compression formats optimize performance and memory by reducing storage size while maintaining acceptable visual quality. GPUs support sampling compressed textures directly, saving bandwidth without decompression.
Common Texture Compression Formats
DXT/BC Family (Desktop Platforms)
- **DXT1/BC1**: 64 bits per 4x4 block, supports RGB and 1-bit alpha. Compression ratio 8:1 (relative to 24-bit RGB).
- **DXT3/BC2**: 128 bits per block, 4-bit alpha, suitable for textures with sharp alpha.
- **DXT5/BC3**: 128 bits per block, interpolated alpha, suitable for gradual alpha.
- **BC4/BC5**: Single and dual-channel formats, often used for normal maps (BC5 stores X and Y).
- **BC6H/BC7**: High-quality formats; BC6H for HDR, BC7 for high-quality LDR.
These formats are widely used on Windows, Mac, and Linux.
ETC Family (Mobile Platforms)
- **ETC1**: 64 bits per 4x4 block, supports RGB, no alpha, universal in OpenGL ES 2.0.
- **ETC2**: Backward compatible with ETC1, supports RGBA, OpenGL ES 3.0+.
- **EAC**: Single/dual-channel formats for normal maps, etc.
ETC is the baseline for Android devices.
ASTC (Adaptive Scalable Texture Compression)
ASTC is a newer format supporting various block sizes (4x4 to 12x12), offering flexible compression ratio and quality trade-offs. Supports RGBA, HDR, and is supported by most modern mobile GPUs (Adreno 5xx+, Mali T6xx+) and some desktop GPUs. ASTC is recommended for mobile.
Other Formats
- **PVRTC**: Used by PowerVR GPUs, supported by early iOS devices, average quality.
- **ATITC**: Older Adreno GPU format, being phased out.
Format Selection Strategy
- **Desktop**: Prefer BC7 (high quality) or BC1/BC3 (compatibility).
- **Mobile**: Prefer ASTC (modern devices), otherwise use ETC2.
- **Normal Maps**: Use dual-channel formats (BC5 or EAC) to save memory.
- **HDR Textures**: Use BC6H or ASTC HDR.
- **UI Textures**: If high quality is needed, use uncompressed or lossless formats (e.g., PNG), but watch memory.
In Unity and Unreal, compression formats can be set in texture import settings with per-platform overrides.
Compression Formats and Texture Types
- **Color Textures**: Use lossy compression (BC1/BC3/ETC2/ASTC).
- **Normal Maps**: Use special formats (BC5) or compress after channel rearrangement.
- **Data Textures** (metallic, roughness): Single-channel or compressed, but mind precision.
- **UI Elements**: Often uncompressed or ASTC to avoid artifacts.
FAQ
What is the relationship between DXT and BC?
BC (Block Compression) is the standard name from DirectX 10 onward, DXT is the legacy name. BC1 equals DXT1, BC3 equals DXT5.
Is ASTC better than ETC?
Usually yes. ASTC offers better quality and flexibility but requires hardware support. Recommended for devices that support it.
Why do normal maps use dual-channel compression?
The Z component of a normal map can be derived from X and Y (unit vector), so Z can be discarded and dual-channel formats store X, Y, reconstructing Z in the shader to save memory.
How to choose compression format on mobile?
If the target device supports ASTC, use ASTC; otherwise use ETC2. For iOS, PVRTC or ASTC (newer devices).
Does compression degrade texture quality?
Lossy compression causes block artifacts, especially on high-contrast edges. Balance quality and size by choosing appropriate format and block size.
FAQ
What is the relationship between DXT and BC?
BC is the standard name from DirectX 10 onward, DXT is the legacy name. BC1 equals DXT1, BC3 equals DXT5.
Is ASTC better than ETC?
Usually yes. ASTC offers better quality and flexibility but requires hardware support. Recommended for devices that support it.
Why do normal maps use dual-channel compression?
The Z component of a normal map can be derived from X and Y, so Z can be discarded; dual-channel formats store X and Y, reconstructing Z in the shader.
How to choose compression format on mobile?
If the target device supports ASTC, use ASTC; otherwise use ETC2. For iOS, PVRTC or ASTC (newer devices).
Does compression degrade texture quality?
Lossy compression causes block artifacts, especially on high-contrast edges. Balance quality and size by choosing appropriate format and block size.