Войти
Уголок tool-программСтатьи

Работа с 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.

#DDS, #DXT, #NVIDIA, #TGA

15 июня 2006 (Обновление: 27 июня 2006)

Комментарии [3]