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 renderización de gráficos por computadora en 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 .
La compresión de texturas se puede aplicar para reducir el uso de memoria en tiempo de ejecución. Los datos de texturas 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 algún tipo de cuantificación vectorial con pérdida de velocidad 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. La codificación por 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 la renderización como parte de la secuencia de gráficos general , 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 texturas, la compresión de texturas también se puede utilizar para codificar otros tipos de mapas de renderización, incluidos los mapas de relieve y los mapas normales de superficie . La compresión de texturas también se puede utilizar junto con otras formas de procesamiento de mapas, como los mapas MIP y el filtrado anisotrópico .
Algunos ejemplos de sistemas prácticos de compresión de texturas son S3 Texture Compression (S3TC), PVRTC , Ericsson Texture Compression (ETC) y Adaptive Scalable Texture Compression (ASTC); estos pueden ser compatibles con unidades de funciones especiales en unidades de procesamiento de gráficos modernas .
OpenGL y OpenGL ES, tal como se implementan en muchas tarjetas aceleradoras de video y GPU móviles, pueden soportar múltiples tipos comunes de compresión de textura, generalmente mediante el uso de extensiones de proveedores.
Una textura comprimida se puede comprimir aún más mediante lo que se denomina "supercompresión". Los formatos de compresión de texturas de tasa fija están optimizados para el acceso aleatorio y son mucho menos eficientes en comparación con los formatos de imagen como PNG . Al agregar más compresión, un programador puede reducir la brecha de eficiencia. La capa adicional puede ser descomprimida por la CPU para que la GPU reciba una textura comprimida normal [3] o, en métodos más nuevos, descomprimida por 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 texels , por lo que la resolución es cuatro veces mayor) mientras mantiene requisitos de almacenamiento similares a los métodos de compresión de texturas tradicionales. [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 , optimizada para cada material, para descomprimirlas. [6]