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

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

Страницы: 1 2 3 4 5 6 Следующая »
#60
20:13, 28 сен. 2012

RPG

для того чтобы оценить отклонение от оригинала, надо сначала получившийся результат распаковать в bmp.
"а у вас документов нету"(с)

ты говоришь об NVidia Texture Tools ?
вообще говоря нормальный инструмент
или я о ещё каком-то их творении не знаю ?

RPG
> отличие на самом деле в каждом сотом байте и то в альфа-канале.

я как раз и выложил отчёты, чтобы вы сравнили
отличия там в каждом блоке. различается практически каждый элемент палитры.
пусть на 1-4, но различается. Умножь погрешность на все 16 пикселей блока
в общем не порядок. Уж если делать алгоритм декомпрессии, то он должен совпадать


#61
23:37, 28 сен. 2012

DevilDevil
> я как раз и выложил отчёты, чтобы вы сравнили
> отличия там в каждом блоке. различается практически каждый элемент палитры.
> пусть на 1-4, но различается. Умножь погрешность на все 16 пикселей блока
> в общем не порядок. Уж если делать алгоритм декомпрессии, то он должен
> совпадать
Надо PSNR посчитать а не просто есть/нет отличия.

Предлагаю следующее: выложите оригинал (bmp png), затем распакованные картинки разными методами (тоже bmp png), в том числе текстура, отрендеренная в фреймбуфер при помощи видеокарты. Желательно не шумовую текстуру, а что-то из реальной жизни (шумы сжимать приходится редко и с этим алгоритм плохо справляется, но при этом однотонные текстуры жмутся на ура). Для каждой из них устроим сравнение psnr с оригиналом, и увидим, где шумы больше. Окажется просто что какой-то алгоритм неэффективен.

#62
0:58, 29 сен. 2012

RPG

ради бога, пробуй

только зачем ?
прочитай, какие обозначены вопросы здесь: http://www.gamedev.ru/code/forum/?id=165179&page=3#m38
специально выделил 2 пункта

#63
1:04, 29 сен. 2012

Эффективность алгоритма нужно вычислять по соотношению оригинал/фильтр, а не относительно аппаратной декомпрессии. Аппаратно=быстро, но не всегда качественно.

#64
1:09, 29 сен. 2012

RPG

наша цель - добиться идентичности распаковки
дополнительные фильтры - не моя цель точно
давай сначала добьёмся первоочерёдных целей

#65
12:06, 29 сен. 2012

DevilDevil
> между чем созданными ?
> сравнивать нужно отчёты.
> "color report.txt" и "GPU color report.txt"
> "alpha report.txt" и "GPU alpha report.txt"

Их и сравнивал.
Различий нет.

#66
16:24, 29 сен. 2012

Executor

это очень хорошо !
дай ссылку на утилиту, у себя постараюсь проверить.
если совпадёт - значит GPU распаковка DXT везде одинаковая.

#67
16:25, 29 сен. 2012

DevilDevil
> дай ссылку на утилиту

C:\Windows\System32\fc.exe

Юзать:
fc file1 file2 /b

#68
16:39, 29 сен. 2012

Executor

млять
я думал эта утилита распаковывает dds )

может ещё другие GPU утилиты попробуем для распаковки ?
мало тестов проделали
мож кто-то на GL попробует распаковать или на DX стандартными средствами

#69
17:35, 1 окт. 2012

Автор, ты бы лутьше радовался. Я вот раньше тоже задавал всякие неудобные вопросы, которые отличаются от "не могу подключить DLL", так мне на них вообще никто не отвечал. А у тебя тут страсти кипят :)

#70
10:10, 2 окт. 2012

Итак
Если судить по "GPU color report.txt", то функция распаковки цвета выглядит сейчас так (псевдокод):

PALETTE DxtUnpack(word565 a, word565 b, bool isDxt1)
{
   // распаковка первого цвета палитры
   palette[0].r = (a.r << 3) | (a.r >> 2);
   palette[0].g = (a.g << 2) | (a.g >> 4);
   palette[0].b = (a.b << 3) | (a.b >> 2);

   // распаковка второго цвета палитры
   palette[1].r = (b.r << 3) | (b.r >> 2);
   palette[1].g = (b.g << 2) | (b.g >> 4);
   palette[1].b = (b.b << 3) | (b.b >> 2);   

   // распаковка третьего и четвёртого цветов палитры
   if (a > b || !isDxt1)
   {
      // типа (2a + b) / 3 
      palette[2].r = ?
      palette[2].g = ?
      palette[2].b = ?    
    
      // типа (a + 2b) / 3 
      palette[3].r = ?
      palette[3].g = ?
      palette[3].b = ?  
   }
   else
   {
      // типа (a + b) / 2
      palette[2].r = ((a.r+b.r) << 2) | ((a.r+b.r) >> 3);
      palette[2].g = ?
      palette[2].b = ((a.b+b.b) << 2) | ((a.b+b.b) >> 3);
    
      // пустой пиксель    
      palette[3] = 0;
   }
}


К рассмотрению альфа пока не прикасался
Теперь давайте разберёмся, что же такое хранится в файле GPU color report
В этом отчёте проиллюстрировано, каким образом берутся исходные 565 цвета и преобразуются в цвета палитры на GPU
Вот скрин:

+ Показать


Аналогично отчёт GPU alpha report по альфе

+ Показать


Для того чтобы тестировать, каким образом получаются цвета, чтобы подбирать алгоритм распаковки,
я создал утилиту test_platform. можете пользоваться
жаль в Lua нет битовых операций.. но я добавил соответствующие функции

+ Показать

#71
11:31, 2 окт. 2012

susageP

скажи, а ты сам, прежде чем написать умные мысли здесь, опробовал рассчёт ?
сравнил с данными "GPU color report.txt" ?

#72
11:39, 2 окт. 2012

DevilDevil
> DevilDevil
Да!  я сжимал по этим формулам текстуры.

#73
11:42, 2 окт. 2012

susageP
> Да! я сжимал по этим формулам текстуры.

1) мы здесь не сжатием занимаемся
2) ты не сравнивал расжатие с нашими вариантами
3) ты не смотрел "GPU color report.txt" и не сравнивал распаковку
4) я удаляю твоё сообщение как неинформативное

#74
11:58, 2 окт. 2012
Удаленная "неинформативная" ссылка вела на стандарт: http://www.opengl.org/registry/specs/EXT/texture_compression_s3tc.txt
Оказывается, погрешностей при вычислених для ТС достаточно, чтобы реализации одного и того же алгоритма называть разными алгоритмами.
Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумГрафика

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