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

Формат KTX: полное руководство по контейнеру текстур Khronos

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

KTX (Khronos Texture) — официальный открытый стандарт для форматов контейнеров текстур, разработанный и поддерживаемый Khronos Group. Являясь бесплатным и независимым от поставщиков форматом, разработанным специально для современных графических API, таких как OpenGL, OpenGL ES и Vulkan, KTX предоставляет стандартизированный способ хранения и транспортировки сжатых текстур между различными платформами и приложениями. Благодаря двум основным версиям — KTX1 для устаревших приложений OpenGL и KTX2 для современных рабочих процессов на базе Vulkan — KTX служит основой для конвейеров текстурных ресурсов в профессиональной разработке графики.

Что такое формат KTX?

KTX — это формат контейнера, предназначенный для хранения данных текстур таким образом, чтобы их можно было напрямую использовать графическим оборудованием. В отличие от форматов изображений, таких как PNG или JPEG, KTX специально оптимизирован для загрузки текстур графического процессора и поддерживает различные форматы сжатия, включая ETC, ASTC, BCn и PVRTC. Формат включает важные метаданные для правильной интерпретации текстур, что делает его идеальным для кроссплатформенных графических приложений.

Изначально формат был создан для устранения фрагментации форматов сжатия текстур на разных платформах и API. До появления KTX разработчикам приходилось работать с множеством проприетарных форматов, таких как DDS для DirectX, PVR для PowerVR и различными форматами, зависящими от платформы. KTX предоставляет унифицированное решение, которое работает с OpenGL, OpenGL ES и Vulkan, с возможностью прямой загрузки графического процессора.

KTX значительно изменился с момента своего появления, а KTX2 представляет собой большой шаг вперед с точки зрения функций и возможностей. В новой версии добавлена ​​поддержка схем суперсжатия, таких как Basis Universal, улучшена обработка метаданных с помощью дескриптора формата данных (DFD) и улучшена поддержка современных функций текстур, таких как массивы текстур, 3D-текстуры и кубические карты.

Ключевые особенности формата KTX

Хронос Стандарт

Официальный стандарт Khronos Group, обеспечивающий широкое внедрение в отрасли и кроссплатформенную совместимость.

Независимость от формата

Поддерживает практически любой формат сжатия текстур, включая ETC, ASTC, BCn, PVRTC и несжатые форматы.

Богатые метаданные

Комплексная поддержка метаданных, включая ориентацию, цветовое пространство, настройки сжатия и пользовательские пары ключ-значение.

Полная поддержка MIP-карт

Встроенная поддержка цепочек MIP-карт, массивов текстур, 3D-текстур и кубических карт.

Расширенные типы текстур

Поддержка массивов текстур, 3D-текстур, кубических карт и других расширенных типов текстур.

Кроссплатформенность

Беспрепятственно работает на Windows, macOS, Linux, iOS, Android и веб-платформах.

Сравнение версий KTX

Понимание различий между KTX1 и KTX2 имеет решающее значение для выбора правильного формата для вашего приложения:

KTX1 (устаревший)

Исходный формат KTX, разработанный для приложений OpenGL и OpenGL ES. Простая структура, основанная на параметрах текстур OpenGL.

KTX1 использует простую структуру заголовка, за которой следуют данные «ключ-значение», а затем данные изображения. Он совместим со старыми версиями OpenGL и предоставляет базовые возможности хранения текстур. Хотя он по-прежнему широко поддерживается, ему не хватает расширенных функций KTX2.

КТХ2 (Современный)

Современный формат KTX, разработанный для Vulkan и графических приложений следующего поколения. Расширенные функции и поддержка суперсжатия.

KTX2 представляет значительные улучшения, включая суперсжатие Basis Universal, дескрипторы формата данных (DFD), индекс уровня для эффективного доступа к данным, а также улучшенную поддержку массивов текстур и 3D-текстур. Это рекомендуемый выбор для новых проектов.

Поддерживаемые форматы сжатия

KTX служит контейнером для различных форматов сжатия, что делает его невероятно универсальным:

ETC (сжатие текстур Ericsson)

Стандартное сжатие для мобильных устройств: ETC1 для RGB и ETC2 для сжатия RGBA.

ASTC (Адаптивное масштабируемое сжатие текстур)

Современное высококачественное сжатие с поддержкой различных размеров блоков от 4x4 до 12x12 пикселей.

BCn (блочное сжатие)

Форматы сжатия DirectX, включая BC1–BC7, для настольных игр и приложений Windows.

PVRTC (сжатие текстур PowerVR)

Сжатие, специфичное для PowerVR, для iOS и встроенных систем с вариантами 2bpp и 4bpp.

Несжатые форматы

Стандартные несжатые форматы, такие как RGB8, RGBA8 и различные форматы HDR.

Структура файла KTX

Файлы KTX имеют структурированный формат, состоящий из трех основных компонентов:

Заголовок файла

Содержит идентификацию формата, информацию о версии и основные метаданные текстуры, такие как размеры и формат.

Данные «ключ-значение»

Раздел метаданных, содержащий пользовательские пары ключ-значение для дополнительной информации о текстуре.

Данные изображения

Фактические сжатые или несжатые данные текстуры, организованные по уровням MIP-карт и слоям массива.

Структура заголовка KTX1

KTX1 использует 64-байтовый заголовок на основе параметров текстуры OpenGL:

Идентификатор (12 байт)

«KTX 11»\r\n\x1A\n» - Идентификатор формата файла для проверки

Порядок байтов (4 байта)

Указывает порядок байтов: 0x04030201 для прямого порядка байтов, 0x01020304 для прямого порядка байтов.

glType (4 байта)

Тип данных OpenGL (например, GL_UNSIGNED_BYTE) — 0 для сжатых форматов.

glFormat (4 байта)

Формат OpenGL (например, GL_RGB) — 0 для сжатых форматов.

glInternalFormat (4 байта)

Внутренний формат OpenGL (например, GL_COMPRESSED_RGB8_ETC2)

glBaseInternalFormat (4 байта)

Базовый формат OpenGL для совместимости со старыми версиями OpenGL.

ширина пикселя (4 байта)

Ширина текстуры в пикселях

пиксельHeight (4 байта)

Высота текстуры в пикселях (0 для 1D-текстур)

пиксельная глубина (4 байта)

Глубина текстуры в пикселях (0 для 2D-текстур)

NumberOfArrayElements (4 байта)

Количество элементов массива (0 для текстур без массива)

число_лиц (4 байта)

Количество граней (6 для кубических карт, 1 для обычных текстур)

числоОфМипмапЛевелс (4 байта)

Количество уровней MIP-карт (1 для отсутствия MIP-карт)

bytesOfKeyValueData (4 байта)

Размер раздела данных «ключ-значение» в байтах

Улучшения структуры KTX2

KTX2 представляет несколько новых структурных компонентов для расширенной функциональности:

Расширенный заголовок

Улучшенная структура заголовка с информацией о версии, идентификаторами формата и индикаторами размера данных.

Индекс уровня

Эффективная система индексации для быстрого доступа к определенным уровням MIP-карт и данным текстур.

Дескриптор формата данных (DFD)

Комплексная система описания формата, заменяющая константы формата OpenGL.

Данные «ключ-значение»

Расширенная система метаданных с поддержкой интернационализации и сложных типов данных.

Суперсжатие глобальных данных

Глобальные данные для схем суперсжатия, таких как Basis Universal.

Метаданные и данные «ключ-значение»

Файлы KTX могут содержать обширные метаданные в разделе данных «ключ-значение»:

Ориентация текстуры

Определяет ориентацию текстуры (верхний левый, нижний правый и т. д.) для правильного рендеринга.

Информация о формате

Подробная информация о формате сжатия, настройках качества и параметрах кодирования.

Информация о писателе

Информация об инструменте или приложении, создавшем файл KTX.

Настройки сжатия

Используются определенные параметры сжатия и настройки качества.

Цветовое пространство

Информация о цветовом пространстве, включая цветовые профили sRGB, линейный и HDR.

Рабочий процесс разработки KTX

Создание текстур KTX и управление ими включает в себя следующие ключевые этапы:

1

Подготовка исходного актива

Подготовьте высококачественные исходные изображения с соответствующими размерами и цветовыми профилями.

2

Выбор формата

Выберите подходящий формат сжатия в зависимости от целевых платформ и требований к качеству.

3

Сжатие текстур

Используйте такие инструменты, как toktx или конвейеры ресурсов, для сжатия исходных изображений в формат KTX.

4

Добавление метаданных

Добавьте соответствующие метаданные, включая ориентацию, цветовое пространство и пользовательские свойства.

5

Проверка файла

Проверка файлов KTX на совместимость и корректность с целевыми платформами.

6

Интеграция приложений

Интегрируйте загрузку и обработку KTX в ваше графическое приложение.

Ключевые преимущества формата KTX

Отраслевой стандарт

Стандарт Khronos Group, обеспечивающий долгосрочную поддержку и широкое внедрение в отрасли.

Гибкость формата

Поддерживает практически любой формат сжатия, что делает его перспективным и универсальным.

Богатые метаданные

Комплексная система метаданных для правильной интерпретации и управления текстурами.

Расширенные функции

Поддержка современных функций текстур, таких как массивы, 3D-текстуры и суперсжатие.

Кроссплатформенность

Работает на всех основных платформах без изменений и преобразований.

Готовность к будущему

Поддержка KTX2 и суперсжатия обеспечивает совместимость с будущими графическими технологиями.

Общие случаи использования

Приложения Вулкан

Основной формат для современных приложений Vulkan с возможностью прямой загрузки графического процессора.

OpenGL-приложения

Межплатформенный формат текстур для приложений OpenGL и OpenGL ES.

WebGL-приложения

Графические веб-приложения с помощью загрузчиков текстур KTX и WebGL.

Разработка игр

Профессиональная разработка игр с использованием кроссплатформенных конвейеров текстурных ресурсов.

VR/AR-приложения

Приложения виртуальной и дополненной реальности, требующие эффективной загрузки текстур.

Мобильная разработка

Приложения для iOS и Android с оптимизированными форматами сжатия текстур.

KTX против других форматов

Понимание различий KTX с другими форматами текстур:

КТХ против DDS

KTX является кроссплатформенным и не зависит от API, тогда как DDS специфичен для DirectX и ориентирован на Windows.

КТХ против ПВР

KTX поддерживает несколько форматов сжатия, а PVR оптимизирован для графических процессоров PowerVR и iOS.

КТХ1 против КТХ2

KTX2 предлагает сверхсжатие, улучшенные метаданные и современные функции по сравнению с устаревшим KTX1.

KTX против Basis Universal

KTX — это формат контейнера, а Basis Universal — это формат сжатия, который можно хранить в KTX2.

Инструменты и ресурсы разработки

инструмент toktx

Официальный инструмент командной строки для создания и преобразования файлов KTX из различных форматов изображений.

Пакет инструментов KTX

Полный набор инструментов, включая toktx, ktxinfo, ktxcheck и другие утилиты.

Вулкан SDK

Официальный SDK Vulkan включает поддержку KTX и утилиты загрузки.

Библиотеки OpenGL

Различные библиотеки и платформы OpenGL со встроенной поддержкой KTX.

Поддержка Unity KTX

Движок Unity поддерживает загрузку текстур KTX через плагины и конвейеры ресурсов.

Unreal Engine KTX

Unreal Engine обеспечивает поддержку текстур KTX через настройки сжатия текстур.

Лучшие практики для разработки KTX

Используйте KTX2 для новых проектов, чтобы воспользоваться преимуществами современных функций и возможностей суперсжатия.

Выберите подходящий формат сжатия в зависимости от целевой платформы: ETC для мобильных устройств, BCn для настольных компьютеров.

Включите комплексные метаданные, чтобы обеспечить правильную интерпретацию текстур на разных платформах.

Проверяйте файлы KTX на целевом оборудовании на ранних этапах разработки, чтобы избежать проблем совместимости.

Используйте соответствующие настройки MIP-карт для оптимизации производительности рендеринга на разных расстояниях просмотра.

Рассмотрите возможность использования суперсжатия Basis Universal для кросс-платформенного развертывания с оптимальными размерами файлов.

Проверьте производительность загрузки текстур с реальным целевым оборудованием и условиями сети.

Внедрить правильную обработку ошибок и механизмы возврата для неподдерживаемых форматов или функций.

Пути миграции и обновления

Рекомендации по переходу на KTX или обновлению между версиями:

Миграция с KTX1 на KTX2

Используйте toktx с флагом --ktx2 для преобразования устаревших файлов KTX1 в современный формат KTX2.

Конвертация из DDS в KTX

Используйте toktx или инструменты преобразования текстур для переноса текстур DirectX в кроссплатформенный формат KTX.

Конвертация из PVR в KTX

Преобразование текстур PVR, специфичных для iOS, в KTX для обеспечения кроссплатформенной совместимости.

Добавление базового универсального сжатия

Используйте toktx с опциями Basis Universal, чтобы добавить суперсжатие к файлам KTX2.

Почему стоит выбрать KTX2?

KTX2 предлагает значительные преимущества перед KTX1 и другими форматами:

Базовая универсальная поддержка

Встроенная поддержка суперсжатия Basis Universal, обеспечивающая универсальное развертывание текстур.

Улучшенное сжатие

Улучшенная степень сжатия и качество за счет современных схем сжатия.

Схемы суперсжатия

Поддержка различных форматов суперсжатия, помимо Basis Universal.

Дескрипторы формата данных

Комплексная система описания формата, заменяющая устаревшие константы OpenGL.

Перспективный дизайн

Разработан для современных и будущих графических API и технологий сжатия.

Заключение

Формат KTX представляет собой отраслевой стандарт для кросс-платформенного управления текстурами, предоставляя разработчикам надежное, гибкое и перспективное решение для конвейеров текстурных ресурсов. Независимо от того, используете ли вы устаревший KTX1 для приложений OpenGL или современный KTX2 для разработки на базе Vulkan, KTX предлагает инструменты и функции, необходимые для профессиональной разработки графики.

Поскольку графическая индустрия продолжает развиваться в направлении кросс-платформенной разработки и более совершенных технологий сжатия, KTX2 с поддержкой суперсжатия Basis Universal и современными функциями позиционирует себя как лучший выбор для управления текстурами. Понимание формата KTX и его возможностей необходимо любому разработчику, работающему с современными графическими приложениями.

Дополнительная литература и ресурсы

Расширьте свои знания с помощью этих авторитетных ресурсов:

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