Adaptive scalable texture compression
{{Short description|Computer graphics algorithm}}
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.{{cite web |url=https://www.arm.com/products/multimedia/mali-technologies/adaptive-scalable-texture-compression.php |title=Adaptive Scalable Texture Compression (ASTC) technology developed by ARM 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".{{cite web|url=https://www.cs.cmu.edu/afs/cs/academic/class/15869-f11/www/readings/nystad12_astc.pdf|title=Adaptive Scalable Texture Compression |publisher=HPG 2012 |date= |accessdate=2012-06-27}}
ASTC was adopted as an official extension for both OpenGL and OpenGL ES by the Khronos Group on 6 August 2012.{{cite web|url=http://www.khronos.org/news/press/khronos-releases-atsc-next-generation-texture-compression-specification|title=Khronos Releases ATSC Next-Generation Texture Compression Specification|publisher=The Khronos Group Inc.|date=2012-08-06|accessdate=2012-08-06}}
Hardware support
On Linux, all Gallium 3D drivers have a software fallback since 2018, so ASTC can be used on any AMD Radeon GPU.{{cite web|url=https://lists.freedesktop.org/archives/mesa-dev/2018-July/200867.html |title=[Mesa-dev] [PATCH 0/7] ASTC texture compression for all Gallium drivers |publisher=Lists.freedesktop.org |date= 23 July 2018|accessdate=2022-09-01}}
Overview
File:Original Image before ASTC compression.jpgFile:Detail of ASTC compressed image.pngThe 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 given texture.
Encoding different assets often requires different 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 treated as "uncorrelated" and be given a separate gradient for prediction. In any case, the data is decoded as RGBA.{{cite web |title=Khronos Data Format Specification v1.1 rev 9 |url=https://registry.khronos.org/DataFormat/specs/1.1/dataformat.1.1.html#ASTC |website=registry.khronos.org}}
class="wikitable" | ||
style="text-align:center;"
! Channel count ! RGBA interpretation ! Description | ||
style="text-align:center;"
| 1 | L | Luminance-only: RGB set to same value in decoded buffer, alpha set to 1 |
style="text-align:center;"
| 2 | LA | Luminance with transparency |
style="text-align:center;"
| 2 | L+A | Luminance with uncorrelated transparency |
style="text-align:center;"
| 3 | RGB | Full color, alpha set to 1 |
style="text-align:center;"
| 3 | RG+B | Full color with uncorrelated blue (not actually used for color purposes) |
style="text-align:center;"
| 4 | RGBA | Full color with transparency |
style="text-align:center;"
| 4 | RGB+A | Full color with uncorrelated 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 uncorrelated components; the "RG+B" format can be used to represent XY+Z.{{cite web |title=Khronos Releases ASTC Next-Generation Texture Compression Specification |url=https://www.khronos.org/news/press/khronos-releases-atsc-next-generation-texture-compression-specification |website=The Khronos Group |language=en |date=6 August 2012}} The {{code|astc-encoder}} software supplied by ARM supports "X+Y" generation with the {{code|-normal}} option. The shader is expected to treat the decoded output as a swizzled texture.{{cite web |title=Effective ASTC Encoding [astc-encoder/Docs/Encoding.md at 2042cfc1a507c0414fb41dce1603ed53c503a0da · ARM-software/astc-encoder] |url=https://github.com/ARM-software/astc-encoder/blob/2042cfc1a507c0414fb41dce1603ed53c503a0da/Docs/Encoding.md |website=GitHub |language=en |quote=The best way to store normal maps using ASTC is similar to the scheme used by BC5; store the X and Y components of a unit-length normal. The Z component of the normal can be reconstructed in shader code based on the knowledge that the vector is unit length. To encode this we need to store only two input components in the compressed data, and therefore use the rrrg coding swizzle to align the data with the ASTC luminance+alpha endpoint.}}
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 per texel down to 0.89 bits per texel, with fine steps in between.
class="wikitable" | ||
style="text-align:center;"
! Block footprint ! Bit rate ! Increment | ||
style="text-align:center;"
| 4×4 | 8.00 | 25% |
style="text-align:center;"
| 5×4 | 6.40 | 25% |
style="text-align:center;"
| 5×5 | 5.12 | 20% |
style="text-align:center;"
| 6×5 | 4.27 | 20% |
style="text-align:center;"
| 6×6 | 3.56 | 14% |
style="text-align:center;"
| 8×5 | 3.20 | 20% |
style="text-align:center;"
| 8×6 | 2.67 | 5% |
style="text-align:center;"
| 10×5 | 2.56 | 20% |
style="text-align:center;"
| 10×6 | 2.13 | 7% |
style="text-align:center;"
| 8×8 | 2.00 | 25% |
style="text-align:center;"
| 10×8 | 1.60 | 25% |
style="text-align:center;"
| 10×10 | 1.28 | 20% |
style="text-align:center;"
| 12×10 | 1.07 | 20% |
style="text-align:center;"
| 12×12 | 0.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 × 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 3×3×3 texels up to 6×6×6 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.
class="wikitable" | ||
style="text-align:center;"
! Block footprint ! Bit rate ! Increment | ||
style="text-align:center;"
| 3×3×3 | 4.74 | 33% |
style="text-align:center;"
| 4×3×3 | 3.56 | 33% |
style="text-align:center;"
| 4×4×3 | 2.67 | 33% |
style="text-align:center;"
| 4×4×4 | 2.00 | 25% |
style="text-align:center;"
| 5×4×4 | 1.60 | 25% |
style="text-align:center;"
| 5×5×4 | 1.28 | 25% |
style="text-align:center;"
| 5×5×5 | 1.02 | 20% |
style="text-align:center;"
| 6×5×5 | 0.85 | 20% |
style="text-align:center;"
| 6×6×5 | 0.71 | 20% |
style="text-align:center;"
| 6×6×6 | 0.59 |
Block footprints are presented as width × height × depth.
Universal ASTC
UASTC (Universal ASTC) is a subset of ASTC specified by Binomial. The format is used in their Basis Universal "supercompressed" GPU texture format, which adds extra compression over compressed texture formats such as UASTC and ETC1S and allows for efficient conversion from UASTC/ETC1S to compressed texture formats directly usable by GPUs.{{cite web |title=UASTC Texture Specification |url=https://github.com/BinomialLLC/basis_universal/wiki/UASTC-Texture-Specification |website=GitHub |language=en}} UASTC, as part of Basis Universal, is part of the KTX (Khronos Texture) file format.{{cite web |title=KTX - GPU Texture Container Format |url=https://www.khronos.org/ktx/ |website=The Khronos Group |language=en |date=16 April 2021}}
See also
References
{{reflist}}
External links
- [http://www.highperformancegraphics.org/ High Performance Graphics 2012]
- [http://community.arm.com/groups/arm-mali-graphics/blog/2011/12/13/astc-texture-compression-arm-pushes-the-envelope-in-graphics-technology/ ASTC Texture Compression: ARM Pushes the Envelope in Graphics Technology]
- [http://community.arm.com/groups/arm-mali-graphics/blog/2012/06/28/arm-unveils-details-of-astc-texture-compression-at-hpg-conference--part-1/ ARM Unveils Details of ASTC Texture Compression at HPG Conference]
- [https://github.com/ARM-software/astc-encoder ASTC Evaluation Codec from ARM]
- [http://www.khronos.org/registry/gles/extensions/OES/OES_texture_compression_astc.txt Khronos ASTC Full Profile Extension Specification]
{{Compression methods}}