stringtranslate.com

Compresión de texturas S3

S3 Texture Compression ( S3TC ) (a veces también llamado DXTn , DXTC o BCn ) es un grupo de algoritmos de compresión de texturas con pérdida relacionados desarrollados originalmente por Iourcha et al. de S3 Graphics, Ltd. [1] [2] para su uso en su acelerador de gráficos de computadora Savage 3D . El método de compresión es sorprendentemente similar al publicado anteriormente Color Cell Compression , [3] que a su vez es una adaptación de Block Truncation Coding publicado a fines de la década de 1970. A diferencia de algunos algoritmos de compresión de imágenes (por ejemplo, JPEG ), la compresión de datos de tasa fija de S3TC junto con el acceso a memoria única (cf. Color Cell Compression y algunos esquemas basados ​​en VQ ) lo hicieron muy adecuado para su uso en la compresión de texturas en gráficos de computadora 3D acelerados por hardware . Su posterior inclusión en DirectX 6.0 y OpenGL 1.3 de Microsoft (a través de la extensión GL_EXT_texture_compression_s3tc ) condujo a una adopción generalizada de la tecnología entre los fabricantes de hardware y software. Si bien S3 Graphics ya no es un competidor en el mercado de aceleradores gráficos, se han cobrado y recaudado tarifas de licencia por el uso de la tecnología S3TC hasta octubre de 2017, por ejemplo, en consolas de juegos y tarjetas gráficas. El amplio uso de S3TC ha llevado a un requisito de facto para que los controladores OpenGL lo admitan, pero el estado de patente de S3TC presentó un obstáculo importante para las implementaciones de código abierto , [4] mientras que existían enfoques de implementación que intentaban evitar las partes patentadas. [5]

Patentar

Algunas de las múltiples patentes de la USPTO sobre compresión de texturas S3 (por ejemplo, la US 5956431 A) expiraron el 2 de octubre de 2017. [6] Sin embargo, al menos una patente de continuación, la US 6.775.417, tenía una extensión de 165 días. Esta patente de continuación expiró el 16 de marzo de 2018.

Códecs

Existen cinco variantes del algoritmo S3TC (denominadas DXT1 a DXT5 , en referencia al código FourCC asignado por Microsoft a cada formato), cada una diseñada para tipos específicos de datos de imagen. Todas convierten un bloque de píxeles de 4x4 en una cantidad de 64 o 128 bits, lo que da como resultado relaciones de compresión de 6:1 con datos de entrada RGB de 24 bits o 4:1 con datos de entrada RGBA de 32 bits . S3TC es un algoritmo de compresión con pérdida , lo que da como resultado una degradación de la calidad de la imagen, un efecto que se minimiza con la capacidad de aumentar las resoluciones de textura manteniendo los mismos requisitos de memoria. Las imágenes similares a dibujos animados dibujados a mano no se comprimen bien, ni tampoco los datos de mapas normales , los cuales suelen generar artefactos . El algoritmo de compresión 3Dc de ATI es una modificación de DXT5 diseñada para superar las deficiencias de S3TC con respecto a los mapas normales. id Software solucionó los problemas de compresión del mapa normal en Doom 3 moviendo el componente rojo al canal alfa antes de la compresión y moviéndolo nuevamente durante la renderización en el sombreador de píxeles . [7]

Al igual que muchos algoritmos de compresión de imágenes modernos, S3TC solo especifica el método utilizado para descomprimir imágenes, lo que permite a los implementadores diseñar el algoritmo de compresión para que se ajuste a sus necesidades específicas, aunque la patente aún cubre los algoritmos de compresión. Las tarjetas nVidia GeForce 256 a GeForce 4 también usaban interpolación de 16 bits para renderizar texturas DXT1, lo que generaba bandas al descomprimir texturas con gradientes de color. Nuevamente, esto creó una impresión desfavorable de la compresión de texturas , no relacionada con los fundamentos del códec en sí.

DXT1

DXT1 (también conocido como Block Compression 1 o BC1) es la variación más pequeña de S3TC, que almacena 16 píxeles de entrada en 64 bits de salida y consta de dos valores de color RGB 5:6:5 de 16 bits y , y una tabla de búsqueda de dos bits de 4×4.

Si (comparamos estos colores interpretándolos como dos números sin signo de 16 bits), se calculan otros dos colores, de modo que para cada componente, y . Este modo funciona de manera similar al modo 0xC0 del códec de video original de Apple . [8]

De lo contrario, si , entonces y es negro transparente correspondiente a un formato alfa premultiplicado . Este color a veces provoca un borde negro alrededor del área transparente cuando se utiliza el filtrado de textura lineal y la prueba alfa, debido a que los colores se interpolan entre el color del texel opaco y el texel transparente negro vecino.

Luego se consulta la tabla de búsqueda para determinar el valor de color de cada píxel, donde un valor de 0 corresponde a y un valor de 3 corresponde a .

DXT2 y DXT3

DXT2 y DXT3 (conocidos colectivamente también como Block Compression 2 o BC2) convierten 16 píxeles de entrada (correspondientes a un bloque de píxeles de 4x4) en 128 bits de salida, que consisten en 64 bits de datos de canal alfa (4 bits para cada píxel) seguidos de 64 bits de datos de color, codificados de la misma manera que DXT1 (con la excepción de que siempre se utiliza la versión de 4 colores del algoritmo DXT1 en lugar de decidir qué versión usar en función de los valores relativos de y ).

En DXT2, los datos de color se interpretan como si estuvieran premultiplicados por alfa , en DXT3 se interpretan como si no estuvieran premultiplicados por alfa. Normalmente, DXT2/3 son adecuados para imágenes con transiciones alfa nítidas, entre áreas translúcidas y opacas.

DXT4 y DXT5

DXT4 y DXT5 (conocidos colectivamente también como Block Compression 3 o BC3) convierten 16 píxeles de entrada en 128 bits de salida, que constan de 64 bits de datos de canal alfa (dos valores alfa de 8 bits y una tabla de búsqueda de 3 bits 4×4) seguidos de 64 bits de datos de color (codificados de la misma manera que DXT1).

Si , entonces se calculan otros seis valores alfa, tales que , , , , y .

De lo contrario, si , se calculan otros cuatro valores alfa tales que , , , y con y .

Luego se consulta la tabla de búsqueda para determinar el valor alfa de cada píxel, donde el valor 0 corresponde a y el valor 7 corresponde a . Los datos de color de DXT4 se premultiplican por alfa, mientras que los de DXT5 no. Debido a que DXT4/5 utilizan un esquema alfa interpolado, generalmente producen resultados superiores para gradientes alfa (transparencia) que DXT2/3.

Otras variantes

BC4 y BC5

Se agregaron BC4 y BC5 (Block Compression 4 y 5) en Direct3D 10. Reutilizan la codificación del canal alfa que se encuentra en DXT4/5 (BC3). [9]

BC6H y BC7

BC6H (a veces BC6) y BC7 (Block Compression 6H y 7) se agregaron en Direct3D 11. [9]

BC6H y BC7 tienen un algoritmo mucho más complejo con una selección de modos de codificación. Como resultado, la calidad es mucho mejor. [9] Estos dos modos también están especificados con mucha más exactitud, con rangos de desviación aceptados. Los modos BCn anteriores decodifican de manera ligeramente diferente entre los proveedores de GPU. [10]

Comparación del formato S3TC

Preacondicionamiento de datos

Las texturas BCn se pueden comprimir aún más para su almacenamiento y distribución en disco ( supercompresión de texturas ). Una aplicación descomprimiría esta capa adicional y enviaría los datos BCn a la GPU como de costumbre.

BCn se puede combinar con Oodle Texture, un preprocesador con pérdida que modifica la textura de entrada para que la salida de BCn se pueda comprimir más fácilmente con un compresor LZ77 ( optimización de tasa de distorsión ). BC7 específicamente también puede usar "bc7prep", un paso sin pérdida para volver a codificar la textura en una forma más comprimible (requiriendo su inverso en la descompresión). [11]

Crunch es otra herramienta que realiza RDO y, opcionalmente, recodificación adicional. [12]

En 2021, Microsoft produjo un algoritmo de compresión "BCPack" específicamente para texturas comprimidas con BCn. Las Xbox Series X y S tienen soporte de hardware para descomprimir transmisiones BCPack. [13]

Véase también

Referencias

  1. ^ US 5956431  "Compresión de imágenes basada en bloques de velocidad fija con valores de píxeles inferidos"
  2. ^ US 5956431, Iourcha, Konstantine I.; Nayak, Krishna S. y Hong, Zhou, "Sistema y método para la compresión de imágenes basada en bloques de velocidad fija con valores de píxeles inferidos", publicado el 21 de septiembre de 1999 
  3. ^ "Documento sobre compresión de celdas de color IEEE de 1990". IEEE . doi :10.1109/TENCON.1990.152671. S2CID  62015990. {{cite journal}}: Requiere citar revista |journal=( ayuda )
  4. ^ "Situación de S3TC en la página de información oficial de DRI". Dri.freedesktop.org. Archivado desde el original el 19 de enero de 2012. Consultado el 25 de enero de 2012 .
  5. ^ S2TC: Una posible solución para la situación de la patente S3TC Archivado el 13 de mayo de 2016 en Wayback Machine en phoronix
  6. ^ Yates, Tom (15 de febrero de 2017). "Por eso bebo: una discusión sobre el estado legal de Fedora". LWN.net . Archivado desde el original el 1 de marzo de 2017. Consultado el 16 de febrero de 2017. ... La patente de compresión de texturas S3 vence el 2 de octubre de 2017, por lo que los juegos de Steam podrían funcionar mejor en Fedora después de esa fecha. ...
  7. ^ Duffy, Robert (27 de julio de 2004). «Requisitos de vídeo de DOOM 3». Gamershell.com. Archivado desde el original el 3 de enero de 2008. Consultado el 25 de enero de 2012 .
  8. ^ Togni, Roberto, et al. "Apple RPZA Archivado el 4 de julio de 2017 en Wayback Machine ". MultimediaWiki.
  9. ^ abc Reed, Nathan. "Comprensión de los formatos de compresión de texturas BCn". Blog de codificación de Nathan Reed . Archivado desde el original el 2020-11-09 . Consultado el 2020-09-01 .
  10. ^ abcd Giesen, Fabian “ryg” (4 de octubre de 2021). «Decodificación de GPU BCn». El blog de ryg . Archivado desde el original el 24 de julio de 2023. Consultado el 24 de julio de 2023 .
  11. ^ "Compresión de texturas Oodle". www.radgametools.com . Archivado desde el original el 18 de marzo de 2023. Consultado el 3 de abril de 2023 .Parte de código abierto mencionada: bc7enc_rdo Archivado el 2 de febrero de 2021 en Wayback Machine
  12. ^ "biblioteca de compresión de texturas de código abierto de Crunch". GitHub . Archivado desde el original el 2016-09-09 . Consultado el 2016-09-13 .
  13. ^ "Descripción general de DirectStorage: kit de desarrollo de juegos de Microsoft". 16 de marzo de 2023. Archivado desde el original el 3 de agosto de 2023. Consultado el 3 de agosto de 2023 .

Enlaces externos