Сжатие текстур Ericsson ( ETC ) - это метод сжатия текстур с потерями , разработанный в сотрудничестве с Ericsson Research в начале 2005 года. Первоначально он был разработан под названием iPACKMAN [1] и основан на более ранней схеме сжатия под названием 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 для графики World Wide Web на стороне браузера. [ необходима цитата ]
[3] ETC2 и EAC
Схема «ETC2» расширяет ETC1 обратно совместимым способом для обеспечения более высокого качества сжатия RGB [6], а также сжатия данных RGBA (RGB плюс альфа), одноканальных (R11) и двухканальных (RG11) данных.
Следующие кодеки 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]
Гладкий профиль
«Гладкий профиль» есть только на бумаге [10] . Как ETC2 Planar Mode, но с дополнительными функциями для получения гладкой текстуры.
Смотрите также
Рекомендации
- ^ iPACKMAN: Сжатие высококачественных текстур низкой сложности для мобильных телефонов - Якоб Стрём (Ericsson Research), Томас Акейнин-Мёллер (Университет Лунда)
- ^ PACKMAN: Сжатие текстур для мобильных телефонов - Якоб Стрем (Ericsson Research), Томас Акейнин-Мёллер (Университет Лунда).
- ^ a b «Пример кода для обработки альфа-каналов в ETC1 от ARM» . Архивировано из оригинала на 2011-10-27 . Проверено 11 ноября 2011 .
- ^ OES_compressed_ETC1_RGB8_texture , описание алгоритма сжатия ETC1 и формата текстуры в реестре расширений OpenGL ES
- ^ Примечание к выпуску Android 2.2 архивного 2010-10-11 в Wayback Machine , (Froyo)
- ^ Статья о ETC2: Сжатие текстуры с использованием недопустимых комбинаций
- ^ Спецификация OpenGL ES версии 3.0
- ^ Спецификация OpenGL версии 4.3
- ^ Ericsson ETCPACK на Github
- ^ Сжатие текстуры карт освещения с использованием функций сглаживания профиля - Джим Расмуссон, Якоб Стрем, Пер Веннерстен (Ericsson Research), Майкл Доггетт, Томас Акенин-Мёллер (Университет Лунда)
Внешние ссылки
- Ericsson ETCPACK на github
- Инструмент сжатия текстур ETC1 и ETC2 от ARM
- Пример кода для обработки альфа-каналов в ETC1 от ARM
- Формат файла Khronos Texture (в котором используется сжатие ETC1)
- rg_etc1 , быстрый, высококачественный упаковщик / распаковщик блоков ETC1 с лицензией ZLIB в одном исходном файле на C ++
- etcpak , чрезвычайно быстрая утилита сжатия текстур от Ericsson для быстрой подготовки ресурсов от Bartosz Taudul