Войти
ПрограммированиеФорумГрафика

Корректный алгоритм декомпрессии *.dds (DXT5)

Страницы: 1 2 3 4 5 6 Следующая »
#0
15:55, 30 июля 2012

Здравствуйте, уважаемые форумчане

Всё началось с того, что когда-то давным давно я взял алгоритм распаковки DXT из известной библиотеки squish и переложил его в свой код. Сейчас я решил тщательно соптимизировать его и мне стало нужно периодически проверять корректность декомпрессии. Использую Beyond Compare для сравнения файлов

Ради интереса декодировал вот этот файл из фотошопа. Это тестовый файл с моноцветными блоками и шумом в альфаканале. Так вот оказалось что результат бинарно не равен моему.
Потом я попробовал декодировать в xnview. Теперь оказалось что у меня целых 3 bmp файла, бинарно отличающихся друг от друга !

но внешне похожи

Меня поражает этот факт. Потому что алгоритм распаковки по сути стандартизирован.
Призываю всех разобрать алгоритм декомпрессии. Вместе выяснить, как именно распаковывать правильно.
И если кто пользуется squish - выложите bmp который можно через него получить (хочу сравнить с тем, что у меня есть)

p.s. тестовый файл в формате DXT5


#1
16:05, 30 июля 2012

Ты еще больше будешь удивлен посмотрев как различаются jpeg картинки сохраненные в разных редакторах )
Если с виду картинки выглядят одинаковыми, то не стоит париться, насколько мне известно DXT - формат имеет потери качества при сжатии, отсюда и вылезают видимо артефакты.
Разные окрегления значений цвета в разных редакторах.

#2
16:07, 30 июля 2012

nes

я не буду удивлён
я не первый день живу
компрессия - это одно.
декомпрессия - это совсем другое!
и ты не ошибаешься - dxt с потерей качества. Но степень потерь к примеру тоже как-то можно вычислять. А для этого нужно знать как правильно распаковывать эти данные ;). В итоге приходим к открытому вопросу. Как правильно распаковывать ?

#3
20:13, 30 июля 2012

В ATI SDK смотри, они там при загрузке текстур это делают

#4
20:21, 30 июля 2012

можно сказать стандарт.
http://www.opengl.org/registry/specs/EXT/texture_compression_s3tc.txt

сжатие как и сказали с потерями, это значит каждая програ сжимает как хочет, по своим внутренним критериям, шаманством.
распаковка стандартная но некоторые проги, могут использовать фильтр для улучшения качества.

#5
20:29, 30 июля 2012

haper
> В ATI SDK смотри, они там при загрузке текстур это делают
susageP
> можно сказать стандарт.
> http://www.opengl.org/registry/specs/EXT/texture_compression_s3tc.txt

а поконкретнее можно ?
конкретный С++ код

susageP
> распаковка стандартная но некоторые проги, могут использовать фильтр для
> улучшения качества.

откуда данные ?

#6
21:27, 30 июля 2012

DevilDevil
> откуда данные ?

Ну как бы логично. :)
Если прога подшаманила запаковку, то может подшаманить и распаковку.

#7
21:32, 30 июля 2012

Executor

в вопросах точности догадки неуместны

#8
22:32, 30 июля 2012

Вот, вкратце так:

+ Показать

Код стырен из АТИ СДК и вполне устраивает

#9
22:44, 30 июля 2012

haper

  colors[0][0] = ((c0 >> 11) & 0x1F) << 3;
  colors[0][1] = ((c0 >>  5) & 0x3F) << 2;
  colors[0][2] =  (c0        & 0x1F) << 3;
  
  colors[1][0] = ((c1 >> 11) & 0x1F) << 3;
  colors[1][1] = ((c1 >>  5) & 0x3F) << 2;
  colors[1][2] =  (c1        & 0x1F) << 3;

в squish не так немного
и где правда ?

кто пользуется nv texture tools
скиньте результат, который она выдаёт (без открытия в фотошопе)

#10
22:55, 30 июля 2012

В squish так
Если я правильно понял - NVTT в конечном счёте при распаковке использует этот код

+ Показать

#11
23:12, 30 июля 2012

DevilDevil
> в squish не так немного
> и где правда ?
Честно говоря, меня это не парило особо... Вариант от АТИ вполне устроил. До этого я вообще пользовал DevIL, но потом меня от него уже начало подташнивать:)

#12
23:19, 30 июля 2012

haper

если бы меня это не парило - я бы не задавал вопрос )
люблю точность, яж говорю

кстати как в DevIL распаковывается блок ?

#13
23:42, 30 июля 2012

DevilDevil
> кстати как в DevIL распаковывается блок ?
Не смотрел

#14
23:49, 30 июля 2012

Вот оно, из DevIL'а (DXT1, DXT3):

+ Показать

DXT5 -> след. сообщение

Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.