stringtranslate.com

Compresión de textura

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.

Compensaciones

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:

Velocidad de decodificación
Es muy deseable poder renderizar directamente desde los datos de textura comprimidos y, por lo tanto, para no afectar el rendimiento de renderizado, la descompresión debe ser rápida.
Acceso aleatorio
Dado que predecir el orden en que un renderizador accede a los texeles sería difícil, cualquier esquema de compresión de texturas debe permitir un acceso aleatorio rápido a los datos de textura descomprimidos. Esto tiende a descartar muchos esquemas de compresión de imágenes más conocidos, como JPEG o codificación por longitud de ejecución .
Tasa de compresión y calidad visual
En un sistema de renderizado, la compresión con pérdida puede ser más tolerable que en otros casos de uso. Algunas bibliotecas de compresión de texturas, como Crunch, [2] permiten al desarrollador equilibrar de forma flexible la tasa de compresión con la calidad visual, utilizando métodos como la optimización de la tasa de distorsión (RDO).
Velocidad de codificación
La compresión de texturas es más tolerante a las tasas de codificación/decodificación asimétricas, ya que el proceso de codificación a menudo se realiza solo una vez durante el proceso de creación de la aplicación.

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 .

Disponibilidad

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.

Supercompresión

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] .

Compresión de texturas neuronales

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]


Véase también

Referencias

  1. ^ Andrew Beers; Maneesh Agrawala; Navin Chaddha (1996), "Renderizado a partir de texturas comprimidas", Computer Graphics, Proc. SIGGRAPH : 373–378
  2. ^ "biblioteca de compresión de texturas de código abierto de Crunch". GitHub . Consultado el 13 de septiembre de 2016 .
  3. ^ Strom, Jacob; Wennersten, Per (5 de agosto de 2011). Compresión sin pérdida de texturas ya comprimidas . HPG '11: Actas del Simposio ACM SIGGRAPH sobre gráficos de alto rendimiento. págs. 177–182. doi :10.1145/2018323.2018351.
  4. ^ Krajcevski, Pavel; Pratapa, Srihari; Manocha, Dinesh (11 de noviembre de 2016). "GST: texturas supercomprimidas decodificables por GPU". Transacciones ACM sobre gráficos . 35 (6): 1–10. doi :10.1145/2980179.2982439.
  5. ^ "Nvidia utiliza una red neuronal para un innovador método de compresión de texturas". 6 de mayo de 2023.
  6. ^ "Compresión neuronal de acceso aleatorio de texturas de materiales | Investigación".

Enlaces externos