Иногда бывает что сжатие очень нежелательно, либо даёт очень плохой результат. Можно смирится и хранить текстуру в BMP, а можно использовать тот факт, что альфа канал сжимается с большей точностью.
Трюк заключается в разделении текстуры на цветность и на яркость, которая будет хранится в альфа канале. Самый простой способ так сделать - скачать плагин для фотошопа FilterMeister и запустить в нём этот скрипт:
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++){
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 в контексте юнити.
Re: Повышение качества DXT-сжатых текстур
Добавлено: 13 апр 2010, 09:35
warr11r
Вероятно, тут вопрос про выбор между качеством и производительностью - ДДС более производителен, БПМ более качественный. В конечном варианте, не важно, во что Юнити преобразовывает текстуры, важно, в каком формате они были изначально?
Re: Повышение качества DXT-сжатых текстур
Добавлено: 13 апр 2010, 17:59
gerasim
Важно как это будет выглядеть в . Нормалмапа для начала делаетца 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 текстура но много материалов то будет соответствующим и число батчей.
Вы говорите о размере 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 - сжатие с потерями, то трюк с альфа-каналом позволяет уменьшить артефакты сжатия.