ASTC (Adaptive Scalable Texture Compression)
ASTC (Adaptive Scalable Texture Compression)

ASTC (Adaptive Scalable Texture Compression)

Adaptive scalable texture compression (ASTC) is a lossy block-based texture compression algorithm developed by Jørn Nystad et al. of ARM Ltd. and AMD.

Full details of ASTC were first presented publicly at the High Performance Graphics 2012 conference, in a paper by Olson et al. entitled “Adaptive Scalable Texture Compression”.

ASTC was adopted as an official extension for both OpenGL and OpenGL ES by the Khronos Group on 6 August 2012.

Hardware Support

Vendor/productProfileGeneration
AMD Radeon?
Apple GPUsLDR onlyA8 through A12
FullSince A13
Arm MaliFullSince Mali-T620/T720/T820
Imagination PowerVRFullSince Series6XT
Intel GPUsFullFrom Skylake; Removed in Arc / Gen12.5
Nvidia Tegra?Since Kepler
Qualcomm AdrenoFullLDR since 4xx series, at least 7xx series support
GL_KHR_texture_compression_astc_hdr extension on Android 13

On Linux, all Gallium 3D drivers have a software fallback since 2018, so ASTC can be used on any AMD Radeon GPU.

Overview

The method of compression is an evolution of Color Cell Compression with features including numerous closely spaced fractional bit rates, multiple color formats, support for high-dynamic-range (HDR) textures, and real 3D texture support.

The stated primary design goal for ASTC is to enable content developers to have better control over the space/quality tradeoff inherent in any lossy compression scheme. With ASTC, the ratio between adjacent bit rates is of the order of 25%, making it less expensive to increase quality for a give texture.

Encoding different assets often requires color formats. ASTC allows a wide choice of input formats, including luminance-only, luminance-alpha, RGB, RGBA, and modes optimized for surface normals. The designer can thus choose the optimal format without having to support multiple different compression schemes.

The choices of bit rate and color format do not constrain each other, so that it’s possible to choose from a large number of combinations.

Despite this flexibility, ASTC achieves better peak signal-to-noise ratios than PVRTC, S3TC, and ETC2 when measured at 2 and 3.56 bits per texel. For HDR textures, it produces results comparable to BC6H at 8 bits per texel.

Supported color formats

ASTC supports anywhere from 1 to 4 channels. In modes with 2-4 channels, one of the channels can be treats as “uncorrelated” and be given separate gradient for predication. In any case, the data is decoded as RGBA.

Channel countRGBA interpretationDescription
1LLuminance-only: RGB set to same value in decoded buffer, alpha set to 1
2LALuminance with transparency
2L+ALuminance with uncorrelated transparency
3RGBFull color, alpha set to 1
3RB + BFull color with uncorrelated blue (not actually used for color purpose)
4RGBAFull color with transparency
4RGB + AFull color with uncorrected transparency

Each of these may be encoded as low or high dynamic range. The encoder selects color formats independently for each block in the image.

In practice, ASTC may be used to represent data other than color. For example, the L+A format may be used to represent “X+Y”, a normal map with uncorrected components; the “RG+B” format can be used to represent XY+Z. The astc-encoder software by ARM supports “X+Y” generation with the -normal option. The shader is expected to treat the decoded output as a swizzled texture.

2D block footprints and bit rates

ASTC textures are compressed using a fixed block size of 128 bits, but with a variable block footprint ranging from 4×4 texels up to 12×12 texels. The available bit rates thus range from 8 bits down to 0.89 bits per texel, with fine steps in between.

Block footprintBit rateIncrement
4×48.0025%
5×46.4025%
5×55.1220%
6×54.2720%
6×63.5614%
8×53.2020%
8×62.675%
10×52.5620%
10×62.137%
8×82.0025%
10×81.6025%
10×101.2820%
12×101.0720%
12×120.89

In the above table, the “Increment” column shows the additional storage required to store a texture using this bit rate, as compared to the next smallest. Block footprints are presented as width x height.

3D block footprints and bit rates

ASTC 3D textures are compressed using a fixed block size of 128 bits, as for 2D but with a variable block footprint ranging from 3x3x3 texels up to 6x6x6 texels. The available bit rates thus range from 4.74 bits per texel down to 0.59 bits per texel, with fine steps in between.

Block footprintBit rateIncrement
3x3x34.7433%
4x3x33.5633%
4x4x32.6733%
4x4x42.0025%
5x4x41.6025%
5x5x41.2825%
5x5x51.0220%
6x5x50.8520%
6x6x50.7120%
6x6x60.59

Block footprint are presented as width x height x depth.

[ Content origin: https://en.wikipedia.org/wiki/Adaptive_scalable_texture_compression ]