DDS
DDS (от англ. DirectDraw Surface) — это формат файла для хранения текстур и кубических карт, разработанный компанией Microsoft в 1999 году для использования в графическом API DirectX. Формат предназначен для сжатия, хранения и быстрой загрузки растровых изображений, поддерживает различные типы сжатия, включая алгоритмы, основанные на блочном сжатии (BC, ранее известные как S3TC), а также хранение MIP-карт и объёмных текстур. DDS широко применяется в разработке компьютерных игр, 3D-моделировании и визуализации, особенно в средах, использующих DirectX, а также в игровых движках, таких как Unity и Unreal Engine.
История
Формат DDS был представлен вместе с выходом DirectX 7.0 в 1999 году. Его создание было обусловлено необходимостью унифицированного способа хранения текстур, оптимизированных для аппаратного ускорения графики. До появления DDS разработчики часто использовали нестандартные или проприетарные форматы, что усложняло совместимость и замедляло загрузку текстур в видеопамять.
В 2002 году, с выходом DirectX 9.0, формат был расширен для поддержки кубических карт (Cubemap) и объёмных текстур (Volume Texture). В 2009 году, в DirectX 10, была добавлена поддержка новых форматов сжатия BC6 и BC7, которые обеспечивают более высокое качество сжатия изображений с высокой контрастностью и плавными градиентами. В последующих версиях DirectX 11 и 12 формат оставался обратно совместимым, но не претерпевал существенных изменений.
Структура файла
Файл DDS состоит из двух основных частей: заголовка и данных текстуры.
Заголовок
Заголовок файла DDS содержит метаданные, описывающие формат и свойства текстуры. Он включает в себя:
- DWORD dwMagic — сигнатура (магическое число)
DDS(0x20534444), идентифицирующая файл как DDS. - DDSURFACEDESC2 — структура, описывающая поверхность (ширина, высота, глубина, количество MIP-уровней, флаги, указывающие на наличие сжатия, кубической карты и т.д.).
- DDPIXELFORMAT — структура, определяющая формат пикселей: тип сжатия (например, DXT1, DXT5, BC7), количество бит на пиксель, маски каналов (для несжатых форматов).
Для кубических карт и объёмных текстур используются дополнительные флаги в заголовке, указывающие на количество граней (6 для кубической карты) или глубину (для объёмной текстуры).
Данные текстуры
Данные текстуры хранятся в виде последовательности блоков, соответствующих MIP-уровням. Для сжатых форматов (например, BC1–BC7) данные представляют собой блоки фиксированного размера (4×4 пикселя), каждый из которых сжат по определённому алгоритму. Для несжатых форматов (например, A8R8G8B8) данные хранятся в виде последовательности пикселей.
Для кубических карт данные каждой грани хранятся последовательно, начиная с положительной оси X (по соглашению DirectX). Для объёмных текстур данные разбиваются на срезы (slices) по оси Z.
Типы сжатия
DDS поддерживает несколько типов сжатия, которые делятся на две основные группы: сжатие на основе блочного сжатия (BC) и несжатые форматы.
Блочное сжатие (BC)
Блочное сжатие (ранее известное как S3TC) — это семейство алгоритмов, которые сжимают блоки 4×4 пикселя в фиксированный объём данных (8 или 16 байт). Основные форматы BC, поддерживаемые DDS:
- BC1 (DXT1) — сжатие 4:1, поддерживает до 1 бита альфа-канала (прозрачность/непрозрачность). Используется для текстур без прозрачности или с бинарной прозрачностью.
- BC2 (DXT2, DXT3) — сжатие 4:1, поддерживает 4-битный альфа-канал. Отличается от BC3 тем, что альфа-канал сжимается отдельно, с меньшей точностью.
- BC3 (DXT4, DXT5) — сжатие 4:1, поддерживает 8-битный альфа-канал с интерполяцией. Наиболее распространённый формат для текстур с плавной прозрачностью.
- BC4 (ATI1) — сжатие 2:1, одноканальный формат (оттенки серого). Используется для карт высот, нормалей и других одноканальных данных.
- BC5 (ATI2) — сжатие 2:1, двухканальный формат (например, для хранения нормалей в формате RG). Часто используется для карт нормалей.
- BC6H — сжатие 2:1, формат с плавающей точкой (16 бит на канал) для HDR-текстур. Поддерживает высокую контрастность и динамический диапазон.
- BC7 — сжатие 4:1, формат с высоким качеством для RGB и RGBA текстур. Обеспечивает лучшее качество сжатия, чем BC1–BC3, особенно для изображений с плавными градиентами.
Несжатые форматы
DDS также поддерживает хранение текстур без сжатия. Наиболее распространённые несжатые форматы:
- A8R8G8B8 — 32-битный формат с 8 битами на канал (альфа, красный, зелёный, синий).
- X8R8G8B8 — 32-битный формат без альфа-канала (8 бит на канал RGB, 8 бит не используются).
- R8G8B8 — 24-битный формат без альфа-канала.
- A8 — 8-битный одноканальный формат (альфа-канал).
- L8 — 8-битный формат яркости (оттенки серого).
Применение
DDS широко используется в различных областях компьютерной графики, особенно в разработке игр и 3D-моделировании.
Разработка компьютерных игр
В игровой индустрии DDS является одним из основных форматов для хранения текстур. Его преимущества включают:
- Быстрая загрузка — данные в DDS уже подготовлены для загрузки в видеопамять, что уменьшает время загрузки уровней и объектов.
- Поддержка MIP-карт — DDS может хранить несколько уровней детализации (MIP-уровни), что позволяет автоматически выбирать подходящий уровень в зависимости от расстояния до камеры.
- Сжатие без потерь качества — блочное сжатие (BC) позволяет значительно уменьшить размер текстур (в 4–8 раз) без заметного ухудшения визуального качества.
- Поддержка кубических карт — DDS используется для хранения карт окружения (environment maps) и карт отражений (reflection maps).
3D-моделирование и визуализация
В программах для 3D-моделирования, таких как Blender, 3ds Max и Maya, DDS используется для экспорта и импорта текстур, особенно при работе с игровыми движками. Формат также поддерживается в пакетах для визуализации, таких как V-Ray и Corona Renderer, хотя для финального рендеринга чаще используются другие форматы (например, EXR или PNG).
Научная визуализация и симуляции
DDS применяется в научной визуализации для хранения объёмных данных (например, результатов симуляции жидкостей или газов). Формат поддерживает объёмные текстуры, что позволяет хранить трёхмерные массивы данных, такие как плотность, температура или скорость.
Инструменты для работы с DDS
Существует множество инструментов для создания, просмотра и редактирования файлов DDS:
- NVIDIA Texture Tools — набор утилит и плагинов для Adobe Photoshop, позволяющий создавать DDS-текстуры с различными настройками сжатия.
- Microsoft DirectX Tex Tool (texconv) — консольная утилита для конвертации изображений в DDS и обратно, входящая в состав DirectX SDK.
- Intel Texture Works Plugin — плагин для Adobe Photoshop, поддерживающий форматы BC6H и BC7.
- GIMP с плагином dds — бесплатный редактор, поддерживающий импорт и экспорт DDS.
- Blender — поддерживает импорт DDS через встроенные функции или сторонние аддоны.
Ограничения и недостатки
Несмотря на широкое распространение, DDS имеет ряд ограничений:
- Зависимость от DirectX — формат тесно связан с API DirectX, что может вызывать проблемы при использовании в других графических API (например, OpenGL или Vulkan), хотя многие реализации поддерживают DDS через конвертацию.
- Размер файлов — несжатые форматы DDS могут занимать много места на диске, особенно для текстур высокого разрешения.
- Сложность редактирования — сжатые форматы (BC) не поддерживают прямое редактирование без потери качества, так как сжатие является блочным и необратимым.
- Ограниченная поддержка альфа-канала — формат BC1 (DXT1) поддерживает только бинарную прозрачность, что может быть недостаточно для текстур с плавной прозрачностью.
Сравнение с другими форматами
DDS часто сравнивают с другими форматами текстур, такими как KTX (Khronos Texture) и PVR (PowerVR Texture). KTX, разработанный Khronos Group, является более универсальным форматом, поддерживающим OpenGL и Vulkan, но менее распространённым в игровой индустрии. PVR используется в мобильных устройствах с графическими процессорами PowerVR, но не поддерживается на большинстве настольных систем. DDS остаётся стандартом для платформ Windows и Xbox, а также для игр, использующих DirectX.
Источники
- Microsoft. DirectDraw Surface (DDS) Specification. MSDN Library.
- NVIDIA. NVIDIA Texture Tools Documentation.
- Intel. Intel Texture Works Plugin Documentation.
- Khronos Group. KTX Specification.
- Real-Time Rendering, 4th Edition. Tomas Akenine-Möller, Eric Haines, Naty Hoffman.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →