Что такое KTX2 и как работать с файлами: просмотр, редактирование, конвертация и проверка текстур

Файл с расширением .ktx2 — это не обычная фотография, которую достаточно открыть в графическом редакторе. KTX2 хранит текстуру в контейнере Khronos Texture 2.0: кроме пикселей в нём могут находиться уровни mipmap, слои массива, шесть граней cubemap, срезы 3D-текстуры, сведения о цветовом пространстве, ориентации и способе кодирования. Поэтому правильная работа с KTX2 начинается не с попытки «переименовать файл в PNG», а с проверки его структуры. Для пиксельной правки практический маршрут обычно выглядит так: извлечь нужное изображение в PNG или EXR, изменить его в редакторе, затем собрать KTX2 заново с теми же параметрами, которые требуются движку или приложению.

Ниже разобраны три разных класса задач: просмотр и диагностика контейнера, редактирование визуального содержимого и техническое перекодирование текстуры. Первый практический сценарий построен через ФотоМАСТЕР: программа используется для растровой правки извлечённого PNG, а операции чтения и сборки KTX2 выполняет KTX-Software. Такой порядок не приписывает обычному фоторедактору нативную поддержку KTX2 и позволяет контролировать то, что чаще всего теряется при неосторожной конвертации: alpha-канал, mipmap-цепочку, цветовую функцию, cubemap faces и array layers.

Что такое KTX2 и почему его нельзя считать обычной картинкой

ПараметрЗначение
Расширение файла.ktx2
Зарегистрированный media typeimage/ktx2
Разработчик стандартаKhronos Group
Основное назначениеКонтейнер текстур для GPU API и 3D/web-пайплайнов
Типичные структуры2D/3D textures, mipmap chains, cubemaps, texture arrays
Транс-кодируемые вариантыBasis Universal ETC1S/BasisLZ и UASTC

KTX2 — второе поколение контейнера Khronos Texture. Его задача — хранить данные текстуры в виде, который удобно передавать графическому API и загружать на GPU. Контейнер может содержать как несжатые данные, так и GPU-ориентированные форматы либо транс-кодируемые представления Basis Universal. Это отличает KTX2 от PNG и JPEG: последние прежде всего описывают одно двумерное изображение, тогда как KTX2 способен описывать целую структуру ресурсов для рендеринга.

У обычной 2D-текстуры внутри KTX2 может быть только базовый уровень изображения. У более сложного файла структура шире. Mipmap-цепочка хранит уменьшенные копии для разных расстояний до объекта; cubemap объединяет шесть направлений окружения; array texture содержит несколько однотипных изображений в слоях; 3D texture имеет глубину и срезы. Дополнительно контейнер содержит Data Format Descriptor и метаданные, по которым приложение понимает формат каналов, transfer function, ориентацию и другие свойства.

KTX и KTX2 — разные форматы

Расширения .ktx и .ktx2 относятся к одной семье, но это KTX 1 и KTX 2. Старые инструкции часто советуют программы, которые умеют читать KTX 1, и автоматически называют их средствами для KTX2. Так делать нельзя. Поддержка первого контейнера не доказывает поддержку второго, а старые команды KTX-Software также отличаются от современного интерфейса командной строки.

Если в старой инструкции встречаются toktx, ktxinfo, ktx2check или ktxsc, это характерный признак прежнего набора утилит. Современная KTX-Software объединяет эти операции вокруг команды ktx и подкоманд create, extract, encode, transcode, info, validate, compare и других. Для новых инструкций лучше использовать именно этот синтаксис.

ETC1S, UASTC и Basis Universal

В KTX2 часто встречаются текстуры Basis Universal. Два наиболее важных режима — ETC1S/BasisLZ и UASTC. ETC1S ориентирован на меньший размер файла и дальнейшее транскодирование в подходящий GPU-формат. UASTC хранит больше информации и обычно выбирается там, где важнее качество или точность структуры данных, но результат получается тяжелее. Оба варианта являются промежуточными представлениями: перед использованием GPU приложение может транскодировать их в BC, ETC/EAC, ASTC или другой формат, который поддерживает устройство.

Это особенно важно при редактировании. PNG, полученный после декодирования ETC1S или UASTC, представляет декодированный результат, а не исходный мастер-файл художника. Если затем снова сжать изображение с потерями, к уже имеющимся изменениям добавятся новые. Для проекта, где исходная графика доступна отдельно, правильнее редактировать мастер PNG, TIFF или EXR и создавать KTX2 заново из него.

Какие данные нельзя потерять при конвертации

Свойство KTX2Почему важноЧто проверить до редактирования
Размер базового уровняОпределяет исходное разрешение текстурыШирину, высоту, а для 3D-текстур ещё и глубину
Mipmap levelsДвижок может ожидать готовую цепочку уровнейКоличество уровней и способ их повторной генерации
FacesCubemap требует шесть согласованных гранейНе является ли файл cubemap; какую грань редактируют
Array layersОдин контейнер может хранить набор изображенийКоличество слоёв и соответствие исходным индексам
AlphaВ alpha часто лежит прозрачность или техническая маскаНужен ли RGBA и нельзя ли заменить его RGB
Transfer functionsRGB и Linear используются для разных типов данныхЦветовая это текстура или data/normal map
OrientationНеверный origin даёт вертикально перевёрнутую текстуруKTXorientation и ожидаемое направление координат
EncodingETC1S, UASTC и GPU-formats имеют разные свойстваНужно ли сохранить transcodable KTX2 или конкретный GPU format

Сначала проверьте KTX2: структура, формат и валидность

Перед извлечением изображения полезно получить описание контейнера. Это занимает одну команду и предотвращает типичную ошибку, когда пользователь видит красивый PNG базового уровня, редактирует его, а затем случайно заменяет cubemap или texture array одной плоской картинкой.

Команда ktx info

ktx info texture.ktx2

ktx info выводит сведения о KTX-файле и при чтении KTX2 выполняет его проверку. В выводе нужно найти размеры, число уровней, layers и faces, формат данных, supercompression и метаданные. Если задача связана с glTF, отдельно обратите внимание на Basis Universal и transfer function: цветовые карты обычно требуют sRGB, а normal map, roughness, metallic, occlusion и другие data textures обрабатываются как линейные данные.

Когда вывод нужно анализировать программой, у ktx info есть структурированные варианты представления. Для ручной диагностики достаточно обычного текстового вывода: цель — зафиксировать исходные параметры до любых преобразований.

Команда ktx validate

ktx validate texture.ktx2

ktx validate проверяет структуру контейнера и сообщает ошибки или предупреждения. Если KTX2 используется с расширением glTF KHR_texture_basisu, добавляют проверку соответствующих ограничений:

ktx validate --gltf-basisu texture.ktx2

Для автоматической сборки полезен режим, в котором предупреждения считаются ошибками: он помогает не пропустить проблему, которая визуально незаметна в одном просмотрщике, но проявится в другом движке. Если validation завершается ошибкой до редактирования, сначала нужно разобраться с исходным файлом; перекодирование повреждённого контейнера не является ремонтом его структуры.

Мини-чек перед любым преобразованием

  • запишите ширину и высоту базового уровня;
  • проверьте, есть ли mipmaps и сколько их;
  • убедитесь, что faces равно шести только для cubemap;
  • проверьте layers для array texture;
  • выясните, нужен ли alpha-канал;
  • отличите цветовую карту от normal/data map;
  • зафиксируйте ETC1S/UASTC либо исходный GPU format;
  • проверьте ориентацию и цветовую функцию, если они важны для целевого движка.

Как открыть и редактировать KTX2 в Windows

1. ФотоМАСТЕР + KTX-Software: основной способ для пиксельной правки

ФотоМАСТЕР не открывает .ktx2 напрямую. В этом способе KTX-Software отвечает за контейнер, а ФотоМАСТЕР — за изменение извлечённого PNG. Такой workflow подходит для albedo/base color, UI-текстур и других изображений, которые действительно нужно править визуально. Для normal map, roughness, metallic, masks и packed textures набор допустимых операций гораздо уже: автоматическая коррекция цвета, контраста или насыщенности может разрушить числовой смысл каналов.

Шаг 1. Проверьте исходный контейнер

ktx info texture.ktx2
ktx validate texture.ktx2

До извлечения убедитесь, что это обычная 2D-текстура с одним слоем и одной гранью. Если обнаружены несколько levels, layers или faces, не используйте простую схему «один PNG туда и обратно»: ниже есть отдельная инструкция по многокомпонентным контейнерам.

Шаг 2. Извлеките базовое изображение

Для текстуры BasisLZ или UASTC можно попросить ktx extract предварительно транскодировать данные в обычный RGBA8, после чего результат сохранится в PNG:

ktx extract --transcode rgba8 texture.ktx2 texture.png

Если входной формат не требует транскодирования и уже экспортируется в PNG/EXR, достаточно:

ktx extract texture.ktx2 texture.png

По умолчанию выбираются уровень 0, слой 0, грань 0 и depth slice 0. Это удобно для простой 2D-текстуры, но опасно для сложного контейнера: команда не означает «извлечь всё». Для полного набора используется --all, о нём — в отдельном разделе.

Шаг 3. Откройте PNG в ФотоМАСТЕР

Запустите ФотоМАСТЕР и нажмите «Открыть фото». То же действие можно выполнить перетаскиванием PNG в рабочую область. После загрузки сверху доступны основные вкладки «Улучшения», «Инструменты», «Ретушь», «Эффекты», «Текст и рамки». Для texture workflow нужны только те операции, которые не меняют семантику технических каналов.

Стартовое окно ФотоМАСТЕР с кнопкой Открыть фото

Для base color допустимы осознанная коррекция экспозиции, баланса цвета, локальная ретушь и геометрические операции. Для normal map нельзя применять «улучшение фотографии»: RGB-компоненты такой карты кодируют направление нормали. Для roughness или metallic каждый пиксель — параметр материала, поэтому художественные фильтры меняют не внешний «тон картинки», а физические свойства поверхности.

Шаг 4. Внесите только необходимые изменения

Основное окно ФотоМАСТЕР показывает изображение по центру, а параметры активного инструмента — справа. Кнопки отмены и повторения позволяют проверить, что правка затронула именно нужную область. Для текстур особенно полезно сравнивать изображение до и после изменения, не накладывая цепочку эффектов вслепую.

Рабочее окно ФотоМАСТЕР с вкладками инструментов и панелью параметров

Если у PNG есть прозрачность, не переводите его в JPEG: JPEG не сохраняет alpha. При необходимости обрезки или изменения размера заранее проверьте требования проекта. Размеры блок-сжатых текстур и mipmap-цепочки часто выбираются не случайно; изменение 4096×4096 на произвольное соотношение сторон может привести к дополнительному ресемплингу или несовместимости с конкретным пайплайном.

Шаг 5. Сохраните рабочий PNG

Для контролируемого сохранения откройте меню «Файл» и выберите «Изменить размер и сохранить». Этот пункт нужен, если требуется зафиксировать размеры; если размер должен остаться исходным, не меняйте его значения. Для KTX2-workflow предпочтителен PNG: это промежуточный формат без JPEG-артефактов и с поддержкой прозрачности.

Меню Файл в ФотоМАСТЕР с пунктом Изменить размер и сохранить

В окне изменения размера доступны ширина, высота и разрешение. Для игровых и 3D-текстур DPI не определяет реальный размер на GPU; важны пиксельные размеры. Если менять их не требуется, сохраните исходную ширину и высоту и нажмите «Применить».

Диалог Изменить размер и сохранить в ФотоМАСТЕР

После этого сохраните результат в PNG. Не включайте преобразование, которое удалит alpha или сократит число каналов, если исходный ресурс использовал RGBA.

Окно сохранения изображения в ФотоМАСТЕР

Шаг 6. Соберите новый KTX2

Для одного PNG команда ktx create требует явного формата. Если это обычная цветовая RGBA-текстура и нужен транс-кодируемый UASTC KTX2, пример может выглядеть так:

ktx create --format R8G8B8A8_SRGB --encode uastc-ldr-4x4 --generate-mipmap edited.png edited.ktx2

Для линейной data texture вместо R8G8B8A8_SRGB нужен соответствующий линейный формат, например R8G8B8A8_UNORM. Для ETC1S/BasisLZ используется --encode basis-lz. Не выбирайте режим только по принципу «какой файл меньше»: normal map и другие чувствительные данные требуют проверки визуальных и числовых артефактов.

Шаг 7. Проверьте новый файл

ktx validate edited.ktx2
ktx info edited.ktx2

Сравните размеры, levels, format, transfer function и alpha с исходником. Если исходник имел несколько заранее подготовленных mipmap, автоматическая генерация создаст новую цепочку, а не восстановит старую байт-в-байт. При высокой цене ошибки лучше сохранить оригинальный KTX2 рядом и тестировать новый ресурс в целевом движке отдельно.

Плюсы способа с ФотоМАСТЕР ом

  • пиксельная правка выполняется в понятном GUI, а контейнер остаётся под контролем специализированного инструмента;
  • PNG позволяет сохранить alpha и не добавляет JPEG-сжатие на промежуточном этапе;
  • перед сборкой можно отдельно выбрать sRGB/Linear, UASTC/ETC1S и генерацию mipmaps;
  • результат проверяется ktx validate и ktx info, а не только визуальным открытием.

Минусы способа с ФотоМАСТЕР ом

  • ФотоМАСТЕР не является нативным KTX2-редактором;
  • для cubemap, arrays и 3D textures нужно извлекать и собирать несколько изображений;
  • повторное lossy-кодирование ETC1S/UASTC может добавить артефакты;
  • обычные фотоэффекты неприменимы к большинству технических карт материала.

2. NVIDIA Texture Tools Exporter

NVIDIA Texture Tools Exporter — более прямой вариант для Windows, когда задача связана не с художественной ретушью, а с просмотром, mipmap, normal maps, cubemap и GPU-компрессией. Программа существует как standalone-интерфейс и как плагин для Adobe Photoshop; эти два сценария не следует смешивать. Для отдельного KTX2 удобнее standalone-приложение: файл открывается через кнопку Open... или перетаскиванием в окно, после чего можно посмотреть исходную и сжатую версии и сохранить результат.

Шаг 1. Откройте KTX2 и посмотрите Input Information

После открытия раскройте Input Information. Для KTX2 этот блок показывает тип текстуры, размеры, число mipmap, array/cubemap, цветовое пространство и сведения об encoded data. Это место полезнее обычного предпросмотра: оно сразу показывает, не пытаетесь ли вы обработать cubemap как одиночное изображение.

NVIDIA Texture Tools Exporter Input Information для KTX2

Шаг 2. Настройте тип и mipmap

В правой части standalone-интерфейса доступны параметры Format, Texture Type, Image Type, Generate Mipmaps, блок Mipmap Options, эффекты и параметры компрессии. Если исходник уже содержит корректную цепочку mipmap и её нужно сохранить, не включайте генерацию без необходимости. Если цепочку нужно пересчитать, выбирайте фильтр осознанно и проверяйте мелкие уровни: именно на них чаще всего проявляются halos, потеря alpha coverage и ошибки normal map.

Полное окно NVIDIA Texture Tools Exporter с параметрами формата и mipmap

Для повторяющихся задач можно сохранить preset. Это полезно в проекте, где десятки текстур должны иметь одинаковый формат и одинаковую mipmap-политику: ручная смена параметров для каждого файла повышает риск расхождения.

Верхняя часть NVIDIA Texture Tools Exporter с Reset, Load Preset и Save Preset

Шаг 3. Сравните результат до сохранения

Опция просмотра compressed output позволяет оценить артефакты до записи файла. Для normal map проверяйте не только крупный preview: откройте проблемные контуры, швы UV и мелкие детали. Для текстуры с alpha проверьте границы прозрачности. Если после сжатия появился цветной шум на data texture, смените формат или режим кодирования, а не пытайтесь «приглушить» артефакт фоторедактором.

Панель NVIDIA Texture Tools Exporter с Input Information и настройками mipmap

Шаг 4. Сохраните KTX2

В standalone-интерфейсе используется Save As.... Выходной контейнер выбирают по требуемому формату проекта. Если downstream-пайплайн ожидает именно KTX2, не подменяйте его DDS только потому, что оба контейнера умеют хранить GPU-сжатые текстуры: набор метаданных, поддерживаемые структуры и интеграция с glTF отличаются.

Плюсы NVIDIA Texture Tools Exporter

  • нативный texture-oriented GUI для Windows;
  • предпросмотр результата компрессии до записи;
  • отдельные настройки mipmaps, normal maps, cubemap и transparency;
  • Input Information помогает проверить структуру файла до преобразования.

Минусы NVIDIA Texture Tools Exporter

  • standalone GUI рассчитан на Windows;
  • инструмент ориентирован на texture processing и компрессию, а не на художественную ретушь;
  • для точного воспроизведения исходного контейнера всё равно нужно сверять число уровней, ориентацию и семантику каналов.

3. KTX-HDR Viewer в Visual Studio Code

KTX-HDR Viewer — расширение Visual Studio Code для предпросмотра .ktx, .ktx2 и .hdr непосредственно в редакторе. Оно показывает изображение, а в status bar — разрешение и размер файла. Это удобный вариант для разработчика, который хочет быстро убедиться, что ресурс читается, не переключаясь в отдельный texture editor.

Главное ограничение — это viewer, а не полноценный KTX2-редактор. Он не заменяет KTX-Software при извлечении всех mipmap/layers/faces и не заменяет PVRTexTool/NVIDIA при перекодировании. Если файл открывается в VS Code, это подтверждает, что конкретный viewer смог его отобразить, но не доказывает сохранность всех структур контейнера после последующей конвертации.

Как работать с KTX2 на macOS

KTX-Software: просмотр структуры, извлечение и сборка

На macOS наиболее универсален CLI KTX-Software: команды одинаковы по смыслу с Windows и Linux, поэтому проект можно автоматизировать одними скриптами. Для первого знакомства это менее наглядно, чем GUI, зато операции однозначны: info описывает контейнер, extract извлекает изображения, create создаёт KTX2, encode меняет способ кодирования, transcode переводит BasisLZ/UASTC в другой texture format внутри KTX2, а validate проверяет результат.

Для обычной цветовой 2D-текстуры схема повторяет Windows: сначала ktx info, затем ktx extract, после правки PNG — ktx create. На macOS ФотоМАСТЕР можно использовать как растровый этап по тому же принципу: он получает PNG, а не KTX2. Повторять всю карточку программы нет смысла; критичные правила те же — сохранить alpha, не менять размеры случайно и не применять фоторедактирование к data maps.

Когда KTX2 находится внутри glTF или GLB

На Mac пользователь нередко сталкивается не с отдельным .ktx2, а с моделью glTF/GLB, где KTX2 подключена через KHR_texture_basisu. В таком случае «открыть текстуру» и «открыть модель» — разные задачи. 3D-viewer может корректно показать материал, хотя отдельный KTX2-файл не открывается стандартным просмотрщиком изображений.

Blender здесь нужен как 3D-приложение для модели, а не как универсальный standalone KTX2 viewer. Поддержка KTX2-текстур внутри glTF/GLB не означает, что произвольный отдельный .ktx2 откроется обычной командой импорта изображения. Для проверки самого контейнера используйте KTX-Software или специализированный viewer.

Как открыть и преобразовать KTX2 в Linux

PVRTexTool: подробный GUI для текстур

PVRTexTool удобен там, где нужен визуальный контроль структуры, mipmap, cubemap и кодирования. В отличие от обычного фоторедактора, интерфейс построен вокруг текстур как GPU-ресурсов. Он читает KTX/KTX2 и позволяет сохранять KTX2, а также работать с рядом других texture containers и обычных изображений.

Основное окно PVRTexTool GUI

Шаг 1. Откройте KTX2 и прочитайте Texture Information

Откройте файл через меню File. В центре появится текущая поверхность текстуры. Внизу слева находится информационный блок: он показывает encoding и dimensions. Эти данные нужно сверить до изменения файла, особенно если вы собираетесь менять формат компрессии.

Панель Texture Information в PVRTexTool

Шаг 2. Проверьте View Mode и Colour Space

View Mode меняет способ отображения. Single показывает одну поверхность; для cubemap выбирается отдельная face. Cube визуализирует cubemap как окружение, а Cube Net показывает все шесть граней одновременно. Рядом доступен Colour Space с вариантами sRGB и Linear. Этот переключатель важен при диагностике: одна и та же числовая текстура визуально выглядит по-разному при разных transfer functions.

Параметры View Mode и Colour Space в PVRTexTool

Шаг 3. Просмотрите mipmap, face и каналы

В правой нижней части окна Level выбирает mipmap level, Face — грань cubemap, а флажки R/G/B/A включают и выключают цветовые каналы. Zoom и Fit позволяют оценить артефакты в масштабе. Для packed texture это особенно полезно: можно отдельно посмотреть канал roughness, metallic или occlusion и не принимать необычное цветное изображение за «повреждённую фотографию».

Level, Face, RGBA и Zoom в PVRTexTool

Шаг 4. При необходимости поверните или замените поверхность

В правом верхнем блоке доступны поворот и отражение. Там же можно загрузить изображение в текущую surface — отдельный mip level, array entry или cubemap face. Это более точный путь для сложного контейнера, чем пересобирать всё из одного PNG. Но заменять конкретную surface следует только после проверки индекса: перепутанная cubemap face даст заметный разрыв окружения.

Шаг 5. Перекодируйте через Edit → Encode…

Выберите Edit → Encode…. В открывшемся окне фильтры сокращают список доступных форматов, затем выбирается encoding format и, если он поддерживается, quality mode. Дополнительные параметры включают Generate MIPMaps, Show As Diff View и Dither. После настройки нажмите Encode.

Окно Encode Texture в PVRTexTool с Generate MIPMaps и кнопкой Encode

PVRTexTool поддерживает Basis Universal ETC1S и UASTC. Для BasisU доступны ступени качества от Lowest до Best: повышение качества увеличивает время кодирования. Выбирайте режим по типу карты и проверяйте Diff View, а не только размер итогового файла.

Шаг 6. Сохраните контейнер и перепроверьте

Сохраните результат как KTX2, если именно этот контейнер требуется дальше. После GUI-обработки полезно всё равно пропустить файл через ktx validate: независимая проверка отделяет «картинка отображается» от «контейнер соответствует ожидаемой структуре».

Плюсы PVRTexTool

  • показывает mipmap, cubemap faces, channels и texture information в одном интерфейсе;
  • умеет кодировать ETC1S и UASTC и генерировать mipmaps;
  • Diff View помогает сравнить исходную и сжатую текстуру;
  • подходит для сложных KTX2, где одного PNG недостаточно.

Минусы PVRTexTool

  • интерфейс рассчитан на понимание texture formats, а не на начинающую фоторетушь;
  • ошибка в выборе face, level или цветового пространства может быть незаметна при просмотре только базовой поверхности;
  • качество компрессии приходится оценивать по содержимому конкретной карты, универсальной настройки для всех текстур нет.

KTX-Software в Linux

Для пакетной работы Linux удобнее GUI: shell-команды легко встроить в asset pipeline. Например, проверку целой директории можно выполнить циклом, а создание KTX2 — привязать к build-процессу. Важное правило остаётся тем же: ktx convert не является общей командой «любой формат в KTX2». В текущем наборе она предназначена для преобразования KTX v1 в KTX2. Для PNG/EXR используется ktx create.

GDAL: специализированный вариант для растровых пайплайнов

GDAL имеет драйвер KTX2 и подходит не для художественного редактирования, а для автоматизированной работы с raster datasets. Такой вариант уместен в GIS или серверной обработке, где KTX2 является одним из форматов в цепочке преобразований и важен программный CreateCopy. Для обычной игровой текстуры GUI PVRTexTool или KTX-Software понятнее и даёт более прямой контроль над Basis/mipmap.

GDAL не следует использовать как универсальную замену texture editor. Сначала нужно проверить, какие характеристики исходного KTX2 драйвер представляет как raster bands/overviews и какие свойства контейнера переживут CreateCopy. Если в файле есть сложная texture-array или cubemap-семантика, обычная растровая модель данных не эквивалентна исходному контейнеру.

Как открыть KTX2 онлайн

Браузерные инструменты удобны для разовой проверки без установки. Их главное различие — насколько полно они понимают KTX2. Один сервис может уверенно декодировать ETC1S/UASTC базового уровня, но не показывать остальные mipmap; другой — лишь частично поддерживать BasisU. Поэтому «файл открылся онлайн» не означает, что сервис способен сохранить весь контейнер без потерь.

texturecompression.com KTX2 Viewer

Этот viewer принимает .ktx2, декодирует UASTC и ETC1S локально в браузере через WebAssembly и показывает preview с zoom/pan. Доступны фильтры R/G/B/A, сведения о формате, размерах и compression type, а декодированный результат можно экспортировать в PNG. Для приватного рабочего файла важно, что декодирование выполняется на устройстве, а не через серверную загрузку.

  1. Перетащите KTX2 в область Upload KTX2 File либо выберите файл.
  2. Дождитесь автоматического transcode/preview.
  3. Переключите RGBA channels и проверьте alpha.
  4. Сверьте metadata, dimensions и compression type.
  5. Экспортируйте PNG, если нужен растровый этап.

Критичное ограничение: текущий viewer показывает base mipmap level. Поэтому он удобен для «увидеть текстуру» и получить PNG, но не заменяет ktx extract --all, когда требуется сохранить всю mipmap-цепочку или несколько faces/layers. Кроме того, PNG после декодирования lossy Basis-текстуры не идентичен исходному мастер-изображению.

texturecompression.com KTX2 Encoder

Обратная операция выполняется отдельным encoder: изображение преобразуется в KTX2, можно выбирать ETC1S или UASTC и генерировать mipmaps. Обработка также выполняется в браузере. Такой способ подходит для одиночной 2D-текстуры, когда нужен быстрый результат и не требуется программная сборка texture array/cubemap.

Перед кодированием определите семантику карты. Для обычного base color нужен корректный sRGB workflow; для normal/data texture нельзя ориентироваться только на визуальную картинку. После браузерного кодирования всё равно полезно проверить новый файл независимым ktx info и ktx validate.

KTXViewer.com

KTXViewer.com позволяет перетащить .ktx или .ktx2 в браузер и имеет отдельные кнопки +X, -X, +Y, -Y, +Z, -Z для cubemap faces. Это полезнее обычного image preview, когда нужно быстро проверить окружение. Поддержка KTX2 у сервиса частичная: отображаются некоторые KTX2 с BasisU. Поэтому отказ открыть файл ещё не означает повреждение контейнера.

Для Safari требуется современная версия браузера; если viewer не работает, сначала исключите ограничение браузера, затем проверьте файл через KTX-Software. При сложной texture array или нестандартном формате предпочитайте desktop/CLI-инструмент с явной диагностикой.

Как оценивать другие браузерные KTX2-конвертеры

Название «KTX2 converter» само по себе не гарантирует сохранение структуры контейнера. Перед использованием проверьте, принимает ли инструмент именно .ktx2 или только обычные изображения, поддерживает ли alpha, что происходит с mipmaps, cubemap faces, array layers и transfer function, а также какой файл формируется на выходе. Если эти параметры не контролируются, рассматривайте сервис как инструмент для одиночной 2D-картинки, а не как полноценный редактор KTX2.

Для ценного ассета работайте с копией и сравнивайте структуру до и после через ktx info. Если исходник содержит больше одного level, face или layer, браузерный маршрут без явной поддержки этих компонентов не подходит для эквивалентной пересборки.

3DPEA: просмотр KTX2, преобразование в изображение и 3D-рельеф

3DPEA умеет открыть KTX2 в браузере и предлагает преобразования KTX2 → PNG, JPEG, WebP и другие растровые форматы. Для простой проверки изображения этот вариант удобен как разовая онлайн-операция, но после конвертации нужно отдельно контролировать, не потеряны ли mipmaps, faces, layers и metadata: растровый файл представляет отдельное изображение, а не весь контейнер.

Операция KTX2 → GLB в 3DPEA имеет другой смысл: сервис строит 3D-модель по изображению и предлагает режимы Stander, Stander color, Extrude и Extrude color с настройками размеров, сегментов, толщины и глубины. Это не упаковка исходной KTX2-текстуры внутрь GLB и не способ сохранить структуру контейнера. Используйте такой маршрут только для намеренного создания рельефной 3D-геометрии из изображения.

Как открыть KTX2 на iPhone и iPad

GLB & GLTF Viewer - 3D Files

Для iPhone/iPad подтверждён практический сценарий с приложением GLB & GLTF Viewer - 3D Files: оно открывает GLB/GLTF из Files/iCloud, отображает PBR-материалы и поддерживает KTX2 texture compression внутри модели. Важно сформулировать это точно: подтверждена работа KTX2-текстур в GLB/glTF, а не прямое открытие произвольного standalone .ktx2 как отдельной картинки.

  1. Откройте GLB или glTF из приложения Files/iCloud через viewer.
  2. Проверьте, что модель и материалы загрузились.
  3. Если приложение показывает материал корректно, KTX2 внутри ассета была обработана в поддерживаемом workflow.
  4. Для извлечения самой текстуры используйте настольный KTX-инструмент: 3D-viewer не предназначен для контейнерной пересборки KTX2.

Такой подход полезен для проверки мобильного результата перед публикацией проекта. Файлы обрабатываются локально в приложении, поэтому модель не нужно отправлять в облачный converter только ради просмотра.

Браузерный KTX2 Viewer на iPhone/iPad

Если нужен именно отдельный KTX2, проще открыть браузерный decoder: выберите файл из Files, дождитесь WebAssembly-декодирования, проверьте каналы и при необходимости экспортируйте базовый level в PNG. Ограничение то же, что на компьютере: браузерный preview не доказывает, что сохранены все mipmaps/array layers. Для реконструкции контейнера используйте desktop KTX-Software.

Как открыть KTX2 на Android

Для Android практичнее использовать браузерный KTX2 viewer или проверять KTX2-текстуры внутри GLB/glTF. Отдельное приложение не стоит выбирать только по тому, что его 3D-движок технически способен работать с Basis Universal: это не доказывает прямое открытие standalone .ktx2. Для контейнерного редактирования и пересборки надёжнее настольные инструменты.

Браузерный способ

  1. Откройте современный браузер с WebAssembly.
  2. Перейдите к KTX2 viewer, который обрабатывает файл локально.
  3. Выберите .ktx2 из файлов устройства.
  4. Проверьте RGBA и metadata.
  5. Экспортируйте PNG только если нужен base-level preview.

Для диагностики сложных массивов, cubemap или проблемного файла перенесите ресурс на компьютер и выполните ktx info/validate. Мобильный браузер удобен как быстрый просмотр, но не заменяет контейнерный pipeline.

KTX2 внутри GLB/glTF на Android

Современные web-viewers моделей могут отображать glTF/GLB с Basis/KTX2-текстурами. Это другой уровень абстракции: пользователь проверяет готовую модель, а не редактирует отдельный texture container. Такой просмотр полезен для проверки того, как ресурс работает на мобильном GPU, но для замены mipmap, перекодирования UASTC/ETC1S или изменения метаданных снова потребуется специализированный инструмент.

Как конвертировать KTX2 в PNG или EXR и не потерять остальные изображения

ktx extract умеет извлекать одно или несколько изображений из KTX2. Формат результата выбирается по типу данных: обычные UNORM-данные сохраняются в PNG, floating-point и некоторые integer/depth варианты — в EXR, а --raw выгружает байты без преобразования. Это точнее, чем универсальный web converter, потому что можно явно выбрать level, layer, face и depth slice.

Извлечь только базовый level

ktx extract texture.ktx2 base.png

Без дополнительных селекторов выбираются level 0, layer 0, face 0 и depth 0. Для обычной 2D-текстуры этого достаточно. Для ETC1S/UASTC, которые нужно декодировать в RGBA, используйте:

ktx extract --transcode rgba8 texture.ktx2 base.png

Извлечь конкретный mipmap

ktx extract --level 3 --transcode rgba8 texture.ktx2 mip3.png

Так можно отдельно сравнить качество мелких mipmap. При повторной сборке не забывайте, что отредактированный level 0 и старая цепочка levels могут перестать соответствовать друг другу. Если базовый рисунок существенно изменился, mipmap лучше пересоздать либо подготовить всю цепочку заново.

Извлечь cubemap face

ktx extract --face 2 --transcode rgba8 environment.ktx2 face2.png

Индекс сам по себе не говорит человеку «верх/низ», поэтому перед правкой сверяйте порядок в исходном инструменте и спецификации проекта. При создании cubemap через ktx create --cubemap входные изображения подаются в порядке +X, -X, +Y, -Y, +Z, -Z.

Извлечь всё

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

ktx extract --all --transcode rgba8 texture.ktx2 output

При многократном извлечении output-path трактуется как каталог. Имена создаются систематически: в них появляются level, face, layer и depth для тех измерений, которые реально присутствуют в исходном контейнере. Такой экспорт — безопасная отправная точка перед сложной ручной правкой: он явно показывает, сколько отдельных изображений нужно вернуть.

Когда нужен EXR вместо PNG

PNG подходит для 8/16-bit normalized изображений. Floating-point HDR, некоторые integer и depth/stencil данные ktx extract сохраняет в EXR. Не конвертируйте такой результат в 8-bit PNG только ради удобного открытия: вы можете потерять диапазон и точность, которые были главным смыслом ресурса. Для HDR- или data-texture выбирайте редактор, который сохраняет соответствующую разрядность и число каналов.

Как собрать PNG или EXR обратно в KTX2

Команда ktx create создаёт KTX2 из PNG, EXR или raw. Ей требуется явный --format, и это полезное требование: пользователь вынужден определить, что означают данные, вместо автоматического выбора «похожего» формата.

Обычная цветовая текстура

ktx create --format R8G8B8A8_SRGB edited.png edited.ktx2

Так создаётся KTX2 с RGBA8 sRGB без дополнительного Basis-кодирования. Если нужен transcodable KTX2, добавьте encoder:

ktx create --format R8G8B8A8_SRGB --encode uastc-ldr-4x4 edited.png edited.ktx2

Для меньшего файла с ETC1S/BasisLZ:

ktx create --format R8G8B8A8_SRGB --encode basis-lz edited.png edited.ktx2

Data texture или normal map

Для числовых данных нужен линейный формат, например R8G8B8A8_UNORM, если именно четыре normalized 8-bit канала соответствуют исходной карте. Не используйте SRGB по привычке: gamma conversion меняет числа каналов. Для normal maps ktx create имеет --normalize, который нормализует входные нормали при подходящем линейном формате.

ktx create --format R8G8B8A8_UNORM --normalize --encode uastc-ldr-4x4 normal.png normal.ktx2

Эта команда является примером для нормальной карты с соответствующим числом каналов; перед применением сверяйте реальный исходный format. Если канал alpha используется для другого параметра, нормализация четырёхкомпонентного входа может изменить его смысл — в таком случае сначала изучите структуру конкретной карты.

Создать mipmap-цепочку

ktx create --format R8G8B8A8_SRGB --generate-mipmap edited.png edited.ktx2

Если --levels не задан, создаётся максимально возможное число levels. Фильтр по умолчанию — Lanczos4; при необходимости выбирается --mipmap-filter. Для карт с прозрачными границами, normal maps и некоторых data textures автоматическая генерация требует отдельной визуальной проверки: качественный фильтр для фотографии не гарантирует правильную семантику технической карты.

Создать cubemap

ktx create --format R8G8B8A8_SRGB --cubemap px.png nx.png py.png ny.png pz.png nz.png environment.ktx2

Порядок входных файлов фиксирован: +X, -X, +Y, -Y, +Z, -Z. Для cubemap texture-coordinate origin должен быть top-left. Если перепутать две грани, файл может быть формально валидным, но окружение получит шов или неверное направление; именно поэтому validation нужно дополнять визуальным Cube/Cube Net preview.

Создать texture array

Для array texture задаётся --layers, а число входных изображений должно соответствовать ожидаемой структуре. При комбинации layers, mipmap и cubemap число файлов растёт, поэтому удобнее использовать file list: ktx create умеет читать имена входных файлов из списка, когда аргумент начинается с @. Это снижает риск случайно поменять порядок длинной последовательности ресурсов.

Orientation: когда картинка внезапно переворачивается

ktx create умеет назначать и преобразовывать texture-coordinate origin. --assign-texcoord-origin записывает заданную ориентацию, а --convert-texcoord-origin при необходимости вертикально переворачивает входное изображение и обновляет metadata. Для cubemap требуется top-left. Если происхождение входного изображения неизвестно, не скрывайте предупреждение: сначала установите, какой origin ожидает проект.

Color space: assign и convert — не одно и то же

--assign-tf сообщает контейнеру, какой transfer function считать у данных, не преобразуя пиксели сам по себе. --convert-tf linear|srgb изменяет пиксельные значения при преобразовании. Ошибка здесь типична: пользователь хочет «пометить как sRGB», а фактически повторно применяет конверсию. При сомнении используйте режимы предупреждений о color conversions и сравнивайте с исходным ktx info.

Zstandard и ZLIB

KTX2 поддерживает дополнительную supercompression. В ktx create доступны --zstd и --zlib с уровнем компрессии. Zstd нельзя сочетать с ETC1S/BasisLZ: этот режим уже имеет собственную supercompression-схему. Не путайте «сжать контейнер сильнее» с «улучшить качество картинки»: уровень Zstd влияет на размер и скорость упаковки/распаковки, а не восстанавливает детали после lossy texture encoding.

KTX2 и DDS: когда конвертация оправдана

DDS и KTX2 решают похожую задачу хранения texture data, но принадлежат разным экосистемам. DDS традиционно распространён в DirectX и инструментах с BC1–BC7; KTX2 — стандарт Khronos с сильной интеграцией Vulkan/OpenGL/WebGL и Basis Universal. Поэтому конвертация имеет смысл, когда меняется целевой pipeline, а не ради самого факта «получить другой файл».

KTX2 → DDS для DirectX/modding

Самый контролируемый GUI-сценарий на Windows — NVIDIA Texture Tools Exporter или PVRTexTool: сначала посмотрите исходный format, mipmaps и alpha, затем выберите BC-формат, подходящий данным. BC1 подходит не для любого RGBA; BC3 сохраняет alpha; BC5 часто применяется к двухканальным normal data; BC7 используется для качественных цветовых RGBA-текстур. Выбор должен следовать требованиям игры/движка.

Браузерный converter удобен для одного изображения, но нужно проверить, что он сохраняет нужные mipmaps/array/cubemap. Если сервис явно работает только с base 2D image, результат не является эквивалентной копией сложного KTX2.

DDS → KTX2

При обратном переходе сначала решите, должен ли KTX2 хранить конкретный GPU compressed format или Basis Universal. Если конечная цель — web/glTF и требуется универсальное runtime-transcoding, разумнее создать KTX2 из качественного исходного изображения с UASTC/ETC1S, чем многократно перекодировать уже lossy BC-текстуру. Если master source утрачен, отмечайте, что качество уже ограничено исходным DDS.

Почему ktx transcode не создаёт DDS

Название transcode легко понять неправильно. ktx transcode транскодирует BasisLZ/UASTC в выбранный target format, но выход остаётся KTX2. Например, target BC7 означает BC7-данные в KTX2-контейнере, а не DDS. Чтобы получить DDS, используйте инструмент, который явно записывает DDS.

KTX2 в glTF и GLB

Что делает KHR_texture_basisu

В glTF расширение KHR_texture_basisu связывает текстуры модели с KTX2/Basis. Смысл такого workflow — передать один переносимый texture asset и выбрать подходящий GPU format на устройстве. Это особенно полезно для web и мобильных устройств, где набор поддерживаемых compressed formats различается.

После ручной замены KTX2 внутри проекта проверьте не только сам файл, но и glTF-ссылки: URI, MIME, extension usage и соответствие материала. Валидный отдельный KTX2 не гарантирует, что модель ссылается на него правильно.

Отдельный .ktx2 и встроенная в GLB текстура — не одно и то же действие

GLB может хранить ресурсы внутри бинарного контейнера. Если текстура встроена, простая замена файла в папке ничего не изменит: ресурс нужно заменить в модели и снова сохранить GLB. Именно поэтому пользователь может увидеть KTX2-материал в 3D-viewer, но не найти рядом файл texture.ktx2.

three.js

В экосистеме three.js есть KTX2Exporter и инструменты загрузки/транскодирования. Это API для разработчиков, а не desktop converter. Такой путь подходит, когда KTX2 создаётся или обрабатывается внутри JavaScript pipeline: например, texture/render target нужно экспортировать программно, а результат затем используется веб-приложением.

При выборе этого способа проверяйте не только визуальный preview в одном браузере. Тестируйте target devices, потому что runtime transcoder может выбирать разные GPU formats. Ошибка, которая не проявилась на компьютере с BC7, может обнаружиться на мобильном устройстве, где выбран ASTC/ETC.

xeokit

xeokit использует KTX2 в 3D/BIM-пайплайне и содержит KTX2TextureTranscoder для runtime-обработки. Это хороший пример того, почему KTX2 нельзя описывать только как «расширение картинки»: приложение может хранить переносимый compressed payload и транскодировать его в формат GPU при загрузке модели.

Blender : проверяйте задачу, а не расширение

Скриншот программы Blender

Blender полезен, если нужно открыть или проверить саму 3D-модель, но standalone KTX2 следует диагностировать специализированными KTX-инструментами. Если модель импортировалась без текстуры, сначала выясните, где лежит resource и как он подключён, затем проверьте KTX2 отдельно. Не конвертируйте текстуру в PNG «для совместимости» до выяснения причины: так легко потерять преимущества KTX2 и получить рабочий preview ценой неверного production-asset.

Инструменты для разработчиков и автоматизации

Следующие средства не нужно ставить в один ряд с GUI-viewers. Их задача — чтение структуры, экспорт или runtime-transcoding из кода. Для каждого важно понимать границу: наличие parser API ещё не означает наличие encoder, а возможность транскодировать texture data не равна пиксельному редактированию.

pyktx2

pyktx2 — Python-пакет для разбора KTX2. Он подходит для скриптов, которым нужно читать заголовок и структуру контейнера, извлекать сведения и интегрировать KTX2 в Python-инструментарий. Его разумнее рассматривать как программный parser, а не замену KTX-Software или полноценному GUI-viewer.

Практический сценарий: pipeline принимает набор ассетов, Python-скрипт проверяет dimensions/metadata, формирует отчёт и отправляет подозрительные файлы на дальнейшую validation. Для создания и полноценного encoding KTX2 используйте инструмент, который документирует соответствующие операции.

ktx2-reader для Rust

ktx2-reader предоставляет Rust-способ читать KTX2. Такой crate полезен в собственном engine/tool, где нужно самостоятельно интерпретировать контейнер и передать payload графическому слою. Его наличие не означает, что приложение автоматически умеет декодировать каждый compressed format: parser и codec/transcoder — разные уровни.

cl-ktx2 для Common Lisp

cl-ktx2 ориентирован на чтение KTX2 из Common Lisp. Библиотека не заменяет полный стек compression/encoding KTX-Software, а часть данных может обрабатываться как opaque octets. Поэтому она годится для разбора и интеграции, но не является универсальным «конвертером KTX2».

three.js KTX2Exporter

KTX2Exporter применяется внутри three.js-кода. Его стоит выбирать, когда texture data уже существует как объект WebGL/three.js и нужно получить KTX2 программно. Для ручного редактирования одного файла такой путь сложнее, чем KTX-Software или browser encoder, зато хорошо вписывается в автоматическую сборку веб-ассетов.

xeokit KTX2TextureTranscoder

KTX2TextureTranscoder — runtime-компонент xeokit. Он решает задачу доставки texture data к GPU, а не ручной реставрации KTX2. Сценарий полезен в viewer: модель содержит KTX2, библиотека выбирает/получает подходящее представление, затем рендерер использует его без предварительного сохранения PNG.

@maptalks/transcoders.ktx2

Этот пакет относится к web/карточной 3D-экосистеме maptalks и предоставляет KTX2-transcoding как модуль. Его следует выбирать только внутри соответствующего JavaScript stack. Для пользователя, который просто получил файл из игры или 3D-редактора, модуль излишен: CLI KTX-Software быстрее даст info, extract и validate.

KTX2-Encoder

JavaScript/Wasm KTX2 encoders удобны, когда кодирование должно происходить в браузере или web-приложении. Их сильная сторона — интеграция без native desktop UI. Ограничение — приложение-разработчик должно само определить параметры и корректно обработать color space, alpha, mipmap и тип карты. Хороший encoder не может угадать, является ли красный канал «цветом» или packed roughness.

Отдельные практические сценарии

Microsoft Flight Simulator 2024

В Microsoft Flight Simulator 2024 исходные текстуры проекта обычно редактируются как PNG и при сборке пакета компилируются в KTX2. Поэтому для livery и другого собственного ассета предпочтителен исходный PNG-пайплайн и Package Tool, а не ручная правка уже собранного контейнера. Сторонний ImageToMSFSKTX2 решает узкую задачу PNG/TIF → MSFS 2024 KTX2 и не является универсальным KTX2-редактором.

У MSFS 2024 есть дополнительная особенность: часть Marketplace-ассетов может использовать нестандартные варианты KTX2, а .ktx2p служит для потоковой упаковки связанных текстур. Если KTX2 изменён после сборки, оставшийся KTX2P способен сохранить старые данные в runtime. Для community-пакета безопаснее пересобрать проект из исходных текстур, чем подменять финальные файлы вручную.

Обратное преобразование KTX2 из симулятора в редактируемое изображение также должно начинаться с проверки контейнера. Не предполагайте, что каждый файл использует одинаковую структуру или channel semantics только потому, что расширение одно.

LUT и другие data textures

Lookup table может выглядеть как странная цветная таблица, но пиксели представляют функцию преобразования, а не фотографию. Даже небольшая ошибка в значениях LUT способна заметно изменить итоговый цвет после выборки. Поэтому LUT не редактируют инструментами «улучшить фото»; изменения выполняют в исходном генераторе LUT или числовым способом, после чего KTX2 создают заново.

Normal map

Normal map кодирует направление нормали в каналах. Изменение hue, saturation, white balance, curves или локальной резкости как для фотографии меняет векторы. Допустимы операции, которые понимают normal data: специализированная фильтрация, нормализация, корректное формирование mipmaps. В KTX-Software для подходящих linear inputs предусмотрен --normalize, а NVIDIA/PVRTexTool имеют texture-oriented инструменты.

Packed material texture

В одном RGB(A) файле движок может хранить несколько независимых масок: например, occlusion, roughness и metallic в разных каналах. В таком случае цветной preview обманчив. Сначала в PVRTexTool или online viewer отключите лишние R/G/B/A и посмотрите каждый канал отдельно. Если редактируется только roughness, изменяйте именно соответствующий grayscale-канал и не трогайте остальные.

Cubemap

Cubemap состоит из шести faces. При обычном ktx extract без selectors вы получите только face 0 и можете ошибочно решить, что весь KTX2 — одно изображение. Используйте --all или извлекайте faces по индексам. Перед обратной сборкой проверьте порядок +X, -X, +Y, -Y, +Z, -Z и швы на Cube Net preview.

Texture array

Array texture хранит несколько слоёв одинакового назначения. Частый пример — набор однотипных surface maps или ресурсов для shader. При редактировании сохраните индексы layers: перестановка двух карт может не нарушить KTX2 validation, но приложение будет читать не тот слой. Удобно оставлять имена, созданные ktx extract --all, до окончания работы.

3D texture

У 3D texture есть depth slices. Экспорт одного PNG показывает только выбранный slice. Если задача — изменить объёмные данные, используйте полный набор slices и инструмент, который понимает их смысл. ktx create имеет --depth, но автоматическая генерация mipmap имеет ограничения для 3D textures; не переносите рецепт для 2D картинки без проверки.

Почему KTX2 не открывается

Файл на самом деле KTX 1

Сначала проверьте расширение и вывод KTX-инструмента. Если перед вами .ktx, инструкция для KTX2/Basis может быть неприменима. Для миграции KTX v1 в KTX2 существует ktx convert; это как раз тот случай, для которого современная подкоманда convert предназначена.

Viewer поддерживает только часть KTX2

Самый показательный пример — KTXViewer.com: сайт прямо сообщает о partial KTX2 support и открывает некоторые BasisU-файлы. Ошибка такого viewer не доказывает повреждение. Перекрёстная проверка: ktx validate, затем ktx info, затем другой viewer.

Формат нельзя декодировать выбранным инструментом

KTX2 может содержать разные форматы данных. Browser decoder, который ориентирован на ETC1S/UASTC, не обязан понимать любой GPU-specific format. Посмотрите format/DFD через ktx info. Если файл BasisLZ/UASTC, используйте transcode-aware tool; если это конкретный compressed format, выберите viewer, который его поддерживает.

Повреждён контейнер

ktx validate выдаёт ненулевой статус при invalid input. Не пытайтесь исправить такой файл сменой расширения. Сначала сравните размер с резервной или проектной копией, повторно экспортируйте ресурс и исключите обрезанный файл. Если единственная копия действительно повреждена, нужна диагностика структуры, а не обычный image converter.

Перепутаны sRGB и Linear

В этом случае файл обычно открывается, но выглядит слишком светлым, тёмным или «не таким». Сравните transfer function исходника и нового контейнера. Для base color используется sRGB workflow, для большинства data maps — linear. Исправление состоит не в подстройке яркости «на глаз», а в правильном назначении/преобразовании transfer function.

Текстура перевёрнута

Причина часто связана с origin. Проверьте KTXorientation и правила целевого движка. При создании нового KTX2 используйте --assign-texcoord-origin либо --convert-texcoord-origin осознанно. Если изображение имеет необычную EXIF-style orientation, предварительно приведите его к физически правильной ориентации в raster tool.

Открывается только одна грань или один уровень

Это не обязательно ошибка viewer. Некоторые инструменты по умолчанию показывают base level/face 0. В PVRTexTool переключите Level и Face; в CLI используйте --level, --face или --all. Если используется browser viewer с base-mip-only ограничением, перейдите к CLI.

KTX2 встроен в GLB

Если рядом нет отдельного файла, но модель использует KTX2, ресурс может находиться внутри GLB. Сначала распакуйте/обработайте сам 3D-ассет подходящим glTF tool, затем работайте с texture resource. Переименование GLB или попытка открыть его как KTX2 бессмысленны: это другой контейнер.

Windows не знает, какой программой открыть расширение

Файловая ассоциация операционной системы не говорит ничего о валидности KTX2. Не устанавливайте случайную программу только потому, что каталог расширений назвал её «opener»: подобные каталоги нередко смешивают KTX1 и KTX2. Запустите специализированный texture tool и откройте файл из него.

Как проверить результат после редактирования или конвертации

Проверка должна быть отдельным этапом, а не финальным взглядом на красивый preview. KTX2 может корректно показывать level 0 и одновременно потерять остальные mipmap или layers. Следующий порядок ловит большинство ошибок до загрузки в проект.

  1. Запустите validation. ktx validate output.ktx2 не должен сообщать структурных ошибок.
  2. Сравните info. Сопоставьте dimensions, levels, layers, faces, format, supercompression и transfer function с исходником или техническим заданием.
  3. Посмотрите alpha отдельно. Прозрачность и packed data часто теряются незаметно в RGB-preview.
  4. Переключите каждый mipmap. Ищите halos, шум, исчезновение мелких деталей и неправильную alpha coverage.
  5. Для cubemap проверьте шесть faces. Лучше использовать Cube Net/Cube preview, где видны швы.
  6. Для arrays проверьте индексы layers. Формально валидный контейнер может иметь неправильный порядок изображений.
  7. Проверьте orientation. Сравните отличительные элементы сверху/снизу, а не симметричную тестовую текстуру.
  8. Проверьте color space. Base color и data maps должны иметь ожидаемую transfer function.
  9. Откройте вторым независимым viewer. Это помогает отличить дефект файла от ограничения конкретного приложения.
  10. Проверьте в целевом движке. Именно runtime покажет, корректно ли выполняются transcoding, sampling и material interpretation.

Когда использовать ktx compare

ktx compare полезен для автоматического сравнения KTX-ресурсов, когда нужно контролировать, насколько новый результат отличается от эталона. Однако побайтовое различие после перекодирования ожидаемо. Сравнение должно отвечать задаче: для lossless pipeline важна точность данных, для lossy texture compression — допустимое визуальное/числовое отклонение и сохранность структуры.

Как выбрать способ для своей задачи

СпособПлатформаЧто делает лучше всегоГлавное ограничение
ФотоМАСТЕР + KTX-SoftwareWindows, macOS для растрового этапа; KTX CLI кроссплатформенныйРучная пиксельная правка извлечённой 2D-текстурыФотоМАСТЕР не открывает KTX2 напрямую
NVIDIA Texture Tools ExporterWindowsGUI-компрессия, mipmaps, cubemap, normal maps, previewОриентирован на texture pipeline, а не фоторетушь
PVRTexToolDesktopПросмотр levels/faces/channels и кодирование разных texture formatsТребует понимания форматов и семантики данных
KTX-SoftwareWindows, macOS, LinuxТочная CLI-диагностика, extract/create/encode/transcode/validateНет привычного фоторедакторского GUI
KTX-HDR ViewerVisual Studio CodeБыстрый preview KTX/KTX2 во время разработкиViewer, не контейнерный editor
texturecompression.comОнлайнБыстрый ETC1S/UASTC preview и base-level PNGViewer показывает только базовый mipmap
KTXViewer.comОнлайнБыстрая проверка и cubemap face controlsPartial KTX2 support
GDALCLI/APIАвтоматизированный raster/GIS pipelineНе эквивалент сложного texture editor
three.js/xeokit-библиотекиWeb developmentExport/runtime transcoding внутри приложенияТребуют программной интеграции
GLB & GLTF Viewer - 3D FilesiPhone/iPadПроверка KTX2-текстур внутри GLB/glTFНе подтверждён как standalone .ktx2 editor

Для разовой задачи «посмотреть, что лежит в файле» достаточно browser viewer, но при любом сомнении перепроверьте ktx info. Для ручной коррекции albedo удобен первый workflow с ФотоМАСТЕР. Для regular asset pipeline предпочтительнее KTX-Software и preset/script. Для сложного cubemap/array удобнее PVRTexTool. Для Windows GPU-compression с живым preview — NVIDIA Texture Tools Exporter.

Какие ошибки чаще всего портят KTX2 после редактирования

ОшибкаЧто происходитКак предотвратить
Экспорт только level 0Пропадает исходная mipmap-цепочкаСначала ktx info, при необходимости ktx extract --all
JPEG как промежуточный файлДобавляются артефакты, теряется alphaИспользовать PNG или EXR по типу данных
sRGB для normal/data mapЧисловые значения каналов проходят неверную gamma-интерпретациюИспользовать подходящий linear format
Фоторетушь normal mapИзменяются векторы нормалейПрименять texture-specific processing и normalize
Один PNG вместо cubemapТеряются пять facesИзвлекать/собирать все шесть граней
Перестановка layersShader читает неправильные данныеСохранять индексы и имена extracted files
Повторное ETC1S без master sourceНарастают lossy-артефактыПо возможности кодировать из исходного мастер-изображения
Случайный resizeМеняется детализация и вся mipmap-цепочкаСверять dimensions до и после
Смена orientationТекстура переворачивается по вертикалиКонтролировать KTXorientation/origin
Проверка одним viewerОграничение viewer принимают за дефект или наоборотValidation + второй viewer + целевой runtime

Практические рекомендации по качеству и размеру

ETC1S — когда размер важнее

ETC1S/BasisLZ логичен для большого числа цветовых текстур, где важен компактный дистрибутив и допускается более заметная потеря качества. Проверяйте мелкие детали, текст, тонкие градиенты и sharp masks: именно там компрессия выдаёт себя раньше. Не переносите одинаковый quality preset с albedo на normal map без теста.

UASTC — когда нужен более качественный intermediate

UASTC чаще выбирают при более строгих требованиях к качеству и для data/normal workloads, где дополнительные артефакты нежелательны. Цена — больший файл. KTX2 позволяет дополнительно использовать Zstandard для UASTC-потока, если это соответствует pipeline. Оценивайте не только размер KTX2 на диске, но и то, во что текстура транскодируется на реальном устройстве.

Не оптимизируйте только по размеру файла

Самый маленький KTX2 не обязательно самый выгодный. На итог влияют время декодирования/transcoding, GPU format, VRAM, количество mipmap, качество и тип контента. Для UI-текста или normal map компрессионный дефект может быть дороже нескольких сотен килобайт. Для массовых дальних background-текстур, наоборот, дополнительная экономия может быть оправдана.

Храните master source отдельно

Production-практика проще, если KTX2 считается производным asset, а не единственным оригиналом. Храните исходный PNG/TIFF/EXR и параметры кодирования в проекте. Тогда изменение выполняется в master, после чего KTX2 пересобирается предсказуемо. Это исключает накопление артефактов от циклов decode → edit → encode.

Частые вопросы

Можно ли открыть KTX2 в Adobe Photoshop ?

Скриншот программы Adobe Photoshop

Не следует считать Adobe Photoshop универсальным нативным KTX2-opener только потому, что в старых KTX-инструкциях встречаются плагины. Проверенный сценарий NVIDIA использует собственный Texture Tools Exporter/плагин и конкретный экспортный workflow. Для независимой работы с контейнером надёжнее сначала извлечь PNG/EXR через KTX-Software, а затем открыть растровый файл в Adobe Photoshop или ФотоМАСТЕР.

Можно ли открыть KTX2 в GIMP ?

Скриншот программы GIMP

GIMP удобен как редактор PNG/EXR, если нужный тип изображения поддерживается, но наличие поддержки KTX/KTX-плагинов из старых каталогов не нужно автоматически трактовать как полноценную поддержку современного KTX2 со всеми Basis/mipmap/array/cubemap. Без подтверждённого KTX2 workflow используйте тот же безопасный путь: extract → raster edit → create.

Можно ли открыть KTX2 в Blender ?

Blender полезен для модели и материала, особенно когда KTX2 связан с glTF/GLB. Но это не причина обещать прямое открытие любого standalone .ktx2 как обычного изображения. Для диагностики самого файла используйте KTX-Software/PVRTexTool; для модели — проверяйте весь glTF pipeline.

Можно ли переименовать .ktx2 в .png?

Нет. Расширение не меняет структуру файла. PNG и KTX2 имеют разные контейнеры и заголовки. Для получения PNG нужно декодировать/извлечь image data через ktx extract или совместимый viewer.

Почему KTX2 после конвертации весит больше?

Размер зависит от режима и содержимого. UASTC может быть заметно крупнее ETC1S; несжатый KTX2 — ещё крупнее. Дополнительные mipmaps также занимают место. Сравнивайте одинаковые структуры и одинаковое назначение, иначе «до/после» некорректно.

Почему PNG после KTX2 отличается от исходного PNG?

Если KTX2 был закодирован lossy ETC1S или UASTC, декодированный PNG отражает уже сжатые данные. Это не восстановление исходного source. Кроме того, различия могут появиться из-за transfer function, orientation и channel conversion. Сначала исключите sRGB/Linear и flip, затем оценивайте compression artifacts.

Как извлечь все mipmap?

Используйте ktx extract --all или --level all. При multi-image extraction output-path считается каталогом, а имена файлов включают level и другие имеющиеся индексы. Не используйте browser viewer, который показывает только base level, как инструмент полного экспорта.

Что выбрать: ETC1S или UASTC?

ETC1S — приоритет компактности; UASTC — более высокий приоритет качества и точности intermediate. Для normal/data textures чаще оправдан более осторожный UASTC workflow, но окончательный выбор зависит от целевого GPU, runtime-transcoding и допустимой ошибки. Сравнивайте на реальном материале, а не на одной тестовой фотографии.

Нужны ли mipmaps?

Для 3D-рендеринга mipmaps обычно используются для стабильной фильтрации на расстоянии и уменьшения aliasing, но конкретный проект может генерировать их в runtime или хранить заранее. Смотрите исходный контейнер и требования движка. Если исходник имеет уровни, не удаляйте их автоматически.

Почему normal map выглядит фиолетовой?

Такое отображение само по себе нормально: каналы кодируют компоненты normal vector, а не реалистичный цвет. Не «исправляйте оттенок» цветокоррекцией. Проверяйте normal map в material shader или специализированном texture tool.

Можно ли конвертировать KTX2 в JPEG?

Технически декодированное цветовое изображение можно сохранить в JPEG, но для рабочего texture pipeline это обычно плохой промежуточный формат: JPEG добавляет lossy-артефакты и не хранит alpha. Для редактирования и обратной сборки используйте PNG, а для HDR/float — EXR.

Почему онлайн-сервис открывает KTX2, а другой нет?

Поддержка зависит от container features и codec. Один viewer ориентирован на Basis ETC1S/UASTC, другой имеет partial KTX2, третий может не понимать определённый GPU format. ktx validate и ktx info помогают отличить ограничение сервиса от дефекта файла.

Как понять, что KTX2 безопасно заменять в игре или 3D-проекте?

Сравните dimensions, format, levels, layers, faces, transfer function и alpha; проверьте validation; затем протестируйте копию проекта. Если ресурс входит в GLB или связан metadata/manifest, простая замена файла может быть недостаточна. Сохраняйте оригинал отдельно.

Что делать, если нужен только быстрый просмотр?

Используйте browser KTX2 viewer или KTX-HDR Viewer. Если отображение выглядит подозрительно, не делайте вывод о повреждении до ktx validate. Для cubemap выбирайте viewer с face controls либо PVRTexTool.

Что делать, если нужно отредактировать только один канал?

Сначала выясните, что именно хранится в R/G/B/A. Извлеките PNG, разделите/измените нужный канал в подходящем raster workflow и убедитесь, что остальные значения не изменились. После сборки сравните каналы отдельно в PVRTexTool или online viewer. Не применяйте глобальную цветокоррекцию к packed map.

Итоговый выбор по сценарию

Для ручного изменения обычной 2D base-color текстуры наиболее понятен контролируемый цикл: KTX-Software извлекает PNG, ФотоМАСТЕР выполняет нужную растровую правку, а ktx create собирает новый KTX2. Для Windows texture pipeline с mipmap и live compression preview удобнее NVIDIA Texture Tools Exporter. Для cubemap, channels и разных encoding formats на desktop полезен PVRTexTool. Для автоматизации и точной диагностики основным инструментом остаётся KTX-Software.

Онлайн-viewer подходит для разовой проверки, но его ограничения нужно учитывать: base-mip-only или partial KTX2 support нельзя путать с возможностями самого формата. На телефоне KTX2 чаще встречается как часть GLB/glTF или открывается браузером; придумывать «универсальное мобильное приложение» без подтверждённой standalone-поддержки не нужно.

Главное правило при любой конвертации — считать KTX2 контейнером, а не одной картинкой. До изменения фиксируйте structure и semantics, после изменения проверяйте validation, levels, faces, layers, alpha, orientation и color space. Если хранится исходный master PNG/EXR и параметры encoding, KTX2 можно пересобирать сколько угодно раз без накопления лишних потерь и без ручного восстановления структуры из готового runtime-ресурса.

Тип контента: 

Оставте свой отзыв о Что такое KTX2 и как работать с файлами: просмотр, редактирование, конвертация и проверка текстур

CAPTCHA на основе изображений
Введите символы, которые показаны на картинке.