Последнее обновление: 21 сент., 2026

Форматы файлов изображений для разработчиков игр: DDS, TGA, PNG и KTX
В разработке игр текстуры составляют наибольшую часть как потребления оперативной памяти во время выполнения, так и размера установочного билда. Независимо от того, создаёте ли вы инди‑стилизованный платформер или стремитесь к фотореализму в AAA‑игре с открытым миром, способ хранения, обработки и загрузки текстурных данных напрямую определяет ваш FPS, время загрузки и совместимость с оборудованием.
Распространённая ошибка новичков — рассматривать игровые текстуры как веб‑графику, полагая, что лёгкий файл на диске обеспечивает лёгкую производительность в игровом движке. В мире GPU реальность выполнения полностью отличается.
В этом подробном разборе мы рассмотрим четыре наиболее критичных формата файлов текстур и изображений в современной разработке игр: DDS, TGA, PNG и KTX. Мы изучим, как они работают, где они вписываются в конвейер ассетов и когда использовать каждый из них.
Золотое правило: дисковое хранилище vs. видеопамять (VRAM)
Прежде чем разбирать отдельные форматы, разработчики должны понять фундаментальную разницу между сжатием дискового хранилища и аппаратным блочным сжатием GPU.
1. Сжатие на диске (PNG, JPEG, WebP)
Форматы, такие как PNG, используют без потерь энтропийное кодирование (DEFLATE). Хотя PNG экономит огромное количество места на SSD или сервере загрузок, современные GPU не могут напрямую использовать PNG‑файлы. Когда ваш игровой движок загружает PNG:
- CPU должен распаковать файл в необработанные, несжатые 32‑битные RGBA‑пиксели в системной памяти.
- Несжатый битмап загружается в видеопамять (VRAM).
- Текстура размером 2048×2048 занимает примерно 16 МБ видеопамяти, независимо от того, был ли PNG размером 1 МБ или 3 МБ на диске.
2. Блочное сжатие GPU (BCn, ASTC, ETC2)
Специализированные форматы GPU сжимают фиксированные блоки пикселей (обычно блоки 4×4 пикселя) в более компактные битовые представления. Графическое оборудование считывает эти блоки непосредственно из видеопамяти без распаковки на стороне CPU:
- Прямой случайный доступ к видеопамяти без накладных расходов на распаковку во время выполнения.
- Та же текстура 2048×2048 с использованием BC7/ASTC занимает всего примерно 4 МБ видеопамяти (сокращение на 75%).
- Мипмапы могут быть запечены непосредственно в файл контейнера.
Контейнеры, такие как DDS и KTX, созданы специально для упаковки этих нативных форматов GPU, тогда как PNG и TGA выполняют отдельные функции на более ранних этапах конвейера.
1. DDS (DirectDraw Surface)
Введённый Microsoft вместе с DirectX 7, формат DirectDraw Surface (.dds) является бесспорным отраслевым рабочим конём для разработки игр на ПК, Xbox и консолях.
Технические характеристики
- Тип контейнера: Нативный контейнер текстур GPU.
- Поддерживаемое сжатие: BC1‑BC7 (Block Compression / семейство DXT), несжатый RGBA, форматы с плавающей точкой (BC6H для HDR).
- Ключевые возможности: Предварительно запечённые мипмапы, кубические карты, массивы текстур, объёмные (3D) текстуры.
Почему разработчики используют DDS
DDS по сути представляет собой прямой дамп памяти того, что требуется графическому оборудованию. При загрузке DDS‑текстуры с заранее сгенерированными мипмапами движок полностью пропускает декомпрессию на CPU и выполняет прямое копирование памяти Direct3D или Vulkan на GPU. Это устраняет узкие места процессора при потоковой передаче и загрузке уровней.
Плюсы
- Молниеносные времена загрузки: Не требуется ни одного цикла декомпрессии CPU во время выполнения.
- Предзапечённые мипмапы: Офлайн‑генерация мипмапов позволяет художникам контролировать фильтрацию, резкость и нормализацию нормальных карт на разных уровнях детализации (LOD).
- Эффективность VRAM: Нативно использует отраслевые алгоритмы сжатия BC.
Недостатки
- DirectX/Windows Bias: Исторически привязан к экосистемам Microsoft, хотя широко поддерживается в современных настольных движках.
- Lossy Compression Artifacts: Блочная компрессия (особенно BC1 на нормальных картах) может вызывать блокирующие артефакты, если не использовать BC5/BC7.
- Limited Mobile Support: Мобильные GPU обычно предпочитают ASTC или ETC2 вместо настольных форматов BC.
2. TGA (Truevision Targa)
Созданный в 1984 году, TGA (.tga) — это несжатый или кодированный методом RLE (Run-Length Encoding) растровый графический формат, который остаётся надёжным элементом конвейера более трёх десятилетий.
Технические характеристики
- Container Type: Несжатый битмап для создания/обмена.
- Bit Depths: 8, 16, 24 и 32 бита на пиксель (RGB + отдельный 8‑битный альфа‑канал).
- Compression: Отсутствует или базовый RLE (Run-Length Encoding).
Почему разработчики используют TGA
TGA предпочитают технические художники и программисты движков за её чистую архитектурную простоту. В отличие от PNG, который внедряет альфа‑канал в сложные фильтрующие матрицы, TGA сохраняет цветовые данные и альфа‑каналы полностью отдельными и нетронутыми.
При создании пользовательских масок (например, упаковывая Roughness в красный канал, Metallic в зелёный, Ambient Occlusion в синий и Height в альфа‑канал), TGA гарантирует отсутствие тонкого алгоритмического смешения или протекания цвета между каналами.
Плюсы
- Безупречная точность данных: Бит‑точное сохранение значений каналов; идеально подходит для текстур с упакованными каналами ORM (Occlusion‑Roughness‑Metallic).
- Тривиальный разбор: Внутренние инструменты конвейера, пользовательские экспортеры и автоматические скрипты могут читать и записывать файлы TGA с минимальным количеством строк кода.
- Универсальная поддержка DCC: Maya, 3ds Max, Blender, Substance 3D и Photoshop предоставляют нативный, безпроблемный экспорт TGA.
Недостатки
- Огромные размеры файлов: Большой объём в репозиториях Git/Perforce и медленные скорости загрузки в распределённых командах.
- Неподходящий для выполнения: Не может быть использован напрямую GPU как сжатый формат; должен быть преобразован движком во время подготовки.
3. PNG (Portable Network Graphics)
PNG (.png) — самый известный в мире без потерь формат изображений, использующий сжатие zlib/DEFLATE для упаковки насыщенных 24‑битных и 32‑битных изображений в удивительно небольшие файлы.
Технические характеристики
- Тип контейнера: Формат без потерь для создания и доставки.
- Глубина цвета: До 16 бит на канал (48‑битный RGB, 64‑битный RGBA).
- Сжатие: Алгоритм без потерь DEFLATE.
Почему разработчики используют PNG
PNG служит основным форматом распространения UI‑активов, спрайтов, рекламных материалов и промежуточных исходных текстур. Для 2D‑игр, созданных в Unity, Godot или Unreal Engine, PNG обеспечивает чёткую пиксельную точность с безупречными масками прозрачности.
Плюсы
- Компактный объём репозитория: Значительно уменьшает размеры выгрузки проекта по сравнению с несжатым TGA.
- Качество цвета без потерь: Отсутствие артефактов сжатия на контрастных краях и векторных иллюстрациях.
- Нативная альфа‑прозрачность: Чистая поддержка 8‑битного альфа‑канала для сложных полупрозрачных UI‑элементов и листов частиц.
Минусы
- Тяжёлая декодировка CPU: Распаковка больших PNG‑файлов во время выполнения замедляет частоту кадров и резко увеличивает использование памяти перед загрузкой на GPU.
- Подводные камни премультиплицированной альфы: Некоторые графические редакторы отбрасывают данные RGB в полностью прозрачных пикселях, что портит растекание текстур и вызывает тёмные контуры вокруг спрайтов.
- Zero VRAM Savings: Декомпрессирует в полную 32‑битную необработанную память внутри GPU, если только не обрабатывается кулинаром текстур движка.
4. KTX (Khronos Texture) и KTX 2.0
Разработано Khronos Group — управляющим органом за Vulkan, OpenGL и glTF — KTX (.ktx) и KTX 2.0 представляют современный открытый стандарт кроссплатформенных GPU‑текстур.
Технические характеристики
- Container Type: Стандартизированный открытый контейнер GPU‑текстур.
- Compression Support: Basis Universal (ETC1S и UASTC), ASTC, BCn, ETC2.
- Key Capabilities: Универсальное транскодирование текстур, мипмапы, кубические карты, массивные текстуры, интеграция с glTF.
Почему разработчики используют KTX
KTX 2.0 решает проблему фрагментированного кроссплатформенного сжатия. Традиционно разработчикам приходилось поставлять DDS (BCn) для настольных ПК/консолей и ASTC/ETC2 для мобильных устройств/планшетов.
С KTX 2.0 и Basis Universal:
- Вы храните текстуры в компактном, универсально сжимаемом формате.
- Во время выполнения клиентское оборудование транскодирует файл напрямую в любой блоковый формат, предпочитаемый локальным GPU (например, BC7 на GeForce RTX, ASTC на iPhone, ETC2 на более старом устройстве Android).
- Суперкомпрессия (Zstandard) создает файлы, меньшие по размеру, чем JPEG на диске, которые транскодируются в нативные блоки VRAM за миллисекунды.
Плюсы
- Истинный кросс-платформенный стандарт: Работает безупречно на Vulkan, WebGL, WebGPU и мобильных устройствах.
- Транскодирование Basis Universal: Один единственный сборка ассета охватывает настольные, мобильные и браузерные платформы без дублирования экспорта текстур.
- Первоклассный companion для glTF: Необходим для современных 3D веб‑опытов, движков метавселенной и открытых рендеринговых конвейеров.
Минусы
- Зрелость инструментов конвейера: Требует современных цепочек сборки (например,
toktxиз набора KTX-Software); более старые проприетарные движки могут не иметь готовой интеграции из коробки. - Накладные расходы транскодера: Небольшая задержка транскодирования во время выполнения (хотя она в несколько порядков быстрее, чем полное программное декодирование PNG).
Сравнение лицом к лицу
| Функция / Критерий | DDS | TGA | PNG | KTX / KTX 2.0 |
|---|---|---|---|---|
| Основное применение | Среда выполнения для ПК/консолей | Создание исходных материалов и маски | 2D-спрайты и исходные изображения | Кроссплатформенная и веб-среда выполнения |
| Прямая выборка GPU | Да (Нативный) | Нет | Нет | Да (Нативный или транскодированный) |
| Сжатие VRAM | Да (BC1–BC7) | Нет (Несжатый) | Нет (Несжатый) | Да (ASTC, BCn, Basis) |
| Предварительно созданные мипмапы | Да | Нет | Нет | Да |
| Размер диска | Умеренный | Очень высокий | Маленький | Крайне маленький (Basis + Zstandard) |
| Экосистема | DirectX / Десктопные движки | Программное обеспечение DCC / Конвейеры исходного кода | Универсальные веб‑ и 2D‑движки | Vulkan, WebGPU, glTF |
Практическое руководство: создание идеального конвейера ассетов
Как следует организовать эти четыре формата в коммерческом производственном конвейере? Вот как ведущие студии структурируют свои текстурные конвейеры:
[DCC & Authoring] [Engine Ingestion / Cook] [Runtime GPU Target]
Substance / Photoshop / Blender Unreal / Unity / Custom Toolset VRAM Memory Blocks
• TGA (Clean packed masks) ──────► Build Engine Texture Cooker ──────► DDS (DirectX / Windows / Xbox)
• PNG (UI & 2D Sprites) ──────► Generates Mipmaps & Block ──────► KTX2 (Vulkan / WebGPU / Mobile)
• PSD / EXR (HDR & masters) ──────► Compression Automatically
- Исходные ресурсы: Храните мастер‑файлы и данные, упакованные по каналам, в TGA или PNG в репозиториях проекта, чтобы гарантировать отсутствие искажений цветовой информации.
- Сборки для ПК и консолей: Преобразуйте исходные текстуры в файлы DDS, используя BC7 для высокодетализированных карт альбедо/нормалей и BC4/BC5 для одно- и двухканальных масок.
- Кроссплатформенные, веб‑ и мобильные сборки: Упакуйте 3D‑активы во время выполнения в KTX 2.0, чтобы воспользоваться универсальным транскодированием на Android, iOS и WebGPU без необходимости поддерживать отдельные ветки арта.
- Пользовательские интерфейсы: Храните текстуры UI во время выполнения либо в чётких несжатых форматах, либо в без потерь атласах движка, полученных из высокоразрешённых исходных файлов PNG.
Часто задаваемые вопросы (FAQ)
Вопрос 1. Может ли игровой движок считывать PNG напрямую из видеопамяти?
A1: Нет; GPU не могут разбирать сжатие PNG, поэтому движки должны распаковывать PNG‑файлы в необработанные 32‑битные битмапы в памяти перед загрузкой их в видеопамять.
Вопрос 2. Почему технические художники предпочитают TGA вместо PNG для упаковки масок?
A2: TGA хранит чистые, несжатые данные каналов без растекания цвета или разрушительной фильтрации прозрачности краёв по отдельным каналам RGB и альфа.
Вопрос 3. Какой алгоритм блочного сжатия следует использовать в контейнере DDS для нормальных карт?
A3: Используйте BC5 (сжатие в тангенциальном пространстве с двумя каналами) для нормальных карт, чтобы сохранить чистую кривизну поверхности без типичных артефактов блоков BC1.
Вопрос 4. Что делает KTX 2.0 лучше, чем DDS, для кроссплатформенных игр?
A4: KTX 2.0 поддерживает Basis Universal, что позволяет одному файлу в режиме реального времени транскодировать в форматы BCn для настольных систем или в форматы ASTC/ETC для мобильных устройств при запуске.
Вопрос 5. Увеличивает ли предварительное запекание мипмапов в файлах DDS или KTX размер диска?
A5: Да, включение полных цепочек мипмапов добавляет примерно на 33 % больше необработанных данных в файл, но устраняет мерцание во время выполнения, улучшает локальность кэша и повышает производительность рендеринга на GPU.