Как создать файл dds

Обновлено: 21.11.2024

Формат графических файлов DirectDraw Surface был установлен Microsoft для использования с DirectX SDK. Формат специально разработан для использования в приложениях рендеринга в реальном времени, таких как 3D-игры. Его можно использовать для хранения текстур, кубических карт, уровней MIP-карт и позволяет выполнять сжатие. Поскольку большинство видеокарт изначально поддерживают сжатие текстур DXTn, использование этого формата может сэкономить память видеокарты.

Драйверы могут выполнять это сжатие на лету благодаря расширению GL_ARB_texture_compression. Таким образом, кажется, что единственным преимуществом DDS является просто уменьшенное пространство (что означает более быструю загрузку) без «двойной деградации», вызванной повторным сжатием уже сжатых форматов, таких как JPEG. Однако файлы DDS раскрывают этот автоматизированный процесс художникам. Это позволяет автору изображения исправлять или предотвращать артефакты, которые могут возникнуть в полностью автоматизированном процессе сжатия, или даже выделять определенные части MIP-карт изображения.

Общие характеристики форматов файлов

Формат растрового изображения

Особые проблемы с движком

Doom 3 использует файлы .DDS при запуске с качеством ниже «Ультра» для экономии памяти текстур (за исключением карт нормалей, которые используют только версии .DDS со значением «Среднее» или ниже).

Вы можете принудительно загрузить все из файлов TGA, установив для image_usePrecompressedTextures значение 0. Изображения по-прежнему будут динамически сжиматься во время загрузки (что значительно замедлит загрузку), но это сделает так, что при изменении TGA он действительно появится в игре без необходимости регенерировать файлы DDS. Вы также можете установить для image_useCompression и image_useNormalCompression значение 0, что предотвратит их сжатие во время загрузки (это похоже на работу в режиме сверхвысокого качества).

Примечание. Это означает, что если вы вносите изменения в текстуру и используете уровень качества ниже «Ультра», вы не увидите изменений, потому что Doom 3 считывает данные из .DDS. файл.

Примечания

Чтобы преобразовать изображение в DDS, вы можете использовать тот же идентификатор инструмента: The Compressonator от ATI.

  • Для создания файлов DDS в Photoshop необходимо загрузить подключаемый модуль Nvidia DDS.
  • Чтобы создавать и редактировать файлы DDS в Gimp, необходимо загрузить подключаемый модуль DDS.

См. страницу "Текстурирование", для которой следует использовать метод DXTn в зависимости от изображения.

Direct3D реализует формат файла DDS для хранения несжатых или сжатых (DXTn) текстур. Формат файла реализует несколько немного различающихся типов, предназначенных для хранения разных типов данных, и поддерживает однослойные текстуры, текстуры с MIP-картами, кубические карты, карты объемов и массивы текстур (в Direct3D 10/11). В этом разделе описывается структура файла DDS.

Справку по созданию текстуры в Direct3D 11 см. в разделе Практическое руководство. Создание текстуры. Справку по Direct3D 9 см. в разделе Поддержка текстур в D3DX (Direct3D 9).

Макет файла DDS

Файл DDS — это двоичный файл, содержащий следующую информацию:

DWORD (магическое число), содержащее четырехзначное кодовое значение «DDS» (0x20534444).

Описание данных в файле.

Данные описываются описанием заголовка с использованием DDS_HEADER; формат пикселей определяется с помощью DDS_PIXELFORMAT. Обратите внимание, что структуры DDS_HEADER и DDS_PIXELFORMAT заменяют устаревшие структуры DDSURFACEDESC2, DDSCAPS2 и DDPIXELFORMAT DirectDraw 7. DDS_HEADER является двоичным эквивалентом DDSURFACEDESC2 и DDSCAPS2. DDS_PIXELFORMAT — это двоичный эквивалент DDPIXELFORMAT.

Если для DDS_PIXELFORMAT dwFlags установлено значение DDPF_FOURCC, а для dwFourCC установлено значение «DX10», будет присутствовать дополнительная структура DDS_HEADER_DXT10 для размещения массивов текстур или форматов DXGI, которые не могут быть выражены в формате пикселей RGB, таких как форматы с плавающей запятой, форматы sRGB. и т. д. При наличии структуры DDS_HEADER_DXT10 все описание данных будет выглядеть следующим образом.

Указатель на массив байтов, содержащий основные данные поверхности.

Указатель на массив байтов, содержащий оставшиеся поверхности, такие как; уровни mipmap, грани в кубической карте, глубины в объемной текстуре. Перейдите по этим ссылкам для получения дополнительной информации о макете файла DDS для: текстуры, кубической карты или объемной текстуры.

Библиотека D3DX (например, D3DX11.lib) и другие подобные библиотеки ненадежно или непоследовательно предоставляют значение шага в члене dwPitchOrLinearSize структуры DDS_HEADER. Поэтому, когда вы читаете и записываете файлы DDS, мы рекомендуем вам вычислять высоту тона одним из следующих способов для указанных форматов:

Для форматов с блочным сжатием шаг вычисляется следующим образом:

max( 1, ((ширина+3)/4)) * размер блока

Размер блока составляет 8 байт для форматов DXT1, BC1 и BC4 и 16 байт для других форматов с блочным сжатием.

Для форматов R8G8_B8G8, G8R8_G8B8, устаревших форматов, упакованных UYVY, и устаревших форматов, упакованных YUY2, шаг вычисляется следующим образом:

Для других форматов шаг вычисляется следующим образом:

( ширина * бит на пиксель + 7 ) / 8

Вы делите на 8 для выравнивания байтов.

Рассчитываемое вами значение шага не всегда совпадает с шагом, предоставляемым средой выполнения, который в некоторых случаях выравнивается по DWORD, а в других — по байтам. Поэтому мы рекомендуем вам копировать строку сканирования за раз, а не пытаться скопировать все изображение в одной копии.

Варианты DDS

Существует множество инструментов, которые создают и используют файлы DDS, но они могут различаться по деталям того, что им требуется в заголовке. Писатели должны заполнять заголовки как можно полнее, а читатели должны проверять минимальные значения для максимальной совместимости. Чтобы проверить файл DDS, читатель должен убедиться, что файл имеет длину не менее 128 байт для размещения магического значения и основного заголовка, магическое значение равно 0x20534444 ("DDS"), размер DDS_HEADER равен 124, а DDS_PIXELFORMAT в заголовке размер равен 32. Если для DDS_PIXELFORMAT dwFlags установлено значение DDPF_FOURCC, а для dwFourCC установлено значение «DX10», общий размер файла должен быть не менее 148 байт.

Существует несколько часто используемых вариантов, в которых для формата пикселей задан код DDPF_FOURCC, а для dwFourCC задано значение перечисления D3DFORMAT или DXGI_FORMAT. Невозможно определить, является ли значение перечисления D3DFORMAT или DXGI_FORMAT, поэтому настоятельно рекомендуется вместо этого использовать расширение «DX10» и заголовок DDS_HEADER_DXT10 для хранения dxgiFormat, когда базовый DDS_PIXELFORMAT не может выразить формат.

Для максимальной совместимости для хранения несжатых данных RGB и данных DXT1-5 следует отдавать предпочтение стандартному DDS_PIXELFORMAT, поскольку не все инструменты DDS поддерживают расширение DX10.

Использование массивов текстур в Direct3D 10/11

Новые структуры DDS (DDS_HEADER и DDS_HEADER_DXT10) в Direct3D 10/11 расширяют формат файлов DDS для поддержки массива текстур, который является новым типом ресурсов в Direct3D 10/11. Вот пример кода, который показывает, как получить доступ к различным уровням MIP-карт в массиве текстур, используя новые заголовки.

Распространенные форматы файловых ресурсов DDS и связанное содержимое заголовков

wRBitMask dwGBitMask dwBBitMask dwABitMask DXGI_FORMAT_R8G8B8A8_UNORM
D3DFMT_A8B8G8R8
DDS_RGBA 32 0xff 0xff00 0xff0000 0xff000000 DXGI_FORMAT_R16G16_UNORM
D3DFMT_G16R16
DDS_RGBA 32 0xffff 0xffff0000 **
DXGI_FORMAT_R10G10B10A2_UNORM
D3DFMT_A2B10G10R10
DDS_RGBA 32 0x3ff 0xffc00 0x3ff00000 DXGI_FORMAT_R16G16_UNORM
D3DFMT_G16R16
DDS_RGB 32 0xffff 0xffff0000 DXGI_FORMAT_B5G5R5A1_UNORM
D3DFMT_A1R5G5B5
DDS_RGBA 16 0x7c00 0x3e0 0x1f 0x8000 DXGI_FORMAT_B5G6R5_UNORM
D3FMT_R5G6B5
DDS_RGB 16 0xf800 0x7e0 0x1f DXGI_A8_UNORM
D3DFMT_A8
DDS_ALPHA 8 0xff D3DFMT_A8R8G8B8
DDS_RGBA 32 0xff0000 0xff00 0xff 0xff000000 D3DFMT_X8R8G8B8
DDS_RGB 32 0xff0000 0xff00 0xff D3DFMT_X8B8G8R8
< td>DDS_RGB 32 0xff 0xff00 0xff0000 * *
D3DFMT_A2R10G10B10
DDS_RGBA 32 0x3ff00000 0xffc00 0x3ff 0xc0000000 D3DFMT_R8G8B8
DDS_RGB 24 0xff0000 0xff00 0xff D3DFMT_X1R5G5B5
DDS_RGB 16 0x7c00 0x3e0 0x1f D3DFMT_A4R4G4B4
< td>DDS_RGBA 16 0xf00 0xf0 0xf 0xf000 D3DFMT_X4R4G4B4
DDS_RGB 16 0xf00 0xf0 0xf D3DFMT_A8R3G3B2
DDS_RGBA 16 0xe0 0x1c 0x3 0xff00 D3DFMT_A8L8
DDS_LUMINANCE< /td> 16 0xff 0xff00 D3DFMT_L16
DDS_LUMINANCE 16 0xffff D3DFMT_L8
DDS_LUMINANCE 8 0xff D3DFMT_A4L4
DDS_LUMINANCE 8 0xf 0xf0 < th>dwFourCC < /tr> < td>DDS_FOURCC < td>110 < td>DDS_FOURCC
Формат ресурса dwFlags
DXGI_FORMAT_BC1_UNORM
D3DFMT_DXT1
DDS_FOURCC " DXT1"
DXGI_FORMAT_BC2_UNORM
D3DFMT_DXT3
DDS_FOURCC "DXT3"
DXGI_FORMAT_BC3_UNORM
D3DFMT_DXT5
DDS_FOUR CC "DXT5"
*
DXGI_FORMAT_BC4_UNORM
DDS_FOURCC "BC4U"
*
DXGI_FORMAT_BC4_SNORM
DDS_FOURCC "BC4S"
*
DXGI_FORMAT_BC5_UNORM
DDS_FOURCC "ATI2"

DXGI_FORMAT_BC5_SNORM
DDS_FOURCC "BC5S"
DXGI_FORMAT_R8G8_B8G8_UNORM
D3DFMT_R8G8_B8G8< br />
DDS_FOURCC "RGBG"
DXGI_FORMAT_G8R8_G8B8_UNORM
D3DFMT_G8R8_G8B8
"GRGB"
*
DXGI_FORMAT_R16G16B16A16_UNORM
D3DFMT_A16B16G16R16
DDS_FOURCC 36
*
DXGI_FORMAT_R16G16B16A16_SNORM
D3DFMT_Q16W16V16U16
DDS_FOURCC
*
DXGI_FORMAT_R16_FLOAT
D3DFMT_R16F
DDS_FOURCC 111
*
DXGI_FORMAT_R16 G16_FLOAT
D3DFMT_G16R16F
DDS_FOURCC 112
*
DXGI_FORMAT_R16G16B16A16_FLOAT
D3DFMT_A16B16G16R16F
DDS_FOURCC 113
*
DXGI_FORMAT_R32_FLOAT
D3DFMT_R32F
DDS_FOURCC 114
*
DXGI_FORMAT_R32G32_FLOAT
D3DFMT_G32R32F
115
*
DXGI_FORMAT_R32G32B32A32_FLOAT
D3DFMT_A32B32G32R32F
DDS_FOURCC 116
D3DFMT_DXT2
DDS_FOURCC "DXT2"
D3DFMT_DXT4
DDS_FOURCC "DXT4"
D3DFMT_UYVY
< /td>
DDS_FOURCC "UYVY"
D3DFMT_YUY2
DDS_FOURCC "YUY2"
D3DFMT_CxV8U8
DDS_FOURCC 117
Любой формат DXGI DDS_FOURCC "DX10"

* = Надежный считыватель DDS должен иметь возможность обрабатывать эти устаревшие коды форматов. Однако такой считыватель DDS должен предпочесть использовать расширение заголовка "DX10" при записи этих кодов формата, чтобы избежать двусмысленности.

** = Из-за некоторых давних проблем в распространенных реализациях устройств чтения и записи DDS наиболее надежным способом записи данных типа 10:10:10:2 является использование расширения заголовка "DX10" с расширением Код DXGI_FORMAT "24" (то есть значение DXGI_FORMAT_R10G10B10A2_UNORM). Данные D3DFMT_A2R10G10B10 должны быть преобразованы в данные типа 10:10:10:2 перед записью в виде файла DDS формата DXGI_FORMAT_R10G10B10A2_UNORM.

Одним из наиболее загадочных аспектов создания контента для игр на основе Doom 3 (Doom 3, Quake 4 и др.) является DDS; что они собой представляют, что они делают и, что более важно, как их создавать. В этом руководстве рассматривается процесс создания текстур DDS с использованием собственного инструмента ATI для работы — The Compressonator, который использовался программным обеспечением id для контента Doom 3. К счастью, он не говорит с очень плохим шведским акцентом и не имеет никаких политических устремлений!

Содержание
Ресурсы

Примечание разработчика: текстуры DDS, Oblivion и другие игры

Если вы создаете новые текстуры для программных игр без id, таких как Elder Scroll: Oblivion, обязательно проверьте, какой именно DDS (DXT) был использован «фильтр»; они не все одинаковы, поэтому использование неправильного фильтра приведет к какой-то ошибке; либо текстуры не будут отображаться, либо будут отображаться неправильно. Это не всегда легко выяснить, поэтому вам может потребоваться провести небольшое исследование в зависимости от того, какие инструменты вы используете.

Если вы не редактируете технологию программного обеспечения id, вы можете использовать последнюю версию ATI. инструменты (вопреки важному примечанию ниже).

ВАЖНОЕ ПРИМЕЧАНИЕ

Что такое DDS? ^

DDS — это аббревиатура от «Direct Draw Surface», и, как вы можете догадаться по ссылке на «Direct Draw», это часть графического «API» Microsoft (интерфейс прикладной программы) для их среды операционной системы Windows; Direct X вам и мне!. Для чего он нужен, или, скорее, что он делает, так это позволить создателям контента сжимать изображения с использованием ряда различных алгоритмов в зависимости от потребностей создателей контента; Например, игры на основе Doom 3 используют 3 разных алгоритма для активов, используемых в игре; DXT1, DXT3 и DXT5. В этом руководстве мы рассмотрим DXT5 и сжатие локальной карты (карты нормалей).

Интерфейс компрессоров ^

Общий интерфейс ATI Compressonator прост и лаконичен, что противоречит скрытой под капотом мощности; Слово предупреждения, прежде чем двигаться дальше, эта программа слишком легко дает сбой, если вы выберете неправильный алгоритм, поэтому, по крайней мере, вы будете знать, что сделали что-то не так, когда / если это произойдет!.

Как вы можете видеть ниже, интерфейс приложения довольно простой, с обычными текстовыми меню и кнопками. Два текстовых поля, выделенные серым цветом, становятся активными при загрузке изображения, и оба предлагают выбор различных алгоритмов для выполнения «вещей» в зависимости от того, что вы делаете и что было выбрано. Изображение, открытое в Compressonator, отображается в основном темно-сером окне.

Компрессор по умолчанию использует простой пустой пользовательский интерфейс, как показано выше, в это окно загружаются все поддерживаемые типы изображений — jpg, bmp, tga и т. д.

Загрузка изображения в компрессор ^

Это практически то же самое, что и для любого другого приложения; используя Файл > Открыть, перейдите к местоположению изображения, которое вы хотите сжать и преобразовать в DDS, в этом случае мы хотим загрузить локальную карту. Ниже выбрано изображение TGA, которое мы хотим сжать.

Примечание разработчика: TGA сам по себе должен быть несжатым. Если у вас есть возможность использовать RLE или другой алгоритм в приложении для редактирования фотографий при сохранении файлов TGA, не используйте его, так как это может отрицательно сказаться на результаты (даже несмотря на то, что это должен быть алгоритм «без потерь»).

Также стоит отметить, что, хотя вы можете использовать изображения JPEG, это, вероятно, не очень хорошая идея, если они подверглись тяжелой обработке в формате jpeg. уже сжатие, так как это может также отрицательно сказаться на результирующем DDS, по сути, вы хотите, чтобы исходное изображение было «чистым» и свободным от артефактов, насколько это возможно.

Поиск в папке разработки (в данном случае kat_q4dm1) или производственной папке соответствующего изображения для загрузки в Compressonator

Компрессор и генерация Mipmap ^

Загрузив изображение, можно приступать к работе.

Первое, что нужно сделать, это "Создать Mips"; это LOD-версии текстуры, сохраненные в самом изображении, что позволяет отображать различные уровни детализации в игре в зависимости от того, насколько далеко вы находитесь от текстуры; это существенно уменьшает размер и сложность изображения в тех случаях, когда использование полноразмерного изображения не требуется и потребляет много ресурсов (загрузка полной текстуры 512x512 для чего-то на расстоянии требует гораздо больше ресурсов, чем на самом деле требуется).

Нажатие кнопки «Создать мип-мэппинг» (выделено зеленым ниже) открывает диалоговое окно с раскрывающимся списком с несколькими «уровнями», к которым может быть применено мип-отображение; самый низкий из них 1x1; это в основном самая маленькая версия LOD, используемая текстурой, когда она попадает в игру.

Оставьте в этом диалоговом окне настройки по умолчанию и нажмите кнопку "Создать" (выделена красным цветом ниже). Программа может приостановиться на секунду или две, пока выполняет работу.

После этого вы увидите изменение строки заголовка изображения; в настоящее время он сообщает нам, что изображение имеет "(Mip 1 of 1 . )"; после этого это изменится на «(Mip 1 of [x] . )», '[x]' будет значением, отличным от '1'. Других визуальных подтверждений этой части процесса нет, поэтому вам нужно смотреть на строку заголовка изображения.

Примечание разработчика: вы можете проверить мипы после их создания, нажав кнопку с двумя слева от желтой кнопки со знаком вопроса (см. ниже); они позволяют просматривать каждый уровень MIP «вверх» или «вниз».

Создание уровня Mips для изображения

Правильный фильтр сжатия DDS - UberCompressor ^

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

Для (нормального) сжатия локальной карты нам нужно использовать настройки инструментов «UberCompressor» (выделены оранжевым цветом ниже).

Выберите «UberCompressor» из раскрывающегося списка — по умолчанию там может быть указано «ATI 3Dc Compression» — и нажмите кнопку «Сжать». Появится всплывающее диалоговое окно со списком элементов; круговые кнопки выбора слева и пара текстовых полей справа.

Нам нужно сжатие "DXT5 RXGB" (выделено зеленым ниже). Если оно еще не выбрано, щелкните круговую кнопку, чтобы выбрать его. Справа убедитесь, что настройки текстового поля «Взвешивание канала» соответствуют показанным ниже;

Если это не так, измените их; выберите, удалите и введите заново, используя указанные выше настройки. Также здесь вы хотите убедиться, что фильтр «Адаптивный» не выбран, по какой-то причине текстуры DDS, которые используют его, не работают должным образом в игре, поэтому лучше отключить его.

После этого изображение можно сжать, нажав кнопку "Сжать".

Выбор фильтра сжатия DDS "UberCompressor"

Выбор правильной настройки для сжатия локальных карт; DXT5

Что вы видите после сжатия DDS ^

Компрессору может потребоваться несколько секунд, чтобы "преобразовать" текстуру, но как только это будет сделано, он отобразит три изображения рядом друг с другом;

Сжатая версия

Разница между ними

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

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

Результаты сжатия

Сохранение текстуры DDS ^

После того, как изображение обработано, остается только сохранить его в правильном формате. На самом деле мы хотим сохранить сжатое изображение (хотя есть есть возможность сохранить любое из трех сгенерированных изображений, показанных выше — «исходное», «разное» и «сжатое»).< /p>

Сохранение результатов

Перейдите к папке на жестком диске, где должно быть сохранено изображение, в данном случае это папка разработки под названием «kat_q4dm1», которая находится в ../model/mapobjects/. Вы можете обнаружить, что вам нужно добавить расширение ".dds" к имени, данному файлу (выбор выделен ниже), просто чтобы убедиться, что он сохраняет изображение как DDS, а не файл без расширение, которое иногда бывает трудно отследить в Windows.

Присвоение имени и место сохранения

Сохранение карт нормалей с альфа-каналами (масками) ^

К счастью, для этого не нужно использовать какие-либо другие фильтры, так как фильтр RxGB сохраняет альфа-канал в DDS при сжатии. К сожалению, на данный момент Compressonator, похоже, не отображает канал, поэтому вы не узнаете, действительно ли он что-то сделал, пока не установите DDS в игру; любые ошибки будут отображаться как черный материал (любой тип ошибки «текстура» имеет тенденцию «сломать» материал).

После сохранения файла DDS-версия оригинального TGA была создана и сохранена в папке разработки.

Как просмотреть карту нормалей DDS? ^

Если это сжатая локальная карта DXT5, как мы создали выше, то, вообще говоря, вы сможете просматривать эти текстуры только в играх на основе Doom 3 или в инструменте/предварительном просмотре ATI ; этот конкретный алгоритм в настоящее время поддерживается только ATI, что означает, что если вы установили плагины просмотра DDS и TGA для проводника Windows (см. «Ресурсы» выше), вы обнаружите, что локальные карты не отображаются в виде эскизов.

Преобразование других типов изображений в формат DDS ^

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

Для сохранения изображений, отличных от локальных карт, нам нужно использовать алгоритм сжатия текстур DirectX; поэтому после создания Mipmap для изображения (как указано выше) выберите фильтр сжатия из раскрывающегося списка и нажмите кнопку «Сжать». В открывшемся диалоговом окне отображается список различных фильтров, которые необходимо использовать следующим образом:

DXT1 — без альфа-канала — диффузный, зеркальный, высота

DXT3 – альфа – диффузный, зеркальный, высота

DXT1 выделен (зеленым) ниже, потому что обрабатываемое изображение представляет собой диффузную текстуру без маски альфа-канала (видно только под диалоговым окном фильтра). Убедитесь, что к текстуре применен правильный фильтр, иначе она будет отображаться в игре как «черная».

Сжатие других изображений

После сжатия изображения просто сохраните его, как указано выше; найдите место на жестком диске, назовите файл, добавьте расширение «.dds» и сохраните.

Как просмотреть эти изображения DDS? ^

Текстуры, сохраненные как DXT1 или DXT3, будут корректно отображаться как миниатюры изображений в проводнике Windows, если установлен подключаемый модуль DDSview. Большинство приложений для редактирования фотографий или изображений, совместимых с подключаемым модулем Photoshop, также позволяют отображать, редактировать и сохранять файлы DDS (зависит от подключаемого модуля).

Проблемы со сжатием изображений DDS ^

Основная проблема — «черные» материалы в игре. Если раньше все работало только с текстурами TGA, то это означает, что одно из ваших изображений DDS было сохранено с неправильным фильтром (или каким-то образом «сломано»); обычно виновата локальная карта, так что перепроверяйте все.

Как правило, для текстур, отличных от локальных карт, если вы видите изображение, используемое для эскиза, в проводнике Windows, DDS, как правило, работает нормально. Всегда стоит выполнить повторное сжатие, чтобы убедиться, что вы не пропустили что-то ранее в первый раз.

Я пытаюсь создать модуль, отображающий файл DDS. Однако, когда я сохраняю файл как 4096x4096 или 1024x1024 .Изображение DDS с использованием XnView вызывает сбой Uniview. Это наводит меня на мысль, что его нужно сохранить в другом «аромате» DDS. Я должен использовать определенные настройки DDS и/или другую часть ПО? Я проверил свою теорию, пересохранив файл DDS рабочего модуля с помощью XnView. Это также привело к сбою UV.

Эта статья полезна для вас?

Да, полезно Нет, не для меня

Почему эта статья бесполезна?

Ответов 10

Обычно я использую GIMP 2.0, но большая проблема с Uniview заключается в сжатии изображения DDS. Вам необходимо убедиться, что вы используете сжатие BC1/DXT1 при сохранении образа DDS. Я не знаю, какие есть варианты с XnView, но мне кажется, что это работает.

Я понял это, поэтому я попытаюсь ответить на свой вопрос, чтобы помочь другим. Вот что я знаю:

DDS (DirectDraw Surface) – это формат файлов, который можно распаковывать аппаратно с помощью графических процессоров. Сжатие может быть обработано несколькими способами. Для приложений DirectX он обрабатывается как DXT (для сжатия текстур DirectX). Для этого существует три типа: DXT1, DXT3 и DXT5. Файлы Uniview DDS хранятся как тип DXT3. XnView хранит файлы как DXT5. Основываясь на приведенной ниже диаграмме, я думаю, что проблема заключается в том, как UV обрабатывает альфа-канал. (просто мое предположение)

DXT3
ARGB, 8 бит на пиксель, явный альфа-канал

DXT3 — это фиксированная степень сжатия 4:1.

ARGB, 8 бит/с, интерполированный альфа-канал

DXT5 имеет ту же степень сжатия 4:1, что и DXT3.

В итоге я использовал NVIDIA Texture Tools для Adobe Photoshop.

Этот подключаемый модуль поддерживает сохранение в различных схемах сжатия DDS, включая DXT3. Похоже, проблема устранена.

Чтобы добавить к этому списку, Uniview также поддерживает DXT1. Если не использовать альфа-канал, качество такое же, как у DXT3, но с альфа-каналом лучше DXT3 и DXT5.

RGB(A), 8 бит на пиксель, 1 бит альфа

Для сжатия RGB фиксированное значение 6:1

С 1-битным альфа-сжатием соотношение 4:1

Uniview поддерживает сжатые текстуры DDS в форматах DXT1, DXT3 и DXT5.

Рекомендуется не использовать DXT1 с 1-битным альфа-каналом, поскольку при его использовании цвет будет ухудшаться, поэтому используйте DXT1 только для цвета текстуры и DXT3, DXT5 для текстуры с альфа-каналом.

RGB(A), 8 бит на пиксель, 1 бит альфа

Для сжатия RGB фиксированное значение 6:1

С 1-битным альфа-сжатием соотношение 4:1

DXT3
ARGB, 8 бит на пиксель, явный альфа-канал

DXT3 — это фиксированная степень сжатия 4:1.

ARGB, 8 бит/с, интерполированный альфа-канал

DXT5 имеет ту же степень сжатия 4:1, что и DXT3.

Привет, Урбан! Можете ли вы подтвердить поддержку DXT5 в UV? Мои первые попытки файлов DDS потерпели неудачу, и я предположил, что это связано с тем, что они были сохранены как файлы DXT5. Эти же файлы работали, когда я сохранял их как DXT3.

Да, DXT5 есть. Я провел быстрый и грязный тест (на более новом коде, чем 1.5.6, но этот код не изменился, поэтому я достаточно уверен, что он должен работать и в 1.5) с nvcompress.exe из команды Nvidia. линейные инструменты, оба DXT3, DXT5 с альфа-каналом, сжатые из изображения .tga:

У вас есть определенный файл или рабочий процесс, который не работает?

Uniview поддерживает сжатые текстуры DDS в форматах DXT1, DXT3 и DXT5.
Рекомендуется не использовать DXT1 с 1-битным альфа-каналом, так как при его использовании цвет будет ухудшаться, поэтому используйте DXT1 только для цвета текстуры и DXT3, DXT5 для текстуры с альфа-каналом.

DXT1
Сжатие каждого блока из 16 пикселей в 64 бита. Кроме того, он состоит из двух разных 16-битных цветовых значений RGB 5:8:5 и 2-битной таблицы поиска 4x4.
RGB(A)
Для RGB сжатие фиксировано 6:1
С 1-битным альфа-сжатием 4:1

В этом руководстве мы покажем, как создавать и использовать последние версии текстур DDS (Direct Draw Surface) с помощью Ventuz. Текстуры DDS можно использовать для экономии производительности и видеопамяти, поскольку их можно записывать в память видеокарты напрямую и в сжатом состоянии.

Теперь мы поддерживаем гораздо больше так называемых режимов блочного сжатия (BCn). Старый термин DXTn теперь заменен на BCn, где «n» — это уровень.

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

Введение

Благодаря изменению и обновлению DirectX 11 для нашего графического движка и поддержке последних режимов BC мы можем использовать все доступные в настоящее время режимы сжатия. Для справки см. следующую таблицу:

< td data-line="17" >DXT1 < td data-line="20" >Одноканальный цвет
Исходные данные Минимально необходимое разрешение сжатия данных Рекомендуемый формат Минимальный поддерживаемый уровень функций эквивалент D3D 9
Трехканальный цвет с альфа-каналом Три цветовых канала (5 бит:6 бит: 5 бит), с 0 или 1 битами альфа BC1 Direct3D 9.1
Трехканальный цвет с альфа-каналом Три цветовых канала (5 бит:6 бит:5 бит), с 4 битами альфа BC2 Direct3D 9.1 DXT2,DXT3
Трехканальный цвет с альфа-каналом Три цветовых канала (5 бит:6 бит:5 бит) с 8 битами альфа BC3 Direct3D 9.1 DXT4, DXT5
Один цветовой канал (8 бит) BC4< /td> Direct3D 10 ATI1
Двухканальный цвет Два цветовых канала (8 бит:8 бит) BC5 Direct3D 10 ATI2
Трехканальный высокий цвет динамического диапазона (HDR) Три цветовых канала (16 бит:16 бит:16 бит) в «половинном» формате с плавающей запятой* BC6H Direct3D 11 Н/Д
Трехканальный цвет, опционально альфа-канал Три цветовых канала (от 4 до 7 бит на канал) с альфа-каналом от 0 до 8 бит BC7 D irect3D 11 Н/Д

*"Половина" числа с плавающей запятой – это 16-битное значение, состоящее из необязательного бита знака, 5-битной экспоненты со смещением и 10- или 11-битной мантиссы.

Большинство этих форматов поддерживают линейный и/или sRGB. BC4 предназначен для использования с изображениями в градациях серого, такими как карта высот, текстуры шероховатости или окружающего затенения. Если вы хотите получить текстуру самого высокого качества и без потерь, вам следует выбрать BC7 Fine.

Чтобы экспортировать файлы DDS с последней поддержкой уровней BC, мы предлагаем подключаемые модули Intel Texture Works для Photoshop, которые можно найти здесь

Intel работает с текстурами

После установки подключаемого модуля Intel Texture Works вы можете создавать или преобразовывать текстуры, выбирая тип Intel Texture Works DDS в раскрывающемся списке Сохранить как тип:

Выбрав имя файла и щелкнув диалоговое окно сохранения, появится другое диалоговое окно, в котором вас попросят указать Тип текстуры и Сжатие. Посмотреть доступные типы и форматы;

Вы можете выбрать любой из доступных типов и сжатий. Решение должно быть принято в соответствии с использованием текстуры. Простую карту высот не следует сохранять с помощью BC7, так как в основном вы будете использовать только изображение в градациях серого. В этом случае идеально подойдет линейная шкала серого BC4.

На домашней странице ​''Intel Texture Works Plugin'' есть очень хорошая таблица с подсказками о каждом типе BC и их использовании:

< /tr> < td data-line="53" >Полезно для карт нормалей касательного пространства. Двухканальная тангенциальная карта< tr>
BC1 RGB 4BPP также известный как DXT1 Полезно для цветных карт или карт нормалей, если памяти мало. Содержит типы данных RGB
BC1 sRGB 4BPP aka DXT1 То же, что и выше, с расширенным заголовком sRGB, только на оборудовании уровня DX10 +
BC3 RGBA 8BPP также известный как DXT5 Полезно для цветных карт с полным альфа-каналом, объединяя цветные и моно карты вместе. Содержит данные типа RGBA.
BC3 sRGBA 8BPP он же DXT5 То же, что и выше, с расширенным заголовком sRGB, только на оборудовании уровня DX10+
BC4 R 4BPP Оттенки серого Полезно для карт высот, карт глянца, атласов шрифтов или любых других изображений в градациях серого
BC5< /td> RG 8BPP aka 3Dc
BC6H RGB 8BPP Быстрое сжатие Полезно для изображений HDR 16 только на оборудовании уровня DX11+
BC6H RGB 8BPP Хорошо Сжатие То же, что и выше, с более длительным оптимизированным временем сжатия для более точного результата
BC7 RGBA 8BPP Быстрое сжатие Полезно для цветных карт высокого качества, цветных карт с полным альфа-каналом. Он обеспечивает наилучшее качество сжатия только на оборудовании уровня DX11+
BC7 RGBA 8BPP Точное сжатие То же, что и выше, но с более длительным оптимизированным временем сжатия для более точного результата
BC7 sRGBA 8BPP Быстрое сжатие То же, что и BC7 Fast выше, с расширенным заголовком sRGB только на оборудовании уровня DX10+
BC7 sRGBA 8BPP Fine Compression То же, что и BC7 Fine выше с расширенным sRGB заголовок только на оборудовании уровня DX10+
Нет RGBA 32BPP Несжатый

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

Просмотр DDS

Чтобы проверить, правильно ли написаны текстуры и/или действительны ли они, вы можете использовать представление DDS. Предварительно скомпилированная версия DDSView доступна здесь. Исходный код можно найти здесь. Для этого инструмента требуются распространяемые компоненты Visual Studio 2015. Перетащите любой файл DDS на DDSView.exe. Пока это действительный и работающий файл DDS, он будет отображаться.

Заключение

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

Читайте также: