Ericsson Texture Compression
Ericsson Texture Compression (ETC) is a lossy texture compression technique developed in collaboration with Ericsson Research in early 2005. It was originally developed under the name iPACKMAN[1] and based on an earlier compression scheme called PACKMAN.[2]
ETC1
The original 'ETC1' compression scheme provides 6x compression of 24-bit RGB data. It does not support the compression of images with Alpha components, although there are work-arounds for this.[3]
ETC1 takes 4x4 groups of pixel data and compresses each into a single 64-bit word. The 4×4 pixel group is first divided into two 4×2 chunks - either horizontally or vertically. Each half is given a base color - either using 4/4/4 RGB or by giving one of them a 5/5/5 RGB and having the other be a 3/3/3 bit offset from that base. Each 4×2 region also has a 3-bit brightness range selection. Each pixel is then offset from the base color by adding one of four signed values to the base color for its half of the 4×4 group.
This format is a part of the OpenGL ES graphics standard extensions[4] for embedded devices such as mobile phones and has been approved by the Khronos Group for use in the WebGL graphics standard for browser-side World Wide Web graphics.
Android version 2.2 (Froyo) includes support for ETC1.[5]
ETC2 and EAC
The 'ETC2' scheme expands ETC1 in a backwards-compatible way to provide higher quality RGB compression[6] as well as compression of RGBA data (RGB plus alpha).
The following ETC2 codecs are mandatory in OpenGL ES 3.0[7] and OpenGL 4.3:[8]
-
GL_COMPRESSED_RGB8_ETC2
— Compresses RGB888 data, the followup of ETC1. -
GL_COMPRESSED_RGBA8_ETC2_EAC
— Compresses RGBA8888 data with full alpha support. -
GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
— Compresses RGBA data where pixels are either fully transparent or fully opaque.
sRGB variants of the above codecs are also available.
EAC is built on the same principles as ETC1/ETC2 but is used for one- or two-channel data. The following four EAC codecs are included as mandatory in OpenGL ES 3.0 and OpenGL 4.3:
-
GL_COMPRESSED_R11_EAC
— one channel unsigned data -
GL_COMPRESSED_SIGNED_R11_EAC
— one channel signed data -
GL_COMPRESSED_RG11_EAC
— two channel unsigned data -
GL_COMPRESSED_SIGNED_RG11_EAC
— two channel signed data
A software package called etcpack for compression and decompression of ETC1/ETC2 textures used to be available for free download for usage with Khronos APIs.[9]
See also
- S3 Texture Compression (S3TC)
- Adaptive Scalable Texture Compression (ASTC)
References
- ↑ iPACKMAN: High-Quality, Low-Complexity Textures Compression for Mobile Phones -- Jacob Ström (Ericsson Research), Tomas Akeinine-Möller (Lund University)
- ↑ PACKMAN: Texture Compression for Mobile Phones -- Jacob Ström (Ericsson Research), Tomas Akeinine-Möller (Lund University).
- ↑ Sample code for handling alpha channels in ETC1 from ARM
- ↑ OES_compressed_ETC1_RGB8_texture, A description of the ETC1- compression algorithm and texture format in OpenGL ES extension registry
- ↑ Release notes for Android 2.2, (Froyo)
- ↑ Paper about ETC2: Texture Compression using Invalid Combinations
- ↑ OpenGL ES Version 3.0 Specification
- ↑ OpenGL Version 4.3 Specification
- ↑ ectpack on Github
External links
- Ericsson ETCPACK on github
- ETC1 & ETC2 Texture Compression Tool from ARM
- Sample code for handling alpha channels in ETC1 from ARM
- The Khronos TeXture file format (which uses ETC1 compression)
- rg_etc1, A fast, high quality, ZLIB-licensed ETC1 block packer/unpacker in a single C++ source file
- etcpak, an extremely fast Ericsson Texture Compression utility for rapid assets preparation by Bartosz Taudul