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.

px
px

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

MapFormatBits per pixel
Base colour, albedoBC1 or BC74 or 8
Normal mapBC58
Roughness, metallic, AO packedBC1 or BC74 or 8
Single-channel maskBC44
HDR, sky, lightmapsBC6H8
UI, anything needing exact pixelsRGBA832

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.