Ericsson Texture Compression ( ETC ) — это метод сжатия текстур с потерями , разработанный в сотрудничестве с Ericsson Research в начале 2005 года. Первоначально он был разработан под названием iPACKMAN [1] и основан на более ранней схеме сжатия под названием i PACKMAN [2] .
Оригинальная схема сжатия «ETC1» обеспечивает 6-кратное сжатие 24-битных данных RGB . Она не поддерживает сжатие изображений с компонентами Alpha, хотя для этого есть обходные пути. [3]
ETC1 берет группы 4x4 пиксельных данных и сжимает каждую в одно 64-битное слово. Группа пикселей 4×4 сначала делится на два фрагмента 4×2 — либо по горизонтали, либо по вертикали. Каждой половине присваивается базовый цвет — либо с использованием 4/4/4 RGB, либо присваивая одной из них 5/5/5 RGB, а другой — смещение на 3/3/3 бита от этой базы. Каждая область 4×2 также имеет выбор диапазона яркости в 3 бита. Затем каждый пиксель смещается относительно базового цвета путем добавления одного из четырех знаковых значений к базовому цвету для своей половины группы 4×4.
Этот формат является частью графических расширений стандарта OpenGL ES [4] для встраиваемых устройств, таких как мобильные телефоны , и был одобрен Khronos Group для использования в графическом стандарте WebGL для веб-графики на стороне браузера. [ необходима ссылка ]
Android версии 2.2 (Froyo) включает поддержку ETC1. [5] [3]
Схема «ETC2» расширяет ETC1 обратно совместимым способом, обеспечивая более качественное сжатие RGB [6], а также сжатие RGBA (RGB плюс альфа).
Следующие кодеки ETC2 являются обязательными в OpenGL ES 3.0 [7] и OpenGL 4.3: [8]
GL_COMPRESSED_RGB8_ETC2
— Сжимает данные RGB888, продолжение ETC1.GL_COMPRESSED_RGBA8_ETC2_EAC
— Сжимает данные RGBA8888 с полной поддержкой альфа-канала.GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
— Сжимает данные RGBA, где пиксели либо полностью прозрачны, либо полностью непрозрачны.Также доступны sRGB- варианты вышеуказанных кодеков.
EAC построен на тех же принципах, что и ETC1/ETC2, но используется для одно- или двухканальных данных. Следующие четыре кодека EAC включены в качестве обязательных в OpenGL ES 3.0 и OpenGL 4.3:
GL_COMPRESSED_R11_EAC
— один канал беззнаковых данныхGL_COMPRESSED_SIGNED_R11_EAC
— один канал подписанных данныхGL_COMPRESSED_RG11_EAC
— двухканальные беззнаковые данныеGL_COMPRESSED_SIGNED_RG11_EAC
— двухканальные подписанные данныеФорматы RGBA и RG11 кодируются в 128 бит на блок 4x4, а остальные кодируются в 64 бит на блок. Для RGBA каналы RGB кодируются в обычном 64-битном блоке, в то время как канал A получает свой собственный 64-битный блок. Форматы RG11 кодируются аналогичным образом, с одним 64-битным блоком на компонент.
Программная утилита ETCPACK для сжатия и распаковки текстур ETC1/ETC2 доступна для бесплатной загрузки в виде кода от Ericsson на GitHub. [9]