Основы форматов

Что такое DDS: полный гид по формату текстур DirectDraw Surface

Вы скачали мод для любимой игры, а внутри — непонятные файлы .dds, которые не открывает ни одна программа. Разбираемся, почему этот формат создан не для людей, а для видеокарт, как он умудряется ужимать текстуры в разы и что с ним делать обычному пользователю.

Современная видеокарта крупным планом — именно GPU работает с текстурами DDS
DDS — формат, который говорит на языке видеокарты, а не процессора. Фото: Pexels

Что такое DDS простыми словами

DDS (DirectDraw Surface) — это контейнер для текстур, придуманный Microsoft специально для трёхмерной графики. Если PNG и JPG созданы для того, чтобы картинку увидел человек на экране, то DDS создан для того, чтобы картинку максимально быстро прочитала видеокарта во время игры.

В этом и кроется главная идея формата. Обычное изображение процессор сначала распаковывает в память, а уже потом передаёт на отрисовку. Текстура DDS хранится в таком виде, который графический процессор (GPU) понимает напрямую — без промежуточной распаковки. Это экономит видеопамять и время, а в играх каждая миллисекунда на счету.

Коротко

DDS — это «полуфабрикат для видеокарты». Он быстрый и компактный в игре, но почти бесполезен вне 3D-движка: чтобы посмотреть или отредактировать текстуру, её обычно конвертируют в PNG.

Откуда взялся формат: немного истории

Формат DDS появился вместе с DirectX 7.0 в сентябре 1999 года как часть подсистемы DirectDraw — отсюда и название. С тех пор он развивался вместе с DirectX и графическими процессорами:

  • DirectX 8 (2000) — добавил поддержку объёмных (3D) текстур и кубических карт окружения (cubemaps), которые используются для отражений и неба в играх.
  • DirectX 10 (2006) — принёс новые типы сжатия BC4 и BC5 (идеальны для карт нормалей) и расширенный заголовок DX10 для массивов текстур.
  • DirectX 11 (2009) — добавил BC6H для HDR-текстур с расширенным диапазоном яркости и BC7 для максимально качественного цвета.

За четверть века DDS стал негласным стандартом текстур в PC-играх. Именно поэтому, копаясь в файлах практически любой игры — от Skyrim до современных AAA-проектов — вы почти наверняка встретите .dds.

Абстрактный 3D-рендер — текстуры формируют поверхность объектов в графике
Любая поверхность в 3D — это геометрия плюс натянутая на неё текстура. Чаще всего в формате DDS. Фото: Pexels

Как устроен файл DDS внутри

С точки зрения структуры DDS — это простой и логичный контейнер. Файл начинается с сигнатуры DDS  (четыре байта), за которой идёт заголовок размером 124 байта. В заголовке записано всё, что нужно видеокарте: размеры текстуры, тип сжатия, количество мипмап-уровней, наличие альфа-канала и флаги cubemap/volume.

А дальше — собственно пиксельные данные, уже в том формате, который ждёт GPU. Никакой «хитрой» структуры, как в PNG с его чанками и контрольными суммами: DDS максимально прямолинеен, потому что его задача — быть прочитанным железом мгновенно.

Полное имя
DirectDraw Surface
Расширение
.dds
Сигнатура
DDS (0x20534444)
Разработчик
Microsoft
Прозрачность
Да (альфа-канал)
Анимация
Нет

Сжатие BC и DXT: магия блоков 4×4

Самая интересная часть DDS — это блочное сжатие (Block Compression, BCn; раньше его называли S3TC или DXT). Принцип такой: изображение делится на квадраты 4×4 пикселя, и каждый такой блок кодируется отдельно с помощью пары опорных цветов и компактного набора индексов. Видеокарта умеет распаковывать эти блоки «на лету», прямо во время отрисовки.

Разные варианты BC заточены под разные задачи:

ФорматСтарое имяДля чегоАльфа
BC1DXT1Непрозрачные текстуры, минимум места (4 бита/пиксель)1 бит
BC3DXT5Текстуры с плавной прозрачностьюДа
BC4 / BC5Карты высот и нормалей
BC6HHDR-текстуры (расширенный диапазон)
BC7Максимальное качество цветаДа

Важно про качество

Сжатие BC1–BC3 — это сжатие с потерями. Оно даёт фиксированный маленький размер, но огрубляет цвет и оставляет артефакты на градиентах. Поэтому при конвертации DDS в PNG эти артефакты уже «впечатаны» в текстуру — вернуть исходное качество невозможно.

Мипмапы: почему текстуры не мерцают вдалеке

Ещё одна суперспособность DDS — мипмапы (mipmaps). Это заранее уменьшенные копии одной и той же текстуры: полный размер, затем половина, четверть, восьмая и так далее вплоть до 1×1 пикселя. Все они хранятся прямо внутри файла.

Зачем? Когда объект далеко от камеры, видеокарте незачем читать текстуру 4096×4096 — она возьмёт уменьшенную версию. Это убирает неприятное «мерцание» далёких поверхностей и заметно ускоряет отрисовку. По сути, мипмапы — это компромисс «чуть больше места на диске ради большой скорости в игре».

Макросъёмка видеокарты — GPU декодирует блоки текстур DDS в реальном времени
Блочное сжатие DDS декодируется аппаратно — это и есть секрет скорости. Фото: Pexels
4×4размер блока сжатия
≈6:1типичная экономия (BC1)
1999год появления (DirectX 7)

Где используется DDS

DDS — это «закулисный» формат: его почти не видно конечному пользователю, но он есть почти везде, где речь о трёхмерной графике в реальном времени.

  • Игры и игровые движки. Unreal Engine, Unity, CryEngine, Source — все умеют работать с DDS. Это основной формат текстур персонажей, окружения, интерфейса.
  • Моддинг. Сообщества Skyrim, Fallout, GTA, The Sims буквально живут в DDS: ретекстуры и HD-паки почти всегда поставляются именно в нём.
  • 3D-визуализация и CAD. Везде, где нужна быстрая отрисовка материалов на видеокарте.

Как открыть и конвертировать DDS

Поскольку DDS заточен под видеокарту, открыть его двойным кликом обычно не получается. Самый быстрый путь для большинства задач — конвертировать DDS в PNG: PNG понимает любая программа и любой браузер, поддерживает прозрачность и сжатие без потерь.

1

Загрузите файл

Перетащите .dds в онлайн-конвертер — ничего устанавливать не нужно.

2

Выберите PNG

PNG-32 сохранит альфа-канал из DDS, если он есть.

3

Скачайте результат

Готовую текстуру можно открыть и редактировать в Photoshop, GIMP или Paint.NET.

Откройте свою DDS-текстуру прямо сейчас

Бесплатный конвертер FormatZ превратит игровую текстуру в PNG за пару секунд — прямо в браузере, без установки и регистрации.

Конвертировать DDS в PNG

Если вы занимаетесь моддингом и вам нужно вернуть отредактированную картинку обратно в игру, пригодится обратная конвертация — PNG в DDS. А полный список доступных преобразований всегда есть на странице всех форматов.

DDS — это не «плохой PNG». Это другой инструмент для другой задачи: говорить с видеокартой на её языке.
PNG и JPG — форматы для людей и браузеров: их декодирует процессор. DDS — формат для видеокарты: данные хранятся блоками, которые GPU читает напрямую без распаковки. Поэтому DDS быстрее в играх, но почти бесполезен вне 3D-движка.
В большинстве случаев с потерями: блочное сжатие BC1–BC3 (DXT) огрубляет цвет ради фиксированного размера. BC7 даёт заметно меньше артефактов, а несжатый DDS хранит пиксели без потерь, но занимает много места.
Мипмапы — это заранее уменьшенные копии текстуры (1/2, 1/4, 1/8 и т.д.). Видеокарта выбирает нужный размер в зависимости от расстояния до объекта: это убирает мерцание текстур вдалеке и ускоряет отрисовку.
Проще всего конвертировать DDS в PNG — например, в онлайн-конвертере FormatZ. После этого текстуру можно открыть и редактировать в любом редакторе: Photoshop, GIMP, Paint.NET или даже стандартном просмотрщике.
Да. После редактирования PNG конвертируют обратно в DDS с нужным типом сжатия (например, BC3/DXT5 для текстур с прозрачностью). Это стандартный приём в моддинге игр — см. конвертер PNG → DDS.