Сжатие DXT дает тот же размер файла, что и оригинальный PNG

Я пытаюсь конвертировать / сжимать мои текстуры в формат DDS с помощью сжатия DXT из оригинальных PNG. Я на Mac, поэтому я использую Graphic Converter (хотя я пробовал и другие инструменты). Но независимо от того, какой уровень DXT я использую (DXT1-5), размер файла остается примерно таким же, как у исходного PNG.

2 ответа

Решение

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

Как следствие, степень сжатия PNG является переменной. На сложном изображении сжатие будет плохим. На полностью черном изображении сжатие будет очень хорошим.

Напротив, сжатие DXT имеет фиксированную степень сжатия. Это соотношение составляет 8:1 для DXT1 и 4:1 для DXT5 (при условии 32-битного входа RGBA). Преимущество DXT5 - лучший альфа-канал (для прозрачности). Если вам это не нужно, не используйте его, это просто трата пропускной способности.

Как вы можете догадаться, компромисс в том, что качество DXT будет переменным. Качество DXT просто считается "достаточно хорошим", но оно далеко от совершенства. На сложных частях изображения будут видны некоторые артефакты / искажения. На простых деталях воспроизведение будет почти точно оригинальным.

Способ работы PNG заключается в сжатии всего изображения в виде единого байтового потока. Сжатие DXT работает путем разрезания изображения на маленькие блоки размером 4х4 пикселя и сжатия их независимо до фиксированной степени сжатия.

Это дает принципиально иные свойства: текстуры DXT должны декодироваться непосредственно аппаратным обеспечением графического процессора. Это очень быстро, почти бесплатно. Этому способствует тот факт, что текстура разрезана на маленькие блоки: нет необходимости декодировать всю текстуру, чтобы выдвинуть один пиксель =>, просто декодировать соответствующий блок 4x4. Это свойство является ключом к процессу декодирования.

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

Как видите, выбор того или иного метода сжатия не зависит от степени сжатия. Для хранения выберите PNG, не в последнюю очередь потому, что он без потерь. Для быстрого отображения большого количества текстур в режиме реального времени (типичный сценарий для 3D-игр) DXT - единственный путь.

Текстуры DDS/DXT не гарантируют меньшего размера, чем PNG. Это зависит от содержания текстуры и ее размера. Сплошной цвет PNG или, в основном, сплошные цвета, такие как png мультфильма, будет сжиматься очень мало, тогда как фотография, как правило, не сжимается хорошо. Где DXT - это период сжатия от 4 до 1 или от 6 до 1, в зависимости от того, DXT1 или DXT3 или DXT5

Другие вопросы по тегам