Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
#1

Артефакты при компрессии RGB->DXT5 - C++

23.07.2013, 16:15. Просмотров 537. Ответов 6
Метки нет (Все метки)

Есть сборник алгоритмов компрессии из RGB в DXT1/DXT5. Тыц:
http://http://www.cauldron.sk/files/extreme_dxt_compression.pdf
Я беру картинку в RGB формате и конвертирую ее в формат DXT1, вывожу на экран и все отлично.
Беру ту же картинку, конвертирую в DXT5, вывожу на экран и получаю артефакты. Собственно артефакты это желтые квадратики. Причем они могут быть любым цветом, появляться в любом месте. Иногда их вообще нет, иногда в хаотическом порядке. Вот. Собственно эту картиночку я натягиваю на сферу. Рисую директхом. що це таке товариші?
0
Миниатюры
Артефакты при компрессии RGB->DXT5  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2013, 16:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Артефакты при компрессии RGB->DXT5 (C++):

JPEG -> ARGB -> DXT5 - C++
Суть в следующем: У меня есть картиночка в формате JPEG. Я ее разжимаю в RGB, а затем сжимаю в DXT5 и рисую на квадратик. На границах...

программа на С++ для компрессии/декомпрессии файлов - C++
Посоветуйте пожалуйста литературу по этому вопросу,а также посоветуйте какие библиотеки использовать для компрессии,а какие для...

Как сделать выбор RGB по умолчанию при при сохранении файлов в Inkscape ? - Графические программы
Столкнулся с тем, что Inkscape сохраняет изображение в СMYK. Мне нужно RGB. Нашел в свойствах документа управление цветом, но почему то он...

Составить программу компрессии строк - Pascal ABC
КОМПРЕССИЯ СТРОК. Рассмотрим следующий алгоритм сжатия строк: если в строке встречается несколько одинаковых символов, идущих подряд, то...

Ошибка при работе с rgb - Lazarus
в чем ошибка? ImageFon.Canvas.Pixels := rgb(MyColor, MyColor, MyColor)

Артефакты при WM_SIZE - C++ WinAPI
Всем, доброго дня второй день не могу решить вопрос: На форме 2 кнопки (90x30px) в правом нижнем углу, при WM_SIZE написал обработчик ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
23.07.2013, 16:39 #2
Ну вы же занимаетесь цветовой компрессией. Чего же ви хочите от нее?
Возможно скажу очевидную вещь, но попробуйте поиграться с коэффициентами.
0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
24.07.2013, 06:40  [ТС] #3
Очень странно. От случая к случаю на одних и тех же входных данных я иногда наблюдаю артефакты иногда нет. Алгоритм должен выдавать на одних и тех же данных один и тот же ответ всегда. Или я ошибаюсь? Это было бы очень странно. При этом повторюсь, DXT1 дает ВСЕГДА правильную картинку без артефактов.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
24.07.2013, 10:08 #4
Как можно понять из описания, у DXT5, в отличие от DXT1, есть обработка альфа канала. DXT1 же:
The DXT1 compression creates correct results regard less of the alpha information in the source texture and never outputs transparent pixels
Цитата Сообщение от Kukurudza Посмотреть сообщение
Алгоритм должен выдавать на одних и тех же данных один и тот же ответ всегда.
Не факт. Алгоритм же допускает приближенные значения. Он работает с усредненными величинами. В том его и суть. То есть он
1) берет пару, каждая из четырех пикселей (всего восемь, но преобразование производится над группой из четырех)
2) вычисляет среди каждой четверки максимальные и минимальные значения для каждого цвета (и альфа канала)
3) находит разницу максимального и минимального значения каждого цвета
4) смещает (относительно своего же адресного пространства каждого пикселя как я понял) в соответствии с маской полученные значения, формируя тем самым DXT блок
5) сохраняет (тупо накладывает в одно все полученные, смещенные значения) готовый DXT блок из восьми пикселей
6) подготавливает делители в соответствии с диапазоном (вероятно вычисляет на сколько нужно сместить каждый полученный блок, чтобы можно было составить из них обратно изображение такого же размера как и было)
7) делит
8) формирует блок и сохраняет во временный буфер
9) формирует самый последний, уже настоящий, законченный, готовый DXT блок.

В пункте 5 уже начинается расхождение DXT1 с DXT5 - у промежуточного блока DXT5 в два раза больше информации (он в два раза больше), нежели блок DXT1, за счет учитывания альфа канала. А в пункте 2 идет вычисление самих значений, с которыми работает пункт 5. Следовательно надо искать косяк где-то в этих преобразовании. Я думаю. Но вообще в ассемблере не силен, поэтому детальнее подсказать не могу.
1
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
24.07.2013, 10:19  [ТС] #5
решилась проблема. библиотека эта нифига не threadsafe. есть там массивчики общие, я мурзилку тоже ассемблерную не знаю. видимо где то они меняются по ходу компрессии из разных потоков.
в смысле я сам из нескольких поток вызываю функции компрессии.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
24.07.2013, 10:23 #6
А. А если для DXT5 из одного потока вызывать, то все в порядке, да?
0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
24.07.2013, 11:05  [ТС] #7
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А. А если для DXT5 из одного потока вызывать, то все в порядке, да?
верно. причем есть следующие знания:
1. вызов DXT1 и DXT5 из разных потоков приводит к артефактам.
2. для картинок в градации серого - артефактов нет (для DXT5 с альфой).
3. если вызывать в одном потоке DXT1 а в другом DXT5 и при этом разделить общие данные, то проблемы нет.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2013, 11:05
Привет! Вот еще темы с ответами:

Создать программу компрессии/декомпрессии данных по методу RLE - Delphi
Создать программу компрессии – декомпрессии данных по методу RLE. оооооооооочень надо, кто может помогите jk.o_o.mail.ru

Артефакты при запуске программ - Мониторы
Проблема заключается в том, что при запуске какой-либо программы (игры или браузера) часто начинается экшн в стиле "веб-панк", хоть я и...

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.07.2013, 11:05
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru