Ericsson Texture Compression ( ETC ) es una técnica de compresión de texturas con pérdida desarrollada en colaboración con Ericsson Research a principios de 2005. Se desarrolló originalmente con el nombre de iPACKMAN [1] y se basó en un esquema de compresión anterior llamado i PACKMAN . [2]
El esquema de compresión original 'ETC1' proporciona una compresión 6x de datos RGB de 24 bits . No admite la compresión de imágenes con componentes Alpha, aunque existen soluciones para esto. [3]
ETC1 toma grupos de 4x4 de datos de píxeles y los comprime en una sola palabra de 64 bits. El grupo de píxeles de 4×4 se divide primero en dos trozos de 4×2, ya sea horizontal o verticalmente. A cada mitad se le asigna un color base, ya sea usando 4/4/4 RGB o dándole a una de ellas un 5/5/5 RGB y haciendo que la otra tenga un desplazamiento de 3/3/3 bits de esa base. Cada región de 4×2 también tiene una selección de rango de brillo de 3 bits. Luego, cada píxel se desplaza del color base agregando uno de los cuatro valores con signo al color base para su mitad del grupo 4×4.
Este formato forma parte de las extensiones del estándar de gráficos OpenGL ES [4] para dispositivos integrados, como teléfonos móviles , y ha sido aprobado por Khronos Group para su uso en el estándar de gráficos WebGL para gráficos de la World Wide Web en el lado del navegador. [ cita necesaria ]
La versión 2.2 de Android (Froyo) incluye soporte para ETC1. [5] [3]
El esquema 'ETC2' amplía ETC1 de forma compatible con versiones anteriores para proporcionar compresión RGB de mayor calidad, [6] así como compresión de RGBA (RGB plus alfa).
Los siguientes códecs ETC2 son obligatorios en OpenGL ES 3.0 [7] y OpenGL 4.3: [8]
GL_COMPRESSED_RGB8_ETC2
— Comprime datos RGB888, el seguimiento de ETC1.GL_COMPRESSED_RGBA8_ETC2_EAC
— Comprime datos RGBA8888 con soporte alfa completo.GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
— Comprime datos RGBA donde los píxeles son completamente transparentes o completamente opacos.También están disponibles variantes sRGB de los códecs anteriores.
EAC se basa en los mismos principios que ETC1/ETC2, pero se utiliza para datos de uno o dos canales. Los siguientes cuatro códecs EAC se incluyen como obligatorios en OpenGL ES 3.0 y OpenGL 4.3:
GL_COMPRESSED_R11_EAC
— datos sin firmar de un canalGL_COMPRESSED_SIGNED_R11_EAC
— datos firmados de un canalGL_COMPRESSED_RG11_EAC
— datos sin firmar de dos canalesGL_COMPRESSED_SIGNED_RG11_EAC
— datos firmados de dos canalesLos formatos RGBA y RG11 están codificados en 128 bits por bloque de 4x4, mientras que el resto están codificados en 64 bits por bloque. Para RGBA, los canales RGB están codificados en un bloque normal de 64 bits, mientras que el canal A obtiene su propio bloque de 64 bits. Los formatos RG11 se codifican de manera similar, con un bloque de 64 bits por componente.
Una utilidad de software llamada ETCPACK para la compresión y descompresión de texturas ETC1/ETC2 está disponible para su descarga gratuita en forma de código desde Ericsson en GitHub. [9]