Сжатие текстур Эрикссон
Ericsson Texture Compression ( ETC ) — это с потерями, метод сжатия текстур разработанный в сотрудничестве с Ericsson Research в начале 2005 года. Первоначально он разрабатывался под названием iPACKMAN. [1] и основан на более ранней схеме сжатия под названием i PACKMAN . [2]
ETC1
[ редактировать ]Исходная схема сжатия 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]
И Т.Д.2
[ редактировать ]Схема 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]
См. также
[ редактировать ]- Сжатие текстур S3 (S3TC)
- Адаптивное масштабируемое сжатие текстур (ASTC)
Ссылки
[ редактировать ]- ^ iPACKMAN: Высококачественное сжатие текстур низкой сложности для мобильных телефонов - Джейкоб Стрём (Ericsson Research), Томас Акейнин-Мёллер (Лундский университет)
- ^ ПАКМАН: Сжатие текстур для мобильных телефонов - Джейкоб Стрём (Ericsson Research), Томас Акейнин-Мёллер (Лундский университет).
- ^ Jump up to: а б «Пример кода для обработки альфа-каналов в ETC1 от ARM» . Архивировано из оригинала 27 октября 2011 г. Проверено 3 ноября 2011 г.
- ^ OES_compressed_ETC1_RGB8_texture , описание алгоритма сжатия ETC1 и формата текстур в реестре расширений OpenGL ES.
- ^ Примечания к выпуску Android 2.2. Архивировано 11 октября 2010 г. на Wayback Machine (Froyo).
- ^ Статья об ETC2: сжатие текстур с использованием недопустимых комбинаций.
- ^ «Спецификация OpenGL ES версии 3.0» (PDF) . Архивировано из оригинала (PDF) 6 марта 2016 г. Проверено 7 августа 2012 г.
- ^ Спецификация OpenGL версии 4.3
- ^ Ericsson ETCPACK на Github
Внешние ссылки
[ редактировать ]- Эрикссон ETCPACK на github
- Пример кода для обработки альфа-каналов в ETC1 от ARM
- rg_etc1 , быстрый, высококачественный упаковщик/распаковщик блоков ETC1 под лицензией ZLIB в одном исходном файле C++.
- etcpak , чрезвычайно быстрая утилита Ericsson для сжатия текстур для быстрой подготовки ресурсов, автор: Бартош Таудул
- etc2comp — быстрая программа сжатия текстур от Ericsson.