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

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

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

DevilDevil
> если это так просто, то почему бы тебе не наваять утилитку ?
Хочешь я тебе напишу за бутылку?


#31
18:59, 31 июля 2012

suc-daniil
> Я сейчас немного занят(разбираюсь с тряпками из Physx 3.2)

ну вот видишь

FROL
> Хочешь я тебе напишу за бутылку?

15 wmz
тока именно через рендер, а не через внутренние драйверные или либные возможности

#32
19:04, 31 июля 2012

DevilDevil
Идет, через рендер, даже шейдер сможешь менять.

#33
19:28, 31 июля 2012

FROL

я сомневаюсь что мой офисный Intel 3000 со встроенной видеокартой потянет шейдеры )
давай

кстати будет интересно посмотреть результат на разных видеокартах
одинаковый результат будет или нет

#34
19:55, 31 июля 2012

DevilDevil
>>я сомневаюсь что мой офисный Intel 3000
Должен работать, я создавал девайс с фитчуре-левелом D3D_FEATURE_LEVEL_10_0. Пиши если не заработает.
Отправил в личку, захочешь - выкладывай без проблем. Сжимал программой "The Compressonator" (бывший ATI Compressonator). Очень советую кстати.

#35
20:26, 31 июля 2012

DevilDevil
Скажу по секрету: ты страдаешь ерундой. Направь усилия на что-то более конструктивное.

#36
20:32, 31 июля 2012

FROL
охренительно, завтра постараюсь потестить

haper
> Скажу по секрету: ты страдаешь ерундой. Направь усилия на что-то более
> конструктивное.

не учи расставлять приоритеты того, кто расставляет приоритеты лучше тебя

#37
20:46, 31 июля 2012
DevilDevil
> не учи расставлять приоритеты того, кто расставляет приоритеты лучше тебя
Очень толстое утверждение
#38
14:37, 28 сен. 2012

Поднимаю тему

Благодаря FROL, мы сумели соорудить утилиту для аппаратной декомпресии DXT
я в свою очередь разработал тестовые данные и утилиту, анализирующую распаковку

Собственно вопросы которые сейчас стоят следующие:
1) Все ли GPU аппаратно одинаково интерпретируют DXT данные (распаковывают текстуру)
2) Каков реальный алгоритм распаковки DXT (1 и 5)

Теперь комментарии по каждому пункту.
Во-первых, сразу вам говорю, алгоритм распаковки от Squish (который применяется почти везде) некорректный. Распаковка от DevIL тоже некорректна.
Во-вторых, мы тестировали распаковку на разных машинах, и счёт пока 2:0 в пользу мнения, что аппаратная распаковка DXT везде одинаковая.


Собственно я призываю вас принять участие в тестировании.
Если ваше железо поддерживает DirectX11, то скачайте DXT_TESTER, распакуйте и запустите RUN.bat
если будет спрашивать d3dx9d_43.dll, то скачайте например здесь: http://www.gamedev.ru/files/?id=81582

В итоге должны получиться 2 файла: "alpha report.txt" и "color report.txt"
Это отчёты о dxt-распаковке.
Если у вас есть программа типа Beyond Compare - сравните эти файлы с "GPU alpha report.txt" и "GPU color report.txt" соответственно
так мы узнаем - одинаковая ли хардварная распаковка

для тех кто в танке, алгоритмы DXT делят изображения на блоки 4x4, и занимаются "сжатием" отдельно цветов, и отдельно альфа

как получаются цвета.
есть два 16 битных (5-6-5) цвета. Они распаковываются и аппроксимируются. Получается палитра.
Палитра для цвета состоит всего из 4х цветов. Каждому пикселю в итоге назначается индекс  из этой палитры (от 0 до 3)

Альфа сжимается похожим образом. Только ей дали больше точности.
Берётся 2 байтовых значения и аппроксимируются. Получается палитра уже из 8 элементов.
и там уже все пиксели имеют альфу по индексу от 0 до 7

p.s. разброс большой. надо разобраться в этом "говне"

#39
15:32, 28 сен. 2012

а не легче ли загрузить пиксели и скопировать обратно с видео карты ?

std::ifstream stream;
stream.open(filePath.c_str(), std::ios::in | std::ios::binary);
if (stream.good()) {
  int magic = 0;
  stream.read((char*)&magic, 4);
  if (magic == 0x20534444) {
    char buffer[124];
    stream.read(buffer, 124);
    int * ptr = (int*)&buffer[0];
    m_height = *(ptr + 2);
    m_width  = *(ptr + 3);
    int size = ((m_width + 3) / 4) * ((m_height + 3) / 4) * 16;
    unsigned char * pixels = new unsigned char[size];
    stream.read((char*)pixels, size);
    glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, width, height, 0, ((width + 3) / 4) * ((height + 3) / 4) * 16, pixels);
    delete [] pixels;
  }
}

P.S. если нужен альфа тест, можно сделать распаковку блока из не сжатых данных.

#40
15:38, 28 сен. 2012

Mikey

если напишешь альтернативную версию "converter.exe" - будет здорово
заодно и сравним, что думает GL и DX о декомпрессии DXT

p.s. я думаю в GL может использовать CPU декомпрессия с неверным алгоритмом вместо GPU декомпрессии

#41
16:04, 28 сен. 2012

DevilDevil
> я думаю в GL может использовать CPU декомпрессия с неверным алгоритмом вместо GPU декомпрессии
Ни GL'ю ни GPU не нужна декомпрессия. Видуха или умеет семплить dxt текстуру, или нет. Заметь, семплить, а не распаковывать.
И GL не будет сообщать о поддержке жатых текстур, если железо не умеет.

#42
16:09, 28 сен. 2012

RPGman

чем сэмпить отличается от распаковывать ?
переведи на русский язык. И лучше опираясь на свой опыт, а не чисто теоретические умозаключения

#43
16:16, 28 сен. 2012

DevilDevil
> чем сэмпить отличается от распаковывать ?
> переведи на русский язык. И лучше опираясь на свой опыт, а не чисто
> теоретические умозаключения

Мы проводили тесты в проекте на скорость загрузки графики, + замеры памяти (сравнение пнг и ддс5 около 500 256*256 текстур, еще был вариант с jpg + alpha jpg, но на ноутбуках оказался слишком тормозным )
Результат : вариант загрузка png была намного дольше чем dds (естественно, конвертация), замеры памяти : ддс в несколько раз меньше чем пнг (точные данные не буду давать, лучше самому проверить раз)
Можно сделать вывод что ддс текстура хранится в таком же виде как и на диске (только без заголовков), и при рисовании видео карта сама конвертирует блоки на лету. (мое мнение, не гуглил по этому поводу)

#44
16:21, 28 сен. 2012

Mikey

так это давным давно известно
что в большинстве случаев так куском и лежит
если карта поддерживает DXT )

All
кому интересно только отчёты сравнить, пожалуйста: http://zalil.ru/33797317
сравнивайте в Beyond Compare или аналогах.

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

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