La compresión de textura escalable adaptativa ( ASTC ) es un algoritmo de compresión de textura basado en bloques con pérdida desarrollado por Jørn Nystad et al. de ARM Ltd. y AMD . [1]
Los detalles completos de ASTC se presentaron públicamente por primera vez en la conferencia High Performance Graphics 2012, en un artículo de Olson et al. titulado "Compresión de textura escalable adaptativa". [2]
ASTC fue adoptado como una extensión oficial tanto para OpenGL como para OpenGL ES por el Grupo Khronos el 6 de agosto de 2012. [3]
En Linux, todos los controladores Gallium 3D tienen un software alternativo desde 2018, por lo que ASTC se puede usar en cualquier GPU AMD Radeon. [12]
El método de compresión es una evolución de la compresión de celdas de color con características que incluyen numerosas tasas de bits fraccionales estrechamente espaciadas, múltiples formatos de color, compatibilidad con texturas de alto rango dinámico (HDR) y compatibilidad con texturas 3D reales.
El objetivo principal de diseño declarado para ASTC es permitir a los desarrolladores de contenido tener un mejor control sobre la compensación espacio/calidad inherente a cualquier esquema de compresión con pérdidas. Con ASTC, la relación entre velocidades de bits adyacentes es del orden del 25%, lo que hace que sea menos costoso aumentar la calidad de una textura determinada.
La codificación de diferentes activos a menudo requiere diferentes formatos de color. ASTC permite una amplia variedad de formatos de entrada, incluidos solo luminancia, luminancia alfa, RGB, RGBA y modos optimizados para normales de superficie. De este modo, el diseñador puede elegir el formato óptimo sin tener que admitir múltiples esquemas de compresión diferentes.
Las opciones de velocidad de bits y formato de color no se limitan entre sí, por lo que es posible elegir entre un gran número de combinaciones.
A pesar de esta flexibilidad, ASTC logra mejores relaciones pico de señal a ruido que PVRTC , S3TC y ETC2 cuando se miden a 2 y 3,56 bits por texel . [2] Para texturas HDR, produce resultados comparables a BC6H a 8 bits por téxel. [2]
ASTC admite de 1 a 4 canales. En modos con 2 a 4 canales, uno de los canales puede tratarse como "no correlacionado" y recibir un gradiente separado para la predicción. En cualquier caso, los datos se decodifican como RGBA. [13]
Cada uno de estos puede codificarse como rango dinámico alto o bajo. El codificador selecciona formatos de color de forma independiente para cada bloque de la imagen.
En la práctica, ASTC se puede utilizar para representar datos distintos del color. Por ejemplo, el formato L+A puede usarse para representar "X+Y", un mapa normal con componentes no correlacionados; el formato "RG+B" se puede utilizar para representar XY+Z. [14] El astc-encoder
software suministrado por ARM admite la generación "X+Y" con la -normal
opción. Se espera que el sombreador trate la salida decodificada como una textura agitada . [15]
Las texturas ASTC se comprimen utilizando un tamaño de bloque fijo de 128 bits, pero con una huella de bloque variable que va desde 4×4 texels hasta 12×12 texels. Las velocidades de bits disponibles varían, por tanto, desde 8 bits por texel hasta 0,89 bits por texel, con finos pasos intermedios.
En la tabla anterior, la columna "Incremento" muestra el almacenamiento adicional requerido para almacenar una textura usando esta velocidad de bits, en comparación con la siguiente más pequeña. Las huellas de los bloques se presentan como ancho × alto.
Las texturas ASTC 3D se comprimen utilizando un tamaño de bloque fijo de 128 bits, como para 2D, pero con una huella de bloque variable que va desde 3×3×3 texels hasta 6×6×6 texels. Las velocidades de bits disponibles varían, por tanto, desde 4,74 bits por texel hasta 0,59 bits por texel, con finos pasos intermedios.
Las huellas de los bloques se presentan como ancho × alto × profundidad.
UASTC (Universal ASTC) es un subconjunto de ASTC especificado por Binomial. El formato se utiliza en su formato de textura GPU " supercomprimido " Basis Universal, que agrega compresión adicional sobre los formatos de textura comprimidos como UASTC y ETC1S y permite una conversión eficiente de UASTC/ETC1S a formatos de textura comprimidos directamente utilizables por las GPU. [16] UASTC, como parte de Basis Universal, es parte del formato de archivo KTX (Khronos Texture). [17]
La mejor manera de almacenar mapas normales usando ASTC es similar al esquema usado por BC5; almacene los componentes X e Y de una normal de longitud unitaria. El componente Z de lo normal se puede reconstruir en código de sombreado basándose en el conocimiento de que el vector tiene una longitud unitaria. Para codificar esto, necesitamos almacenar solo dos componentes de entrada en los datos comprimidos y, por lo tanto, usar el interruptor de codificación rrrg para alinear los datos con el punto final ASTC de luminancia + alfa.