Оптимизация веса модели
Вступление
Добрый день, читатель. Часто ли ты отказываешься от использования модели из-за её огромного веса? Бывает же такое, верно?
Сегодня я попытаюсь во всех подробностях описать процесс снижения веса модели.
Мне лично удавалось урезать вес и в полтора и в два раза только руками (не забываем о том что есть в mdlVis'e функция, значительно снижающая вес).
Да, иногда процесс снижения веса модели может быть весьма и весьма трудоемким. И да, для хорошего снижения веса надо быть знакомым с интерфейсами
Model Editor и
MDlvis, и хоть капельку понимать в моделировании.
Перейдем к делу!
Что чаще всего занимает много веса у модели? Текстура? Анимации? А может, полигоны?
На самом деле,
суть веса модели - текст. Да,
модель и есть огромное количество текста. В формате
*.mdl можно целиком редактировать модель через
JassCraft и прочие редакторы, способные расшифровать код модели.
Понятное дело, что модель с небольшим количеством полигонов будет весить меньше хайполи модели,
однако, не в полигонах вся соль. К сожалению, многие модельщики абсолютно бездарны в плане экономии веса, им бы побыстрее закончить модель и выложить её в чарты, сорвав кучу "AWESOMEEE!!" и прочих похвал, не удосужившись довести до ума ещё и вес модели. Кроме шуток, даже на том же Хайве часто встречаются модели настолько не оптимальные, что дальше просто некуда.
Первая проблема заключается в CnP фрагментах других моделей через
"Специальная вставка".
Это одновременно делает сразу три вещи: добавляет новую поверхность, добавляет новый материал, добавляет новую текстуру. Итого мы имеем увеличение веса модели сразу на несколько килобайт, независимо от веса импортного
геосета. Когда к модели добавляется 10-15 фрагментов других моделей - вес возрастает значительно (сжирается до 100-150 кб места).
Что нам с этим делать? Во-первых, по возможности сливать все эти несомненно нужные фрагменты на родные поверхности модели, а уже потом в текстуру к модели подшить новые текстуры. Ну, или же, все фрагменты, использующие одинаковые текстуры сливать в одну поверхность. Это уберет все три утечки веса (новый материал, новую поверхность и новую текстуру).
Да, я не опечатался. Каждый раз, когда импортируется фрагмент - текстура импортируется, независимо от того, импортирована она уже или нет.
Ну а, коли мы не делаем модель, а оптимизируем имеющуюся - снижает до минимума количество поверхностей, материалов и текстур.
Начинать стоит именно с текстур. Заходим в менеджер текстур и удаляем все неиспользованные (не видимые на модели) текстуры. Частенько творцы забывают удалить, к примеру, текстуры удалённых партиклов, или, например, текстуру удалённого ими плаща. Да даже стандартную текстуру модели порой ленятся удалить.
Далее, открываем
Material Manager и, если видим большое количество материалов, начинаем проверять.
Тут есть одна тонкость - если мы видим, например, 2 материала с одинаковой текстурой, однако, у одного из материалов присутствует еще одна текстура - это, чаще всего, тимколор. Если вы не против оказаться без тимколора - удалите одну из текстур, добавьте другой режим фильтрации Blend и выставьте этот материал в редакторе поверхностей, той поверхности, у которой поле "material" будет "none". И так, при удалении каждого дублированного материала.
Удалили материал - сразу же фиксите отсутствие текстуры на какой-то поверхности (использованную текстуру вы удаляете).
Как только разберетесь с текстурами и материалами - переходите в редактор геосета Mdlvis и соединяйте те поверхности, которые используют идентичные текстуры (Ctrl+C с одной поверхности, Ctrl+V на другую. На старой поверхности удаляем старый геосет, на новой - подстраиваем под старое положение).
Эта операция в некоторых запущенных случаях может срезать вплоть до 100-150 кб (была у меня модель с 120 поверхностями, урезал до 6 поверхностей. Итог - 160 кб).
Вторая проблема -
кости. Один из самых сложных, потому как редактировать кости достаточно сложно. Все WarCraft 3 модели обладают парами костей. Более того - половина моделей, сделанных со стандартных, обладает тем же набором костей.
ВНИМАНИЕ!!!,
если вы не умеете анимировать модель, лучше не удалять эти побочные кости, в противном случае вы можете нарушить красоту анимации модели вообще. Если умеете самостоятельно анимировать и считаете, что вы в силах исправить возможные "баги", которые всплывут в анимации - смело удаляйте все дубликатные кости. Этот шаг при большом количестве анимаций может срезать достаточное количество веса.
Третья проблема -
кости оригинала. Допустим если за основу взята модель Иллидана, а автор недобросовестно очищал модель, нам потребуется зайти в редактор склета Mdlvis и поудалять все кости от метаморфозы Иллидана, также все кости с приставкой alternate (аттачи и партикловые источники).
Обработав таким образом модель, кликаем на "Оптимизация модели" в Mdlvis и, для полного счастья, оптимизируем ещё и этой программой. Так, на выходе, мы урезаем вес модели до невероятно низкого значения.
Последний шаг оптимизации -
Текстура. Тут все очень быстро и просто. Если текстура размером выше 256x256 - пережимаем её до этого максимального значения в 256x256 (для аттачей достаточно 128x128) и сохраняем через BLPLab со следующими параметрами:
Количество текстур: 4(максимум 5)
Качество JPG: 25 (максимум 40)% Таким образом из текстуры весом в 600 кб
(512x512 100% quality 10 mipmaps) мы получаем текстуру весом 50 кб
(256x256 30% quality 4 mipmaps).
Если не менять разрешение текстуры, то вес можно снизить до 40-50 килобайт спокойно.
Кстати, если используется измененная стандартная текстура, то настоятельно рекомендуется в фотошопе удалить (альфа 255) все неиспользованные фрагменты текстуры. Тогда параметры на пиксель будут 0\0\0\0, а номинальный вес файла немного снизится.
Удачи тебе, картостроитель. UPD От 9 января, 2012 года: Статья оформлена (by Brut@lus)
Отредактировано и доведено до блеска Duosora, 15.03.2013