Textures & lighting
Texture Memory Calculator
Direct answer
Texture memory is width times height times bits per pixel divided by eight. A 2048 by 2048 BC7 texture at eight bits per pixel is 4 MB, and mipmaps add a third, bringing it to 5.33 MB. Uncompressed RGBA8 would be four times that, which is why block compression is not optional.
Adds one third to the size and is essentially always worth it.
Base colour, normal and a packed mask is the usual three.
Result
- One texture
- —MB
- One material
- —MB
- Whole set
- —MB
- Same set uncompressed (RGBA8)
- —MB
- Saved by compression
- —
Method & assumptions
How this is worked out
The size of one mip level is width x height x bits per pixel / 8 bytes. Block-compressed formats are quoted directly in bits per pixel: BC1 is 4, BC7 and BC5 are 8, uncompressed RGBA8 is 32.
A full mip chain adds almost exactly one third, because each level is a quarter of the one above and the series 1 + 1/4 + 1/16 + ... converges to 4/3. That third buys you both performance and image quality, so it is not a saving worth chasing.
This is the memory the texture occupies once resident. Engines with virtual or streamed textures keep only the mips they need in memory, so the streamed footprint is lower, but the disk size and worst case are not.
Format by map type
| Map | Format | Bits per pixel |
|---|---|---|
| Base colour, albedo | BC1 or BC7 | 4 or 8 |
| Normal map | BC5 | 8 |
| Roughness, metallic, AO packed | BC1 or BC7 | 4 or 8 |
| Single-channel mask | BC4 | 4 |
| HDR, sky, lightmaps | BC6H | 8 |
| UI, anything needing exact pixels | RGBA8 | 32 |
BC7 doubles the memory of BC1 for a modest quality gain. On a large library that trade is worth measuring rather than assuming.
Questions
How much VRAM does a 4K texture use?
A 4096 by 4096 BC7 texture is 16 MB, or 21.3 MB with mipmaps. Uncompressed RGBA8 it would be 64 MB, or 85.3 MB with mips. That factor of four is the entire reason block compression exists.
Do mipmaps really cost a third extra?
Yes, near enough exactly. Each level is a quarter the area of the one above, and the infinite series sums to four thirds. In exchange you get faster sampling and no shimmering in the distance, so it is one of the easiest trades in real-time rendering.
Is BC7 worth double the memory over BC1?
For base colour maps with smooth gradients or a well-used alpha channel, often yes. For a tiling detail texture that is never seen up close, rarely. Test the two side by side on the actual asset at the actual viewing distance before committing a whole library.