Ericsson Texture Compression ( ETC ) es una técnica de compresión de textura con pérdida desarrollada en colaboración con Ericsson Research a principios de 2005. Originalmente se desarrolló con el nombre de iPACKMAN [1] y se basaba en un esquema de compresión anterior llamado iPACKMAN . [ 2]
El esquema de compresión original 'ETC1' proporciona una compresión de 6x de datos RGB de 24 bits . No admite la compresión de imágenes con componentes Alpha, aunque existen soluciones alternativas para esto. [3]
ETC1 toma grupos de datos de píxeles de 4x4 y los comprime en una sola palabra de 64 bits. El grupo de píxeles de 4x4 se divide primero en dos bloques de 4x2, ya sea horizontal o verticalmente. A cada mitad se le asigna un color base, ya sea utilizando RGB 4/4/4 o asignando a uno de ellos un RGB 5/5/5 y haciendo que el otro tenga una diferencia de 3/3/3 bits con respecto a esa base. Cada región de 4x2 también tiene una selección de rango de brillo de 3 bits. Luego, cada píxel se diferencia del color base agregando uno de los cuatro valores con signo al color base de su mitad del grupo de 4x4.
Este formato es 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 el Grupo Khronos para su uso en el estándar de gráficos WebGL para gráficos de la World Wide Web del lado del navegador. [ cita requerida ]
La versión 2.2 de Android (Froyo) incluye soporte para ETC1. [5] [3]
El esquema 'ETC2' expande ETC1 de una manera compatible con versiones anteriores para proporcionar una compresión RGB de mayor calidad, [6] así como compresión de RGBA (RGB más 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
— un canal de datos sin firmarGL_COMPRESSED_SIGNED_R11_EAC
— un canal de datos firmadosGL_COMPRESSED_RG11_EAC
— datos sin signo de dos canalesGL_COMPRESSED_SIGNED_RG11_EAC
— datos firmados de dos canalesLos formatos RGBA y RG11 se codifican en 128 bits por bloque de 4x4, mientras que el resto se codifica en 64 bits por bloque. En el caso de RGBA, los canales RGB se codifican en un bloque normal de 64 bits, mientras que el canal A tiene su propio bloque de 64 bits. Los formatos RG11 se codifican de forma 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 descarga gratuita en forma de código desde Ericsson en GitHub. [9]