Очень многие стали задавать вопрос, как делать реальные статические тени в играх.
Ответ прост - LightMap (Карта света).
Я решил написать урок по созданию Light Map(ЛМ), потому что на мой взгляд это
легко и красиво. :)
Для этого нам понадобится 3D Studio MAX 5(или больше) и игровой движок.
Вступление.
Очень многие стали задавать вопрос, как делать реальные статические тени в играх.
Ответ прост - LightMap (Карта света).
Я решил написать урок по созданию Light Map(ЛМ), потому что на мой взгляд это
легко и красиво. :)
Для этого нам понадобится 3D Studio MAX 5(или больше) и игровой движок.
***
Часть 1
-----------------------------
Вот наша сцена.
Делаем её супермегареалистичной :)))
Я использовал для этого Mental Ray рендер.
Наворотил её немного. Добавил текстур, источников света разноцветных и т.д...
Также добавил камеру.
Отрендерил то, что получилось.
А вот, как выглядит в Максе.
В этом уроке мы создадим 2 ЛМ. Одна для стен и пола(потолка), другая для
объектов. Итак приступим.
***
Часть 2
-----------------------------
Атачим все объекты сцены в один. (Editable Poly->Attach)
Применим к этим объектам модификатор Unvrap UVW и присмотримся к его панели.
Там мы найдем пункт Map Channel(Канал текстуры). По умолчанию он первый.
Если нажать кнопку Edit, то мы увидим координаты нашей наложеной текстуры.
Она у нас наложена по первому каналу. Закроем окно Edit. Пока оно нам не нужно.
Нажимаем 0(ноль). Или в меню вверху вибираем Rendering->Render to texture.
Появляется вот эта панель.
Жмём кнопку Add и в списке выбираем Lightning Map.
Теперь называем нашу текстуру и указываем путь. (1)
Устанавливаем нужный размер текстуры (обязательно кратный степени двойки).
Лучше выбрать из уже предоставленых. Он появится в поле Size. (2)
И ставим галочку Render to files only. (3) Это делается для того, чтобы текстура
не накладывалась сразу на объект.
Вернемся к панели Unwrap UVW. Сменим Map Channel на 2.
Выскочит табличка - жмём да. Потом жмём Edit. Теперь (ВАЖНО!!!) проследите,
чтобы ни один вертекс не был выделен. Для этого нужно отъехать подальше и
кликнуть на свободном месте. В верхнем меню выбираем Mapping, Flattern Mapping
(если нету маленьких полигонов, можно параметр Spacing уменьшить до 0,01)
и жмём ОК.
Потом в окне Render to texture. Выбираем Map Channel 2. Объект должен быть
всегда выделен(!!!).
Всё готово, можно рендерить в текстуру! :)
И вот, что у нас вышло.
Теперь повторяем то же, но для стен и пола.
Вот, как выглядит этот ЛМ.
***
Часть 3
-------------------------------
Теперь нужно как-то отобразить ЛМ в игре.
Для этого нам понадобится какойнибудь экспортер в ваш движок.
Я использовал экспортер для Blitz3D. У вас - свой.
Примечание: если у вас нет экспортера, то переходим к Послесловию.
Итак. Сохраняем сцену под другим именем.
Выделяем объект. Выбираем из списка материалов движковый материал.
И на первый слой наносим текстуру, которая должна быть на объекте.
Тип нанесения - Multiply.
Я включил mipmap,color... это особенности движка.
Но самое главное - Map Channel.
Он должден быть установлен в "1".
Теперь на второй слой наносим наш сохраненный ЛМ. Но! Map Channel уже нужно
выставить "2".
Нужно убедится, что у объекта есть второй Map Channel. Для этого применим к
нему Unwrap UVW(если он уже не применен) и переключившись на Map Channel 2,
нажмем кнопку Edit. Если текстурные координаты выглядят так же, как мы их
создавали, то всё в порядке. Если появляются сомнения насчет этого, то снова
идем в меню Mapping->Flattern Mapping и жмем ОК, как и в прошлый раз(!) Нужно
повторить всё, что мы делали в прошлый раз!
Если всё в порядке, то повторяем всё теперь с остальными материалами и смотрим,
что вышло. :)
Вот, что вышло у меня.
Это движковый рендер.
А вот как выглядит в максе сцена, если показывать второй канал на всех
материалах.
***
Послесловие.
Если у вас нет экспортера, то наложение текстур придется делать вручную
в движке. Или писать свой экспортер, который поддерживает несколько слоев.
Если есть какие-нибудь вопросы, присылайте мне на мыло.
Всем желаю удачи!
Buck.
|