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

Lighmapping tutorial max(bake)->shop(compare)->unity

СообщениеДобавлено: 19 авг 2009, 03:01
iqubik
Здравствуйте уважаемые пользователи 3dmax 2008 и старше.

Хочу представить вашему вниманию урок по быстрому, масштабируемому и оптимизированному переносу лайтмапов из макса в юнити.
Чего хотелось?

Хотелось делать мультилайтмапы это когда идёт одна большая лайтмапа для всего уровня и всего что на нём есть, а каждый объект работает только со своим кусочком это мапы.
Зачем?

Если у вас на уровне 100 объектов и для них делается запёк, то я думаю, что вы из макса получите 100 файлов запёка, которые 100 раз надо будет засунуть в свой слотик. И юнити 100 раз будет сжимать и разжимать эти файлы на лету, и мипмапы будут для них сгенерированы 100 раз. И если вы захотите сделать опцию в своей игре, которая бы уменьшала качество текстур на лету, то вам прийдётся писать функцию которая 100 раз будет это делать.
Неоптимально, не правда ли?
Что с этим можно поделать?

Во первых нужно научиться делать мультилайтмапы, а их умеет делать макс 2008-.... а 1-9 максы не умеют. Так что для тех кто не готов слезть с 9тки просьба не заморачиваться(я чесно говоря тоже долго решался на этот шаг, но вот, решился и пересел вчера на 2009 макс).
Делать мультилайтмапы:
Дело в том, что максики с 2008 версии стали поддерживать унврап сразу нескльких объектов. То бишь выбираете сколько угодно объектов и кидаете на них unwrap uvw. Делаете грамотную развёртку на 3эм канале(map channel=3 нужен для запёка) и не забываете делать на развертке существенный отступ от краёв и от соседних элементов.
Запёк
Выбираем нужные объекты и жмём 0 на клаве. Выбираем папку куда сохранятся файлики, выбираем existing map channel=3, выбираем vrayRAWtotallightingmap в слот для запёка и просим его чтобы он упал в self-illumination слот.
Ставим ФИКСИРОВАННЫЙ размер текстур - чем больше тем лучше, только вот время кушает много. А максимум 2048 пикселей.
Говорим запёку output into source->keep source.
И рендеримс.....
Что получилось на выходе:
Получились на первый взгляд очень не экономные карты света и теней.
Скажем было у нас 5 объектов и мы рендерили запеки в 1024*1024 качестве -> следовательно у нас получилось 5 картинок 1024*1024 где на каждой висит только свой кусочек, принадлежащий сугобо данному объекту. А ещё эти 5 картинок имеют имена, которые мы им дали в максе.
Идея:
Засунуть эти 5 картинок в режиме наложения difference в одно psd файло, да желательно так чтобы слои носили имена максовых объектов(а вдруг что-то перерисовать или перезапечь прийдётся).
Сложности
Казалось бы, что уж там, 5 файликов не сложно в одну psd засунуть и поставить каждому слою difference режим. Да вот только в тестах бывают 5 объектов, а в реале из 100-1000.
Тут умные люди скажут, что для таких целей можно попросить секретаршу ТАню сделать эту грязную обезьянью работу, ну и доплатить ей за геморрой.
А мудрые или мудрёные зададутся вопросом, ради которого я всё это и пишу:
а как собственно это можно сделать даблкликом и самому.
Оказывается можно)))) Я сам в шоке)) По колено в шоке.
1. надо создать в фотошопе(у мя cs4) экшн в котором идёт разблокировка заднего фона и ставиться режим смешивания на difference. Учтите! Всего 2 действия! Никаких команд открытия, закрытия, выборки и прочего. 2 действия на весь экшн.
2.наши файло теперь нудо обработать этим экшеном и перевести в psd. Танёк опять отдыхает - замутим сами и быстро.
file->scripts->image processor->select folder and select save folder
save as psd
run actions->ваша группа->ваш экшн, которым мы делали на предыдущем шаге.
ok.......... waiting........
3.Теперь когда наши лайтмапы стали psd-шниками с difference режимом и разблокированным бэкграундом мы их хотим запихать в одну картинку в виде слоёв.
File->Scripts->Load files into stack
И мелкая доводка- у самого нижнего слоя поставьте режим смешивания - normal.
Чуть чуть шаманим в максе:
Как помните у нас макс при запёке в каждый слот засунул лайтмапу,персональную для каждого объекта, а у нас уже одна большая лайтмапа - НЕПОРЯДОК)
File->Asset tracking->select->brouse->select нашу лайтмапу.
Save project in unity folder.
В юнити назначаем материалам lightmapped шейдер и ритмично так в каждый мат подсовываем нашу мегалайтмапу.
АлЕ ОП!!)))

Опять он написал много букаф
Этот урок для ленивых, один раз это сделаете и почувствуете мир во всем мире.
Я считаю, что чем более будет оптимизирована рутинная работа тем больше останется время на приятные весчи.