Формат PKM и ETC: полное руководство
PKM — это простой формат контейнера для текстур, сжатых ETC, широко используемый на платформах Android и OpenGL ES. В этой статье представлено полное руководство по пониманию структуры формата PKM, версий сжатия ETC/ETC2 и их эффективного использования.
Что такое формат ПКМ?
PKM (сокращение от PoKeMon, названное Ericsson) — это простой формат контейнера, разработанный специально для хранения текстурных данных, сжатых ETC. В отличие от сложных форматов, таких как KTX или DDS, PKM имеет минимальную структуру: всего лишь 16-байтовый заголовок, за которым следуют сжатые данные изображения.
Формат был создан, чтобы обеспечить упрощенный способ хранения и загрузки текстур, сжатых ETC, на мобильные устройства. Его простота упрощает реализацию и анализ практически без каких-либо дополнительных затрат, кроме самих сжатых данных текстуры.
Структура файла ПКМ
- 16-байтовый заголовок: магическое число (PKM), версия, формат, размеры.
- Сжатые данные текстуры: необработанные блоки ETC/ETC2.
Версии сжатия ETC
Существует две основные версии сжатия ETC, каждая из которых имеет разные возможности:
ETC1 (сжатие текстур Ericsson 1)
Исходный стандарт ETC, поддерживающий только цветовые каналы RGB с фиксированной степенью сжатия 4:1. Широко поддерживается на устройствах Android, начиная с OpenGL ES 2.0.
Поддерживать: Все устройства OpenGL ES 2.0+
Степень сжатия: Фиксированное соотношение 4:1 (4 бита на пиксель)
ETC2 (сжатие текстур Ericsson 2)
Улучшенный преемник ETC1, добавляющий поддержку RGBA с несколькими вариантами формата. Обеспечивает лучшее качество и поддержку альфа-канала, сохраняя при этом обратную совместимость.
Поддерживать: OpenGL ES 3.0+, Вулкан
Степень сжатия: От 4:1 до 8:1 в зависимости от формата
Варианты формата ПКМ
PKM может содержать различные типы форматов ETC:
ETC1 RGB
Исходный формат, только RGB, без альфа-канала
ETC2 RGB
Улучшенное сжатие RGB с лучшим качеством, чем у ETC1.
ETC2 RGBA
Полная поддержка RGBA со сжатием 8:1 (8 бит на пиксель)
ETC2 RGB + сквозной альфа
RGB с 1-битным альфа-каналом, поддерживающим сжатие 4:1.
Преимущества ПКМ/ETC
Универсальная поддержка Android
ETC1 гарантированно поддерживается на всех устройствах Android, что делает его наиболее портативным форматом сжатия для разработки под Android.
Фиксированная степень сжатия
Предсказуемое использование памяти с постоянной степенью сжатия 4:1 или 8:1, упрощающей расчеты бюджета памяти.
Хорошее соотношение качества и размера
ETC2 обеспечивает превосходное визуальное качество для большинства типов текстур, сравнимое с настольными форматами, такими как DXT/BCn.
Аппаратное декодирование
Прямая декомпрессия графического процессора с нулевой нагрузкой на процессор во время рендеринга, обеспечивающая эффективную выборку текстур.
Ограничения и соображения
Ограничения качества ETC1
ETC1 может отображать видимые артефакты на текстурах с высокочастотной детализацией или плавными градиентами. Рассмотрите возможность использования ETC2 для лучшего качества.
Нет альфы в ETC1
ETC1 не поддерживает альфа-каналы. Вам необходимо использовать ETC2 RGBA или хранить альфа-канал отдельно, если вы ориентируетесь на устройства OpenGL ES 2.0.
Ограниченные расширенные функции
PKM не поддерживает MIP-карты, кубические карты и массивы текстур. Используйте форматы KTX или KTX2 для этих расширенных функций.
Как использовать формат PKM
Использовать файлы PKM в ваших проектах очень просто:
Кодирование в ПКМ
- Загрузите изображение в формате PNG/JPG (размер должен быть кратен 2 или кратен 4).
- Выбирайте между ETC1 RGB или ETC2 RGB/RGBA в зависимости от ваших потребностей.
- Загрузите сгенерированный файл .pkm и интегрируйте его в свой проект.
Декодирование файлов PKM
- Загрузите файл .pkm, чтобы проверить его содержимое.
- Предварительный просмотр распакованной текстуры и проверка качества
- Экспортируйте в PNG, если вам нужно отредактировать или проверить текстуру.
Лучшие практики
- Используйте ETC1 RGB для максимальной совместимости со всеми устройствами Android (OpenGL ES 2.0+)
- Предпочитайте ETC2 RGBA при настройке современных устройств (OpenGL ES 3.0+), которым необходимы альфа-каналы.
- Убедитесь, что размеры текстуры кратны 4 (ETC1) или степени 2 для наилучшего качества.
- Для текстур, требующих альфа-канала на старых устройствах, рассмотрите возможность использования отдельных текстур в оттенках серого.
- Протестируйте сжатые текстуры на реальных целевых устройствах — восприятие качества зависит от типа контента.
Заключение
PKM со сжатием ETC/ETC2 является стандартным выбором для разработки OpenGL ES для Android и мобильных устройств. Его универсальная поддержка, предсказуемая производительность и хорошее качество делают его отличным стандартом для сжатия текстур на мобильных устройствах.
Наши онлайн-инструменты кодирования и декодера PKM упрощают работу с текстурами, сжатыми ETC, без установки инструментов командной строки или SDK. Независимо от того, создаете ли вы новые текстуры или проверяете существующие, эти инструменты помогут вам оптимизировать конвейер мобильной графики.
Дальнейшее чтение и ссылки
Узнайте больше о форматах ETC и PKM:
- Сжатие текстур ETC (Хронос) - Официальная спецификация OpenGL ES и документация формата ETC
- Сжатие текстур Эрикссон (Википедия) - История и технические подробности алгоритмов сжатия ETC
- Графика Android: сжатие текстур - Официальное руководство Android по форматам сжатия текстур
- Спецификация формата файла PKM - Техническая спецификация контейнера формата ПКМ