Вернуться в блог
Форматы

Формат PKM и ETC: полное руководство

10 минута чтения

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 в ваших проектах очень просто:

Кодирование в ПКМ

  1. Загрузите изображение в формате PNG/JPG (размер должен быть кратен 2 или кратен 4).
  2. Выбирайте между ETC1 RGB или ETC2 RGB/RGBA в зависимости от ваших потребностей.
  3. Загрузите сгенерированный файл .pkm и интегрируйте его в свой проект.

Декодирование файлов PKM

  1. Загрузите файл .pkm, чтобы проверить его содержимое.
  2. Предварительный просмотр распакованной текстуры и проверка качества
  3. Экспортируйте в 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:

Попробуйте наши инструменты