La compresión de texturas es una forma especializada de compresión de imágenes diseñada para almacenar mapas de texturas en sistemas de representación de gráficos por computadora 3D . A diferencia de los algoritmos de compresión de imágenes convencionales, los algoritmos de compresión de texturas están optimizados para el acceso aleatorio .
Se puede aplicar compresión de texturas para reducir el uso de memoria en tiempo de ejecución. Los datos de textura suelen ser la mayor fuente de uso de memoria en una aplicación móvil.
En su artículo fundamental sobre la compresión de texturas, [1] Beers, Agrawala y Chaddha enumeran cuatro características que tienden a diferenciar la compresión de texturas de otras técnicas de compresión de imágenes. Estas características son:
Teniendo en cuenta lo anterior, la mayoría de los algoritmos de compresión de texturas implican alguna forma de cuantificación vectorial con pérdida de tasa fija de pequeños bloques de píxeles de tamaño fijo en pequeños bloques de bits de codificación de tamaño fijo, a veces con pasos adicionales de preprocesamiento y posprocesamiento adicionales. La codificación de truncamiento de bloques es un ejemplo muy simple de esta familia de algoritmos.
Debido a que sus patrones de acceso a datos están bien definidos, la descompresión de texturas se puede ejecutar sobre la marcha durante el renderizado como parte del proceso general de gráficos , lo que reduce las necesidades generales de ancho de banda y almacenamiento en todo el sistema de gráficos. Además de los mapas de textura, la compresión de texturas también se puede utilizar para codificar otros tipos de mapas de representación, incluidos mapas de relieve y mapas de superficie normal . La compresión de texturas también se puede utilizar junto con otras formas de procesamiento de mapas, como mapas MIP y filtrado anisotrópico .
Algunos ejemplos de sistemas prácticos de compresión de texturas son la compresión de texturas S3 (S3TC), PVRTC , la compresión de texturas Ericsson (ETC) y la compresión de texturas escalable adaptativa (ASTC); estos pueden ser compatibles con unidades de funciones especiales en las modernas unidades de procesamiento de gráficos .
OpenGL y OpenGL ES, tal como se implementan en muchas tarjetas aceleradoras de video y GPU móviles, pueden admitir múltiples tipos comunes de compresión de texturas, generalmente mediante el uso de extensiones de proveedores.
Una textura comprimida se puede comprimir aún más en lo que se llama "supercompresión". Los formatos de compresión de texturas de velocidad fija están optimizados para el acceso aleatorio y son mucho menos eficientes en comparación con formatos de imágenes como PNG . Al agregar más compresión, un programador puede reducir la brecha de eficiencia. La CPU puede descomprimir la capa adicional para que la GPU reciba una textura comprimida normal [3] o, en métodos más nuevos, descomprimirla la propia GPU. La supercompresión ahorra la misma cantidad de VRAM que la compresión de texturas normal, pero ahorra más espacio en disco y tamaño de descarga. [4]
La compresión neuronal de acceso aleatorio de texturas de materiales (Neural Texture Compression) es una tecnología de Nvidia que permite dos niveles adicionales de detalle (16 veces más téxels , es decir, una resolución cuatro veces mayor) manteniendo requisitos de almacenamiento similares a los de los métodos tradicionales de compresión de texturas. [5]
La idea clave es comprimir múltiples texturas de materiales y sus cadenas de mapas MIP juntas, y usar una pequeña red neuronal , que esté optimizada para cada material, para descomprimirlas. [6]