Texture compression formats

From Resonite Wiki
Revision as of 02:15, 10 November 2025 by Raidriar (talk | contribs) (Every texture compression format available, their use cases, and additional information.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Textures imported into Resonite will have BCn compression to them applied by default. While the defaults are fine in most cases, understanding each format can help you determine a better format for specific situations.

Every compression format here can be found through the PreferredFormat option on the StaticTexture2D component.

Difference between BCn_Crunched, BCn_Crunched_Non_Perceptual, and BCn_LZMA

Formats may be listed as BC3_Crunched or BC3_LZMA, this is a difference in the storage compression method.

BCn formats are a method of compression optimized for GPUs, not file size. Additional compression is applied on top of BCn compressed textures to save on file size.

Crunch compression is a lossy format that discards data to reduce the file size of textures with a trade off of visual quality. The Non Perceptual variants are compressed without considering sRGB color space information.

LZMA compression is a lossless format, meaning no data is discarded during compression. The result is less file size reduction but visual quality is retained. Even though LZMA is lossless, BCn is lossy, so switching a texture to LZMA can only prevent quality loss caused by crunch compression.

RawRGBA

Uncompressed RGBA with 8-bits per channel.

Use Cases

Best when compression significantly diminishes the quality of a texture, but at a massive increase to file size and memory usage. RawRGBA should generally be avoided in favor of formats like BC7 for high quality compression.

RawRGBAHalf

Uncompressed RGBA with a Half Precision Float per channel.

Use Cases

High precision textures, such as Normal Maps or Light Cookies. This format should not be used unless a texture is encoded with a higher bit depth.

BC1

Compressed RGB with 8-bits per channel.

Use Cases

Generic textures that do not require the Alpha channel. This is the default format when textures are imported without Alpha data.

BC3

Compressed RGBA with 8-bits per channel.

Use Cases

Generic textures that utilize the Alpha channel. This is the default format when textures are imported with Alpha data.

Although BC3 contains only 1 more channel than BC1, the memory usage will be double that of BC1. If a texture is BC3 but you are sure that it does not require the Alpha channel, you can use the "Remove Alpha" option on the StaticTexture2D component.

BC3nm

Compressed RGBA with 8-bits per channel. The Red and Green channel are swapped to the Green and Alpha channel respectively.

Use Cases

Normal Maps exclusively. Textures added to the NormalMap field on a material will automatically convert to BC3nm.

Normal Maps are more prone to visual artifacts caused by compression, this format helps to minimize that by shifting the data to the Green and Alpha channel, which are less compressed than the Red and Blue channel.

BC4

Compressed Red channel with 16-bits.

Use Cases

Due to limitations with the existing shaders, BC4 is rarely practical. A shader would need texture fields that exclusively read data from the Red channel, which currently only exists in PBS variants due to a bug.

BC6H

Compressed RGB with a Half Precision Float per channel. Can contain HDR data.

Use Cases

HDR textures, reflection probes with HDR, Light Cookies, and high precision textures that do not require the Alpha channel. Reflection probes with HDR enabled will bake textures into BC6H by default, but they may still be compressed to BC1 in darker scenes due to a bug.

BC7

Compressed RGBA with 8-bits per channel. Very high quality compression.

Use Cases

Generic textures. BC7 is visually similar a texture being uncompressed while matching BC3 in memory usage, but BC7 takes significantly longer to encode.