Трехмерный культ. Создание объемного мира в Cult3D
Рис. 1. Просторы виртуального города.
Сегодня мы продолжим знакомство с замечательной программой Cult3D , с помощью которой несложно своими руками создать настоящий трехмерный мир. В прошлый раз нам удалось побывать в собственной виртуальной квартире и даже научиться открывать и закрывать двери. Сегодня мы расширим задачу и поставим новую цель: выйти на улицу и ощутить себя полноправным гражданином 3D-города. Прежде всего, на м понадобится собственно модель города. На первый взгляд звучит угрожающе: оцените, сколько времени потребуется на создание такой модели! Однако задачу можно упростить, если ограничиться для начала одной улицей. Представим себе обычную улицу: высотные дома, деревья, асфальтированные дороги и бесконечный поток машин ( рис. 1 ). Этот огромный набор объектов трудно увязать с золотым правилом: чем меньше полигонов, тем лучше. Однако в действительности ситуация не так страшна, как кажется на первый взгляд. Рассмотрим пример создания низкополигонального автомобиля для нашей улицы.
Рис. 2. Модель “Нивы-Шевроле”.
Создаем 3D-автомобиль Откройте 3DS Max и загрузите любую качественную модель 3D-автомобиля. Если у вас дома нет такой, то воспользуйтесь бесчисленными бесплатными библиотеками моделей, которые можно легко найти в интернете, например на сайте www.3dcafe.com. Я остановился на своем любимом автомобиле “ Шевроле-Нива ” ( рис. 2 ). Как видим, наша модель имеет десятки, а то и сотни тысяч полигонов. Конечно, Cult3D — достаточно мощная программа и смогла бы обработать и такую сложную модель, однако если речь идет о целом городе со множеством разных автомобилей — такую задачу ей решить не под силу. Поэтому подготовим низкополигональную копию данного авто. Издалека она практически не будет отличаться от оригинала, но потребует гораздо меньше памяти на отрисовку.
Рис. 3. Текстуры автомобиля.
Высокополигональная модель понадобится нам для создания качественных текстур для упрощенной модели. Проведем визуализацию автомобиля из различных окон ортогональных проекций: вид сверху ( Top ), вид спереди ( Front ), сзади ( Back ) и слева ( Left ). Каждую картинку сохраним в отдельный jpg -файл, а затем совместим их вместе с помощью любого графического редактора (например, Adobe Photoshop ). Полученная картинка будет содержать все необходимые текстуры машины. Сохраним ее под именем car_tex.jpg (см. рис. 3 ). Снова вернемся в 3DS Max , откроем сцену с высокополигональным автомобилем. По его образу и подобию нам предстоит создать низкополигональную болванку, на которую мы наложим текстуры автомобиля. Для этого создадим параллелепипед ( Box ) по размерам корпуса машины и установим число сегментов по длине и высоте равным 4. Преобразуем параллелепипед к типу Editable Mesh. Для этого в контекстном меню объекта, вызываемом щелчком правой кнопки мыши на нем в окне проекции, необходимо выбрать команду Convert to Editable Mesh ( Преобразовать в редактируемый каркас ). После этого мы можем редактировать объект на уровне точек: справа в панели Modify включим режим вершин ( Vertex ). То же самое можно сделать клавишей 1 на клавиатуре. Далее с помощью кнопки Select and Move ( Перемещать ) настроим положение вершин, чтобы параллелепипед приблизительно принял форму автомобиля ( рис. 4 ).
Рис. 4. “Болванка” машины.
Колеса проще всего сделать с помощью обычных цилиндров с небольшим числом сегментов. Накладываем текстуры Перейдем к текстурированию полученной “болванки”. Откроем редактор материалов, нажав кнопку M. Щелкнем на первой ячейке образцов и придадим ей имя Car_Material , а ее материал присвоим модели. Перейдем в свиток Maps ( Карты ) и
Рис. 5. Выбор граней боковой поверхности модели.
щелкнем на кнопке None в канале Diffuse ( Рассеянный ). В открывшемся окне Material/Map Browser выберем тип карты — Bitmap ( Растр ). В качестве растровой карты укажем файл car_tex.jpg , который мы недавно создали. Выберем модель машины и применим на нее модификатор Unwrap UVW ( Развертка UVW ), который вам знаком по циклу статей “ Текстурирование в 3DS MAX ”. Перейдем на подуровень Select Face ( Выбор граней ), а затем выберем все грани, образующие боковую поверхность машины ( рис. 5 ). Откроем подпрограмму Edit UVWs , нажав кнопку Edit ( Редактировать ) в настройках модификатора. В открывшемся окне Edit UVWs включим фильтр Filter Selected Faces для того, чтобы отображались только координаты выбранных граней. Переместим точки кнопкой Move ( Переместить ), добившись правильного расположения координат проецирования ( рис. 6 ). Для удобства работы откроем снова редактор материалов (не закрывая окна Edit UVWs) и включим кнопку Show map in Viewport , чтобы текстуры отображались в окнах проекций. Аналогичным образом настроим координаты проецирования для передней и задней части автомобиля. В завершение всего определим координаты проецирования для колес, верха и дна машины. В качестве верха и дна можно использовать фрагменты имеющихся в вашем распоряжении текстур.
Рис. 6. Настройка координат проецирования.
Создаем 3D-город Автомобиль готов. Теперь приступим к созданию других объектов города. Пользуясь “золотым правилом”, создаем дома с помощью кубиков с качественной текстурой, которую легко получить, просто выйдя на улицу с цифровым фотоаппаратом **_
**
Рис. 7. Алгоритм смены локаций.
наперевес или на худой конец сканируя городские фотографии. Деревья проще всего сделать так: две плоскости с текстурой листьев, расположенные крест-накрест на стволе-цилиндре. Есть одна хитрость, которую стоит применить при создании виртуального города: наша задача — ограничить перемещение гражданина только в пределах одной улицы. Для этого можно либо сделать тупик, когда игрок упрется в стены домов, либо создать невидимую преграждающую стену. В качестве такой прозрачной перегородки может выступать простой параллелепипед с наложенным материалом, у которого параметр Opacity ( Непрозрачность ) равен 0 — настраивается в редакторе материалов. Когда все объекты виртуального города готовы, импортируем низкополигональную модель автомобиля (или несколько разных машин, если вы их сделали) с помощью команды Merge ( Совместить ) из меню File. Небольшой совет: прежде чем экспортировать всю модель города в Cult3D, не поленитесь назвать все объекты сцены логичными именами и объединить их в группы (если нужно). Также не забудьте про камеры — они будут вашими виртуальными глазами. Теперь перейдем к экспорту. Он осуществляется с помощью модуля Cult3D Exporter , вызываемого командой Export из меню File в 3DS Max. Подробно об экспорте было написано в предыдущей статье цикла “ Создание объемного мира в Cult3D ”, поэтому сейчас не буду повторно заострять на этом ваше внимание — с первой частью статьи вы можете ознакомиться на нашем компакте или DVD ** в разделе “ИнфоБлок”_**
Рис. 8. Алгоритм навигации.
__ Проект в Cult3D Откройте Cult3D и создайте новый проект. Очень удобно виртуальный город и квартиру создавать в разных проектах, а затем с помощью простого алгоритма совмещать так называемые локации. Этот принцип используется во многих играх при выполнении игроком определенных действий: например, при открытии двери в подъезде загружается локация города. Забегая вперед, скажу, что такая загрузка локаций осуществляется с помощью функции Load World. Ее алгоритм выглядит, как показано на рис. 7. Как и в предыдущем случае с квартирой, создайте простой алгоритм навигации. Напомню: в него входят World_Start , Mouse/Keyboard Navigation и камера, а также KeyPress для перезапуска приложения ( рис. 8 ). Благодаря ему вы сможете ходить по городу с помощью клавиш-стрелок клавиатуры. Запустите проект и посмотрите, что получилось. Если не обнаружилось явных ошибок в модели, можно приступить к созданию трафика.
Рис. 9. Метод создания трафика.
Трафик Мы рассмотрим создание движущихся автомобилей на примере одной машины. Если у вас их несколько — аналогичные действия нужно проделать с каждой из них. Итак, определим задачу: автомобиль будет ехать в прямом направлении некоторое расстояние по дороге по правой полосе, затем через некоторое время он возвращается в обратном направлении по другой стороне дороги. Этот процесс будет повторяться циклически. Позднее вы сможете усовершенствовать процесс, добавив остановки, повороты… Постройте алгоритм следующим образом (см. рис. 9 ). Алгоритм будет состоять из таймеров времени, активаторов и дезактиваторов действий, а также самих действий: Translation XYZ ( Перемещение ) и Rotation XYZ ( Вращение ). Оба действия
Рис. 10. Настройки параметров.
находятся в списке Actions/ Object Motion. В параметрах перемещения установите расстояние по оси движения и время. Их можно определить опытным путем, выставляя значения на глаз и проверяя результат. Что касается вращения, то оно устанавливается в градусах: например, 180 будет означать противоположное направление движения. Ваш алгоритм не обязательно должен быть таким сложным, как у меня. Попробуйте для начала просто перемещать машину вперед. Если у вас несколько автомобилей, то делайте им разные настройки времени движения (скорости) и разную задержку перед движением, чтобы они не ездили синхронно. Экспериментируйте, и вы сможете добиться потрясающих результатов! Используем спецэффекты В завершение статьи обратимся к спецэффектам, которые могут быть реализованы в Cult3D. Спецэффекты создаются с помощью систем частиц ( Particle Systems ). Несложно создать такие эффекты, как струя воды из крана, полет магических частиц, огонь, дым и ряд других. Рассмотрим создание частиц на простом примере. Щелкнем правой кнопкой мыши на строчке RootNode в иерархии окна Scene Graph и в контекстном меню выберем New/Particle System — будет создана новая система частиц, которая поместится в список. Отыщем ее в списке и перетащим на поле Event Map. Далее щелкнем правой кнопкой мыши на пиктограмме Particles и выберем команду Details ( Детали ). Откроется окно с многочисленными настройками системы частиц. Значения всех величин легко определить, включив пробное отображение эффекта в окне предварительного просмотра с помощью кнопки Start Test. К основным параметрам относятся: цвет,
Рис. 11. Алгоритм систем частиц.
определяемый градиентом, Emit Speed ( Скорость испускания ), Speed Range ( Вариация по скорости ), Birth Rate ( Число частиц ), Life Length ( Время жизни ), Start Angle ( Угол испускания ), Particle Size ( Размер частиц ), Gravity ( Гравитация ), Friction ( Трение ). Все настройки очевидны и легко подбираются опытным путем ( рис. 10 ). В конце концов, можно создать простой алгоритм, благодаря которому открытие крана включало бы воду в вашей виртуальной ванне. Он реализуется с помощью действия ( Action ) Start Particle Emission ( Начало испускания частиц ) и Mouse_Click ( Клик мышью на объекте в 3D мире ) — см. рис. 11. *** * *** На этом мы завершаем наш цикл статей, в котором познакомились с основными возможностями Cult3D. Надеюсь, эта замечательная программа будет полезна вам в ваших дальнейших проектах. Успехов вам в покорении 3D-миров!