Робота з nvidia dds utilities (sdk)

У даній статті я хочу розглянути переваги та недоліки формату DDS, а також утиліти для швидкої і ефективної роботи з ним.

Працюючи над ігровим проектом, ми зіткнулися з проблемою оптимізації ресурсів і, зокрема, текстур. Спочатку ми використовували формат TGA, але згодом перейшли до DDS, так як він опинився болем зручний.

Інструментарій 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 рівнів з файлу.

-profile <имя_профиля> - зчитує профіль створений з плагіна для Photoshop.
-quick - використовувати швидкий метод компресії.
-prescale <целое_число> <целое_число> - масштабування зображення в заданий розмір.
-rescale - масштабування зображення в найближчий (найбільший / найменший) формат зображення.
-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 - перетворити 24 біт зображення в обраний формат
-32 - перетворити 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

В результаті отримаємо один або кілька TGA файлів.

Використання stitch

Відбувається запаковування mipmap рівнів в один файл з файлів tex_00.dds, tex_01.dds, tex_02.dds, tex_03.dds, tex_04.dds, ... і т.д.

Використання detach

Витягуємо всі mipmap рівні з файлу.

Невеликий приклад автоматизації

Приклад з особистого досвіду як спростити роботу собі і іншим. Ефективний при роботі з великим об'ємом однотипних даних. Створюємо звичайний текстовий документ c розширенням .bat і пишемо там наступне:

Ми написали пакетну програму, яка конвертує всі файли формату tga в формат DDS RGB DXT1, видаляє вихідні файли і видає відомості про помилки. Даний спосіб зручний тим, що він не вимагає компіляції і його легко може підлаштувати під конкретну задачу художник або складальник ресурсів.

Післямова, або те, який формат вибрати.

При стисненні RGB текстур найбільш підходящим і дає хороший коефіцієнт стиснення є RGB ​​DXT1. Для стиснення RGBA зображень, в яких використовується альфа канал в якості маски - RGBA DXT1. Якщо для альфа-каналу характерні сильні зміни, рекомендується використовувати RGBA DXT3, в іншому випадку RGBA DXT5. Настійно рекомендую спробувати стиснути текстуру різними форматами для вибору найбільш якісного зображення. Деякі текстури необхідно перетворити в стислому вигляді - текстури, де є плавні переходи кольору або критичні до якості зображення (наприклад, графічний інтерфейс користувача).

Буду радий вислухати відгуки та пропозиції.

Плагін 3ds max для роботи з .dds (тільки для 3ds max 3, 4, 5, тому що в новий версіях підтримка реалізована розробниками).

Adobe Photoshop Plug-ins - два плагіна (Texture Compression Plug-In і Normal Map Filter) і кілька корисних скриптів для Adobe Photoshop, також їх можна використовувати в Jasc Paint Shop Pro.

Схожі статті