Страница 1 из 2

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

СообщениеДобавлено: 11 апр 2010, 18:20
Battle Angel Alita
Иногда бывает что сжатие очень нежелательно, либо даёт очень плохой результат. Можно смирится и хранить текстуру в 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

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

СообщениеДобавлено: 11 апр 2010, 19:06
gnoblin
А в чем плюсы хранения в DDS формате? (если я правильно понял о чем речь)

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

СообщениеДобавлено: 12 апр 2010, 18:38
lorenze
Как минимум что ддс очень быстр, так как готов к чтению без преобразований таких как у jpg png и другой фиготени =) И на ходу может преобразовываться без артефактов, в себе хранит сразу набор мипмапов. Наиболее часто используется в геймдеве.

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

СообщениеДобавлено: 12 апр 2010, 20:46
gnoblin
А в юнити смысл его использовать? Разве исходный формат юньке не по-барабану?

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

СообщениеДобавлено: 12 апр 2010, 20:52
Battle Angel Alita
DXT-сжатие хорошо тем, что оно поддерживается аппаратно. Т.е. такая текстура занимает в 6 раз меньше места не только на винчестере, но и в видеопамяти.

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

СообщениеДобавлено: 12 апр 2010, 21:54
lorenze
gnoblin писал(а):А в юнити смысл его использовать? Разве исходный формат юньке не по-барабану?

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

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

именно =)

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

СообщениеДобавлено: 13 апр 2010, 03:55
gnoblin
Тогда я не понял как связано DXT сжатие и BMP в контексте юнити.
:ymsigh:

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

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

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

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

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

СообщениеДобавлено: 14 апр 2010, 09:03
warr11r
Нормалмапа для начала делаетца 32бит RGBA .tga

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

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

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

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

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

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

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

По поводу оптимизации(геометрия, текстуры и батчи) следует почитать http://developer.nvidia.com/docs/IO/8230/BatchBatchBatch.pdf

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

СообщениеДобавлено: 20 апр 2010, 12:05
warr11r
Вы говорите о размере bmp на носители или в видеопамяти?

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

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

СообщениеДобавлено: 20 апр 2010, 12:12
lorenze
warr11r писал(а):Вы говорите о размере bmp на носители или в видеопамяти?

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

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

Проще в случае наличия мешей с одной текстурой назначить один материал, так будут батчи от мешей + 1 батч с материала (если одна текстура)

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

СообщениеДобавлено: 20 апр 2010, 13:16
gnoblin
100 текстурок 1024х1024 в бмп и 100 текстурок 1024х1024 к примеру пнг/тга/ддс разница будет огромной

После того как юнити скомпресила эти текстурки - разницы же не будет, правильно? (если без хитрых манипуляций с dds как писали выше)

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

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

Так как DXT - сжатие с потерями, то трюк с альфа-каналом позволяет уменьшить артефакты сжатия.