Работа с nVidia DDS Utilities (SDK)
Автор: Андрей Пятидверный
Автор: Пятидверный Андрей
Введение
Get Started!
Параметры и опции nvDXT:
Примеры использования
Использование readDXT
Использование stitch
Использование detach
Небольшой пример автоматизации
Послесловие
Ссылки по теме
Введение
В данной статье я хочу рассмотреть преимущества и недостатки формата DDS, а также утилиты для быстрой и эффективной работы с ним.
Работая над игровым проектом, мы столкнулись с проблемой оптимизации ресурсов и, в частности, текстур. Вначале мы использовали формат TGA, но впоследствии перешли к DDS, так как он оказался болем удобен.
Формат DDS (Direct Draw Surface), был впервые введен Microsoft в DirectX 7.0. Особенностью этого формата является то, что он может содержать сжатые и несжатые текстуры (1,2,3-мерные, cubemap-текстуры), а также mipmap уровни текстуры. Нами был выбран алгоритм сжатия S3TC (S3 Texture Compression) разработанный фирмой S3. S3TC является алгоритмом с потерей данных, и обеспечивает компрессию текстур в 2-8 раз. Алгоритм S3TC достаточно прост (практически не снижает быстродействие), позволяет распаковывать произвольные фрагменты текстуры и, что самое важное – аппаратно поддерживается всеми современными видеокартами.
Get Started!
Инструментарий nVidia DDS Utilities можно загрузить с сайта developer.nvidia.com, также он входит в nVidia SDK. В состав nVidia DDS Utilities входят утилиты для работы из командной строки: detach.exe, nvdxt.exe, readdxt.exe, stitch.exe и пример по использованию библиотеки для компрессии текстур.
nvDXT.exe – преобразование из форматов .tga, .bmp, .gif, .ppm, .jpg, .tif, .cel, .dds, .png и .psd в формат DDS с заданием ряда параметров для сохранения. Является наиболее сложной и функциональной утилитой из этого набора.
readDXT.exe – преобразование сжатого изображения в TGA.
stitch.exe – запаковка mipmap уровней в один файл.
detach.exe – извлечение mipmap уровней из файла.
Параметры и опции nvDXT:
-profile <имя_профиля> – считывает профиль созданный из плагина для Photoshop.
-quick – использовать быстрый метод компрессии.
-prescale <целое_число> <целое_число> – масштабирование изображения в заданный размер.
-rescale <nearest|hi|lo|next_lo> - масштабирование изображения в ближайший (наибольший/наименьший) формат изображения.
-rel_scale <десятичное_число, десятичное_число> - масштабирование изображения. Параметр должен быть в диапазоне (0.0, 1.0).
Дополнительные параметры фильтрования. По умолчанию: Cubic.
-RescalePoint
-RescaleBox
-RescaleTriangle
-RescaleQuadratic
-RescaleCubic
-RescaleCatrom
-RescaleMitchell
-RescaleGaussian
-RescaleSinc
-RescaleBessel
-RescaleHanning
-RescaleHamming
-RescaleBlackman
-RescaleKaiser
-RescalePoint
-RescaleBox
-RescaleTriangle
-RescaleQuadratic
-RescaleCubic
-RescaleCatrom
-RescaleMitchell
-RescaleGaussian
-RescaleSinc
-RescaleBessel
-RescaleHanning
-RescaleHamming
-RescaleBlackman
-RescaleKaiser
-nomipmap – не генерировать mipmap уровни
-nmips <целое_число> – количество mipmap уровней
-rgbe – изображение в RGBE формате
-pause – при ошибке подождать события клавиатуры.
-flip - перевернуть изображение сверху вниз
-list <имя_файла> – список файлов для преобразования
-list <имя_файла> – преобразовать все изображения в текущем каталоге
-outdir <каталог> – каталог для помещения преобразованных файлов
-overwrite – если исходный файл в формате DDS, то перезаписать вместо старого
-binaryalpha – считать каждый тексел альфа текстуры или прозрачным или непрозрачным
-24 <dxt1c|dxt1a|dxt3|dxt5|u1555|u4444|u565|u8888|u888 |u555> – преобразовать 24 бит изображения в выбранный формат
-32 <dxt1c|dxt1a|dxt3|dxt5|u1555|u4444|u565|u8888|u888 |u555> – преобразовать 32 бит изображения в выбранный формат
Формат текстуры. По умолчанию: DXT3.
-dxt1c – DXT1 (без альфа-канала [RGB DXT 1])
-dxt1a – RGBA DXT1 (однобитный альфа-канал)
-dxt3 – RGBA DXT3
-dxt5 – RGBA DXT5
-u1555 – несжатый формат 1:5:5:5
-u4444 – несжатый формат 4:4:4:4
-u565 – несжатый формат 5:6:5
-u8888 – несжатый формат 8:8:8:8
-u888 – несжатый формат 0:8:8:8
-u555 – несжатый формат 0:5:5:5
-p8 – несжатый палитровый формат 8 бит (256 цветов)
-p4 – несжатый палитровый формат 4 бит (16 цветов)
-a8 – использовать 8 бит альфа-канал
Примеры использования
nvdxt -cubemap cubemap.dds -list cubemapfile.lst
Создать кубическую карту с именем cubemap.dds из файлов, описанных в cubemapfile.lst
nvdxt -file test.tga -dxt1c
nvdxt -file *.tga
Преобразовать все файлы с расширением .tga (файлы находятся в одном каталоге с программой)
nvdxt -file c:\temp\*.tga
nvdxt -file temp\*.tga
nvdxt -file normal_map.tga -norm
nvdxt -all -dxt3 -gamma -outdir .\dds_dir -time
nvdxt -file *.tga -scale 0.5
Использование readDXT
readdxt texture.dds
В итоге получим один или несколько TGA файлов.
Использование stitch
stitch tex
Происходит запаковка mipmap уровней в один файл из файлов tex_00.dds, tex_01.dds, tex_02.dds, tex_03.dds, tex_04.dds,… и т.д.
Использование detach
detach tex
Извлекаем все mipmap уровни из файла.
Небольшой пример автоматизации
Пример из личного опыта как упростить работу себе и другим. Эффективен при работе с большим объемом однотипных данных. Создаем обычный текстовый документ c расширением .bat и пишем там следующее:
echo Off :: Отключаем вывод комманд на экран title Conversion Script :: Задаем надпись заголовка if not exist nvdxt.exe goto END :: Если нет nvdxt.exe переходим в конец программы if not exist *.tga goto END2 :: Проверяем на наличие исходных файлов nvdxt -file *.tga -dxt1c :: Преобразуем все .tga файлы в формат DDS RGB DXT1 echo Delete source files del *.tga :: Удаляем исходные файлы pause :: Ждем события с клавиатуры :END echo Copy utility to current folder! :: Выводим сообщение об ошибке pause :: Ждем события с клавиатуры :END2 echo Nothing to convert [Image files does not found] :: Выводим сообщение об ошибке pause :: Ждем события с клавиатуры
Мы написали пакетную программу, которая конвертирует все файлы формата tga в формат DDS RGB DXT1, удаляет исходные файлы и выдает сведения об ошибках. Данный способ удобен тем, что он не требует компиляции и его легко может подстроить под конкретную задачу художник или сборщик ресурсов.
Послесловие
Послесловие, или том, какой формат выбрать.
При сжатии RGB текстур наиболее подходящим и дающим хороший коэффициент сжатия является RGB DXT1. Для сжатия RGBA изображений, в которых используется альфа канал в качестве маски – RGBA DXT1. Если для альфа-канала характерны сильные изменения, рекомендуется использовать RGBA DXT3, в противном случае RGBA DXT5. Настоятельно рекомендую попробовать сжать текстуру разными форматами для выбора наиболее качественного изображения. Некоторые текстуры необходимо преобразовать в несжатом виде – текстуры, где имеются плавные переходы цвета или критичные к качеству изображения (например, графический интерфейс пользователя).
Буду рад выслушать отзывы и предложения.
Ссылки по теме
Плагин 3ds max для работы с .dds (только для 3ds max 3, 4, 5, т.к. в новый версиях поддержка реализована разработчиками).
DDS Thumbnail Viewer - для просмотра DDS файлов стандартными средствами Windows.
Adobe Photoshop Plug-ins - два плагина (Texture Compression Plug-In и Normal Map Filter) и несколько полезных скриптов для Adobe Photoshop, также их можно использовать в Jasc Paint Shop Pro.
15 июня 2006 (Обновление: 27 июня 2006)
Комментарии [3]