Повышение качества DXT-сжатых текстур

Полезная литература, исходники шейдеров из серьезных игр и других движков, ссылки на тематические ресурсы - всё здесь.

Повышение качества DXT-сжатых текстур

Сообщение Battle Angel Alita 11 апр 2010, 18:20

Иногда бывает что сжатие очень нежелательно, либо даёт очень плохой результат. Можно смирится и хранить текстуру в BMP, а можно использовать тот факт, что альфа канал сжимается с большей точностью.

Трюк заключается в разделении текстуры на цветность и на яркость, которая будет хранится в альфа канале. Самый простой способ так сделать - скачать плагин для фотошопа FilterMeister и запустить в нём этот скрипт:
Скрытый текст:
Код: Выделить всё
%ffp


ForEveryTile:{
   int r_, g_, b_;
   int max_;
   int mul_;


   if (planes - planesWithoutAlpha == 0){
      Info ("Please select RGB and Alpha channels in Photoshop's Channel palette. Then restart this plugin.");
      return false;
   }


   if (imageMode == 11) mul_ = 32768;
   else if (imageMode == 3) mul_ = 255;
   else return false;


      for (y= y_start; y < y_end; y++){
         if(updateProgress(y,y_end)) abort();
      for (x = x_start; x < x_end; x++){
            
         r_ = src(x,y,0);
         g_ = src(x,y,1);
         b_ = src(x,y,2);
         max_ = max(max(r_,g_),b_);

         r_ = (r_ * mul_) / max_;
         g_ = (g_ * mul_) / max_;
         b_ = (b_ * mul_) / max_;

         pset( x, y, 0, r_);
         pset( x, y, 1, g_);
         pset( x, y, 2, b_);
         pset( x, y, 3, max_);

      }}

   return true;
}

Для "распаковки" такой текстуры надо всего-лишь написать в шейдере Combine texture * texture alpha
DXT.png
У вас нет доступа для просмотра вложений в этом сообщении.
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

Re: Повышение качества DXT-сжатых текстур

Сообщение gnoblin 11 апр 2010, 19:06

А в чем плюсы хранения в DDS формате? (если я правильно понял о чем речь)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Повышение качества DXT-сжатых текстур

Сообщение lorenze 12 апр 2010, 18:38

Как минимум что ддс очень быстр, так как готов к чтению без преобразований таких как у jpg png и другой фиготени =) И на ходу может преобразовываться без артефактов, в себе хранит сразу набор мипмапов. Наиболее часто используется в геймдеве.
_ttp://www.nonapolis.com - change you live
Производим добор в арт отдел.
lorenze
UNец
 
Сообщения: 21
Зарегистрирован: 01 янв 2010, 17:50

Re: Повышение качества DXT-сжатых текстур

Сообщение gnoblin 12 апр 2010, 20:46

А в юнити смысл его использовать? Разве исходный формат юньке не по-барабану?
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Повышение качества DXT-сжатых текстур

Сообщение Battle Angel Alita 12 апр 2010, 20:52

DXT-сжатие хорошо тем, что оно поддерживается аппаратно. Т.е. такая текстура занимает в 6 раз меньше места не только на винчестере, но и в видеопамяти.
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

Re: Повышение качества DXT-сжатых текстур

Сообщение lorenze 12 апр 2010, 21:54

gnoblin писал(а):А в юнити смысл его использовать? Разве исходный формат юньке не по-барабану?

Нет не по барабану) Она ддс читает напрямую, но не преобразует как другие форматы. Кстати автосжатие текстур можно и выкл.
Кстати в ддс и альфа тоже есть =) В общем не формат а сказка.

Battle Angel Alita писал(а):DXT-сжатие хорошо тем, что оно поддерживается аппаратно. Т.е. такая текстура занимает в 6 раз меньше места не только на винчестере, но и в видеопамяти.

именно =)
_ttp://www.nonapolis.com - change you live
Производим добор в арт отдел.
lorenze
UNец
 
Сообщения: 21
Зарегистрирован: 01 янв 2010, 17:50

Re: Повышение качества DXT-сжатых текстур

Сообщение gnoblin 13 апр 2010, 03:55

Тогда я не понял как связано DXT сжатие и BMP в контексте юнити.
:ymsigh:
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Повышение качества DXT-сжатых текстур

Сообщение warr11r 13 апр 2010, 09:35

Вероятно, тут вопрос про выбор между качеством и производительностью - ДДС более производителен, БПМ более качественный.
В конечном варианте, не важно, во что Юнити преобразовывает текстуры, важно, в каком формате они были изначально?
Мудрость - это когда начинаешь понимать, что все время занимаешься какой-то х...ней.
Изображение
Аватара пользователя
warr11r
UNITрон
 
Сообщения: 310
Зарегистрирован: 06 июн 2009, 03:21
Откуда: Украина, Ровно
  • ICQ

Re: Повышение качества DXT-сжатых текстур

Сообщение gerasim 13 апр 2010, 17:59

Важно как это будет выглядеть в [unity 3D] . Нормалмапа для начала делаетца 32бит RGBA .tga , тоесть по максимуму, штоб неспрашивали а вот у меня в Максе отлично, а вот тут нипалучаетца.. При импорте всегда можно сделать перевод в ддс, и в ддс с компрессией, ДХТ1 и ДХТ5 это и есть .ддс . Если качество устраивает тово што пожалось - прекрасно-хорошо). Колор(диффуз) мапа может быть хоть в жпг, там фсё равно размываетца. БМП - а зачем он в новой жызни?
Неследите - и неследимы будете.
Аватара пользователя
gerasim
UNITрон
 
Сообщения: 166
Зарегистрирован: 17 апр 2009, 15:56
Откуда: Самара

Re: Повышение качества DXT-сжатых текстур

Сообщение warr11r 14 апр 2010, 09:03

Нормалмапа для начала делаетца 32бит RGBA .tga

Такое изменение качества на драуколы никак не повлияет?
Мудрость - это когда начинаешь понимать, что все время занимаешься какой-то х...ней.
Изображение
Аватара пользователя
warr11r
UNITрон
 
Сообщения: 310
Зарегистрирован: 06 июн 2009, 03:21
Откуда: Украина, Ровно
  • ICQ

Re: Повышение качества DXT-сжатых текстур

Сообщение lorenze 20 апр 2010, 11:21

warr11r писал(а):Вероятно, тут вопрос про выбор между качеством и производительностью - ДДС более производителен, БПМ более качественный.
В конечном варианте, не важно, во что Юнити преобразовывает текстуры, важно, в каком формате они были изначально?

Про бмп улыбнул )) Он давно уже не используется из-за своего неадекватного размера.

warr11r писал(а):
Нормалмапа для начала делаетца 32бит RGBA .tga

Такое изменение качества на драуколы никак не повлияет?

Нет, 1 текстура = 1 батчу.
Другое дело что и 1 материал это 1 батч) то есть даже если 1 текстура но много материалов то будет соответствующим и число батчей.

По поводу оптимизации(геометрия, текстуры и батчи) следует почитать http://developer.nvidia.com/docs/IO/8230/BatchBatchBatch.pdf
_ttp://www.nonapolis.com - change you live
Производим добор в арт отдел.
lorenze
UNец
 
Сообщения: 21
Зарегистрирован: 01 янв 2010, 17:50

Re: Повышение качества DXT-сжатых текстур

Сообщение warr11r 20 апр 2010, 12:05

Вы говорите о размере bmp на носители или в видеопамяти?

Я знаю, что материалы с общей текстурой можно обьединять (если и настройки у них совпадают), в стандартных ассетах для этого лежит скрипт Combine Children и на выходе они также будут давать один драукол.
Мудрость - это когда начинаешь понимать, что все время занимаешься какой-то х...ней.
Изображение
Аватара пользователя
warr11r
UNITрон
 
Сообщения: 310
Зарегистрирован: 06 июн 2009, 03:21
Откуда: Украина, Ровно
  • ICQ

Re: Повышение качества DXT-сжатых текстур

Сообщение lorenze 20 апр 2010, 12:12

warr11r писал(а):Вы говорите о размере bmp на носители или в видеопамяти?

Я знаю, что материалы с общей текстурой можно обьединять (если и настройки у них совпадают), в стандартных ассетах для этого лежит скрипт Combine Children и на выходе они также будут давать один драукол.

И там и там, бмп самый тупой формат ) весит много, а качество аналогичное более экономичным форматам, которые весят в разы и десятки раз меньше. Ради эксперимента попробуй возьми 100 текстурок 1024х1024 в бмп и 100 текстурок 1024х1024 к примеру пнг/тга/ддс разница будет огромной.

Проще в случае наличия мешей с одной текстурой назначить один материал, так будут батчи от мешей + 1 батч с материала (если одна текстура)
_ttp://www.nonapolis.com - change you live
Производим добор в арт отдел.
lorenze
UNец
 
Сообщения: 21
Зарегистрирован: 01 янв 2010, 17:50

Re: Повышение качества DXT-сжатых текстур

Сообщение gnoblin 20 апр 2010, 13:16

100 текстурок 1024х1024 в бмп и 100 текстурок 1024х1024 к примеру пнг/тга/ддс разница будет огромной

После того как юнити скомпресила эти текстурки - разницы же не будет, правильно? (если без хитрых манипуляций с dds как писали выше)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Повышение качества DXT-сжатых текстур

Сообщение Battle Angel Alita 20 апр 2010, 13:44

Так, зря я видимо написала "BMP"...
Видеокарта поддерживает только форматы RGB в разных вариациях (RGBA, RGB16 и т.п) и DXT1/DXT5. Неважно в каком формате у вас хранится текстура на диске - jpg, tga, psd... В видеокарте она всё-равно хранится в формате RGB/DXT. В юнити даже есть специальный диаложек выбора
rgbdxt.png

Так как DXT - сжатие с потерями, то трюк с альфа-каналом позволяет уменьшить артефакты сжатия.
У вас нет доступа для просмотра вложений в этом сообщении.
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

След.

Вернуться в Шейдерная школа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2