Графічні файли dds

Файли DDS. Опис формату DXTn, його можливостей, прості рекомендації по вибору формату компресії.

2D шари в DDS-файлі можуть зберігатися в RGBA форматі, а можуть бути стиснуті в формати DXT1, DXT3, DXT5.

DXT1 - для RGB картинок c однобітних альфою, чотири біта на піксель (стиснення в 8 разів у порівнянні з RGBX).
DXT3 і DXT5 - для картинок з альфа-каналом, типово DXT5 краще. 8 біт на піксель, стиснення в чотири рази.

Детальніше про метод стиснення, на рівні бітів:

Графічні файли dds

Зображення ділиться на блоки 4x4. Для кожного блоку зберігається два 16-бітних кольору. При розпакуванні з двох кольорів x, y генерітся чотири послідовних кольору, палітра [x, # 8532; x + # 8531; y, # 8531; x + # 8532; y, y]. Після 2 * 16 біт кольорів зберігається 4 * 4 двухбітих індексів в цю палітру. Порядок двох кольорів (цвет_0> цвет_1?) Також містить один біт інформації. Якщо цвет_0> цвет_1, то в палітрі одне зі значень використовується як нульова альфа, і інші 3 кольору [x, ½x + ½y, y] - палітра з непрозорих квітів. Всього виходить 64 біта на блок 4x4 пікселя.

У DXT3 і DXT5 rgb-канал зберігається точно так само як в DXT1. Альфа в DXT3 зберігається просто як округлене з 8 бітів до 4 бітів на піксель, без стиснення. У DXT5 для альфи використовується метод стиснення, схожий на метод для RGB в DXT1. Два значення альфи на блок 4x4. Якщо цвет_0> цвет_1, створюється 6 проміжних значень альфи в палітрі і ще окремо два особливих значення 0 і 1 для альфи. якщо цвет_0 <= цвет_1, то из двух крайних значений альфы создаётся 8 промежуточных. После двух 8-битных граничных значений альфы идёт 16 3-битных индексов. DXT5 обычно гораздо точней сохраняет альфу и рекомендуется вместо DXT3.

Артефакти після стиснення малопомітні, найчастіше їх можна побачити в блоках, де сходиться 3 різні відтінки (3 відтінку в 2-х на один блок не поміщаються).

DXT2 розкодовується так само як DXT3, а DXT4 так само як DXT5, тільки програма повинна інтерпретувати RGB як уже помножений на альфу. У них зберігається прапорець «premultiplied alpha», який може бути цікавий універсальної смотрелки картинок, але не ігровому движку.

Це стиснення з втратами, паковщік повинен вибрати два ідеальних кольору для квадрата 4x4, тому різні інструменти можуть конвертувати з різним співвідношенням час роботи / якість результату (див. Ілюстрацію в кінці). NVidia хвалиться, що її nvcompress кращий, не знаю наскільки справедливо. На око начебто результат краще, ніж у TEXCONV з D3D SDK.

При стисненні DXT в zip має сенс розділити індекси і палітру, зберігати збільшення. Тоді стиснеться трохи краще. На жаль сам не міряв, тільки наспівав. Якщо ви пробували - напишіть, цікаво.

Можна трохи «посувати» повзунок якість / стиснення таким чином: перед DXT-стисненням використовувати текстуру яка в 2 рази більше, якщо така є. Наприклад, зменшити те, що намалював художник ні з 4096x4096 до 128x128x, а до 256x256.

Якщо картинка без альфи та досить однобітних альфи, використовуйте DXT1. З альфою - DXT5. На «мультяшних» картинках з дрібними деталями будуть артефакти, на реалістичних структурах з шумом і градієнтом компресія непомітна.

Ілюстрація (масштаб 200%):

Графічні файли dds

Схожі статті