Игромодельер. Создание модели для Unreal Tournament 2003. Часть 1
Рис.1. Стандартный скелет MercMaleA — основа модели.
Создать модель для 3D-шутера значительно проще, чем многим кажется. В предыдущем номере “Мании” мы наглядно вам это продемонстрировали: научили создавать компьютерного персонажа с помощью технологии NURMS. Сегодня же мы займемся немного более сложным, но и более эффективным низкопо лигональным моделированием. Шаг за шагом, тщательно разбирая все тонкости настройки 3D Max , мы сделаем совершенно независимую игровую модель для UT2003 с оригинальными текстурами. Это будет не переделка модели, созданной кем-то еще, а уникальная работа! Детально изучив материал (в цикле предполагается три статьи), вы сможете самостоятельно, без чьей-либо помощи конструировать модели на весьма высоком уровне. Вместе мы пройдем по непростому, но очень увлекательному пути 3D-моделирования: от простенькой заготовки-бокса к сложной многополигональной модели игрового персонажа. Цикл интересен продвинутым моделлерам — они найдут описания нескольких нестандартных методик работы с заготовками для трехмерных моделей, — а для начинающих он, не побоимся этого слова, бесценен. По сути, мы предлагаем вам кратчайшую дорогу по освоению игрового моделлинга. Можно читать толстые учебники по “Максу”, а можно внимательно изучить наш цикл статей
Рис. 2. Полигоны окрасились в красный цвет, и нормали стали видны.
и отработать все описанное в 3D Max. Приложив во втором случае в несколько раз меньше усилий (да и рассказывать мы будем увлекательно, а не нудным языком инструкций), знать в итоге вы будете столько же. Все упоминающиеся в статье файлы ( _scn.max_* и Model.jpg ) можно взять с нашего CD или DVD. Пространство для моделлинга Для реализации задумки нам потребуется для начала 3DS Max версии 5 или выше, а также достаточно современный компьютер, так как нам нужно будет запускать параллельно с “Максом” еще пару не менее “тяжелых” приложений. К тому же неплохо проверить наличие, во-первых, хотя бы элементарных навыков работы с 3D Max (если вы регулярно читаете статьи “Игростроя”, то проблем во
Рис. 3. “Останки” Box.
зникнуть не должно), во-вторых, знания английского для ускорения знакомства с неизвестными инструментами и понятиями (если вы постоянно читаете “Мастерскую”, то все понятия вам уже знакомы), в-третьих, головы на плечах (полностью на вашей совести). Для начала работы вы должны раздобыть изображение персонажа (концепт-арт в боковой, задней и передней проекциях), которого собираетесь моделировать. Нарисуйте сами, попросите друзей или, наконец, поройтесь в интернете. Для данной статьи концепт нарисован мною лично, и искать ничего не придется. Сначала обустроим рабочее место для моделлинга. Файл со сценой scn1.max содержит скелет наемника (MercMaleA aka Male Mercenary) , который мы будем использовать в качестве эталона габаритных параметров. К тому же для анимации модели мы возьмем именно этот скелет (рис. 1). Выбираем в панели Create стандартных примитивов (Standard Primitives) инструмент Box. Разворачиваем свиток Keyboard Entry и заполняем поля так: Height — 235.0, Width — 200.0, Length — 64.0 (также можно создавать Box вручную, с помощью мышки). Жмем на кнопку Create , тем самым создаем Box, который целиком покрывает скелет. Таким образом мы задали габариты будущей модели, к тому же этот параллелепипед мы используем в качестве рабочего пространства. Спрячем скелет (Hide Selection) , так как понадобится он нам е **
**
Рис. 4. Концепт-арт персонажа.
ще не скоро. Сверьтесь с файлом scn2.max. Переделываем Box в рабочее пространство для моделлинга. Выделяем его и применяем к нему модификатор EditMesh из панели Modify. Сделаю небольшое отступление, дабы рассказать о нормалях. Каждый треугольник, из которых состоит модель, имеет нормаль — трехмерный вектор, отвечающий за освещение треугольника. Полигоны, которые состоят из треугольников, могут иметь несколько нормалей. На картинках видно, как изменение ориентации нормалей прямоугольника влияет на его освещенность. У нормалей есть одно свойство: если они ориентированы от камеры, то полигон невидим. В нашем случае это свойство может быть полезно. Щелкаем на кнопку Polygon — так мы переходим к редактированию Box на уровне полигонов. Заодно ставим галочки напротив пунктов Ignore Backfacing и Show Normals. Выделяем все полигоны (мышкой в видовом окне или нажатием Ctrl+A ) — рис. 2. Теперь (звучит немного безумно, но так и есть) вывернем Box наизнанку, иными словами, ориентируем нормали внутрь куба. Щелкаем кнопку Flip в свитке Surface Properties. Становится видна внутренность Box. Это и требуется! Выделяем верхнюю и нижнюю стороны и нажимаем на клавиатуре кнопку Delete. Данные стороны
Рис. 5. Совмещение оси Z и основания наколенника.
нам больше не понадобятся. Зато понадобится оставшаяся конструкция (рис. 3). На нее можно посмотреть в файле scn2.max. Теперь мы “наклеим” на полученную конструкцию различные проекции персонажа. Открываем редактор материалов (клавиша M ) и в свитке Maps жмем кнопку напротив пункта Diffuse Color. Затем в появившемся списке выбираем пункт Bitmap. Находим графический файл с проекциями персонажа Model.jpg (рис. 4). Мы попадаем в дочерний материал. Возвращаемся на уровень вверх и кликаем Show Map in Viewport (Отображение материала в видовом окне). Осталось наложить картинку на полигоны. Для этого в мо дификаторе EditMesh снова переходим на уровень редактирования полигонов и выделяем больший из трех имеющихся полигонов. В свитке Edit Geometry кликаем Detach , чтобы “отрезать” этот полигон от общей конструкции. В открывшемся окне называем отделяемый полигон (прямоугольник) Front ; при этом никаких галочек стави
Рис. 6. Интерфейс модифи- катора Edit Mesh.
ть не нужно. Таким образом, отрезанный полигон стал новым объектом. Действуя аналогично, отрезаем меньшие полигоны. Назовем их Left и Right. Оставшийся полигон назовем Back (поскольку, кроме него, ничего от конструкции не осталось, надо просто переименовать сам Box). В результате на сцене должны быть видны четыре прямоугольника: Front , Back, Left и Right. Выделяем Front и применяем к нему модификатор UVW Map из панели Modify. Этот модификатор позволяет наложить материал на плоскость Front. Как станет видно позднее, на самом деле мы сгенерировали для полигона текстурные координаты. Чтобы координаты были правильными, надо повернуть плоскость проецирования. Для этого отмечаем в группе параметров Alignment пункт Y и кликаем Fit. Проекционная плоскость точно совпадает с прямоугольником Front. Аналогично поступаем с Left, Right и Back.
Рис. 7. Заготовка ноги.
Текстурные координаты на все плоскости наложены — нужно наложить материал. Открываем окно редактора материалов и применяем созданный ранее материал к плоскостям (нажимаем кнопку Assign Material to Selection ). Закрываем окно редактора материалов. Как-то кривовато выглядят текстуры. Исправим эту недоработку. Выделяем плоскость Back. В модификаторе UVW Map выбираем уровень редактирования проекционной плоскости — Gizmo. Переместите Gizmo так, чтобы половинка плоскости Back проходила через координатную ось Z. Небольшой перекос устраняется поворотом Gizmo на несколько градусов по часовой стрелке. Аналогично поступаем с плоскостью Front. Для Left и Right одними перемещениями Gizmo, увы, не обойтись. Сначала кликаем View Align , потом Fit. Так мы повернем боковую проекцию персонажа в вертикальное положение. А теперь устраним сжатие по горизонтали путем корректировки значения поля Width. Перемещаем Gizmo так, чтобы ось Z проходила через основание наколенника (рис. 5). Перемещаем у каждой плоскости Gizmo так, чтобы обувь перс
Рис. 8. Еще один разрез.
онажа максимально точно касалась плоскости XY. Пространство для моделлинга готово. Получившуюся сцену можно посмотреть в файле scn4.max. Обзор инструментов Перед тем как приступить к собственно моделированию, давайте посмотрим, какие инструменты имеются в нашем распоряжении.Основным является модификатор Edit Mesh. Хочу отметить несколько опций, общих для всех уровней редактирования. Ignore Backfacing — отсекает (на жаргоне говорят — “игнорирует”) выделение элементов, нормали которых не ориентированы в сторону камеры. Попробуйте поэкспериментировать. В нашем случае включение данной опции означает, что если мы выделим лицо персонажа, то затылок останется невыделенным! В свитке Edit Geometry нам понадобятся инструменты: Collapse (коллапсирование — преобразование выделения в вершину), Make Planar (сделать выделение плоским), Bevel/Chamfer (сделать закругле ние элемента), Extrude (экструдирование выделения — выдавливание в напра
Рис. 9. Обнаружены совпадающие вершины.
влении нормали), Break/Divide (разбивает каждый элемент выделения пополам), Attach/Detach (присоединение/отделение выделения) и, конечно, Create (создать элемент). В данном случае под словом “элемент” следует понимать единицу любого уровня редактирования Vertex/Edge/Face/Polygon/Element , а не только Element. Моделирование
Рис. 10. Полигон, из которого “выращивается” нога.
_Ступня _ Создаем Box в области ступни. Щелкаем на нем правой кнопкой мыши и в контекстном меню выбираем пункт Properties. В открывшемся окне Object Properties в группе Display Properties ставим галочку напротив See-Through (полупрозрачность) и желательно напротив Vertex Ticks (принудительное отображение вершин). Так мы сделаем Box полупрозрачным, а значит, сквозь него будет виден концепт-арт персонажа. Переименуем Box01 во что-нибудь более подходящее, например Erazer. Такое имя я придумал для персонажа. В том же контекстном меню выбираем пункт Convert To/Convert To Editable Mesh. Так мы перешли от конкретного примитива Box к сеточному каркасу Editable Mesh , который далее я буду называть просто сеткой. Суть дальнейших действий такова: мы будем сантиметр за сантиметром выращивать тело персонажа (точнее, только половину тела, вторую получим путем “отзеркаливания”).
Рис. 11. Финальный вид стопы.
В свойствах видовых окон отметим галочкой строку Edged Faces — отображение ребер на сетке. На уровне вершин (путем их перемещения) подгоним сетку под картинку (рис. 7). Переходим на уровень полигонов и проводим несколько разрезов инструментом Cut (см. врезку): последовательно щелкаем по ребрам. Два клика — один разрез. Проводим разрезы сверху и по бокам заготовки, кое-где перемещаем и склеиваем вершины (см. scn5.max ). Когда мы подгоняем форму сетки по рисунку, главное — четко представлять себе, что должно получиться в итоге и как оно должно выглядеть! Проведем еще один разрез (рис. 8) , при необходимости манипулируя вершинами и поворачивая ребра инструментом Turn.
Рис. 12. Готовая нижняя часть ноги.
Для удобства обозрения всех ребер можно сделать невидимые ребра видимыми. Для этого выделяем в режиме Edges все ребра и кликаем по кнопке Visible из свитка Surface Properties. Я также отключил сглаживание между треугольниками — оно не должно пока сбивать нас с толку. При разрезании иногда возникает и другая проблема — совпадающие вершины. Их нужно склеивать (Collapse) — рис. 9. Результат смотрите в файле scn6.max. Склеиваем указанные в scn7.max вершины для уменьшения числа полигонов. Это делается для того, чтобы максимально “облегчить” (по числу вершин) полигон, который мы далее будем экструдировать (рис. 10). После этого выделяем полигон и экструдируем до подъема ступни. Для экструдирования выделения нужно сделать следующее. Возле кнопки Extrude есть поле ввода с двумя стрелочками вверх и вниз. Наводим курсор на эти стрелочки и зажимаем левую кнопку мыши. Удерживая кнопку мыши нажатой, двигаем мышкой вверх/вниз — значения поля будут увеличиваться/уменьшаться. Таким образом, мы на глаз можем определить, насколько следует экструдировать полигон. Кстати, кнопкой Extrude мы вообще не воспользовались — почему, читайте на отдельном текстовом блок
Рис. 13. На моделирование колена уходит довольно много времени.
е “Вредный экструдинг”. Подгоняем позиции вершин по рисунку, не забывая руководствоваться здравым смыслом. В итоге должно получиться как в файле scn8.max. Теперь двумя экструдингами образуем подъем подошвы, а третьим завершим задник ноги (см. scn9.max ). Из верхнего полигона создаем область голеностопного сустава и после нескольких серий манипуляций приводим ногу к виду (рис. 11) , как в файле scn10.max. _Голень _ Защитные пластины голени полигональными делать не будем. На стадии текстурирования мы их просто нарисуем. Поэтому воспринимаем голень "однородн
Рис. 14. Результат правильного моделирования ноги.
ой" и продолжаем экструдировать 4 раза полигон до нижней части наколенника. Далее я не буду напоминать о необходимости коррекции вершин. Просто постоянно помните об этом. Если вам кажется, что какая-то часть модели, сделанная ранее, несколько кривовата, смело корректируйте (при этом не забывайте делать резервные копии). После корректировки сетки (рис. 12) получаем сцену типа той, что хранится в файле scn11.max. _Колено и торс _ Смоделируем колено. Поскольку суставы — очень важные части сетки при анимировании, старайтесь повышать здесь сегментацию, но в разумных пределах. Огромное количество вершин сочленения очень трудно будет привязывать к скелету, поэтому не переусердствуйте.
Рис. 15. Область таза.
С учетом вышесказанного делаем колено 4-кратной экструзией полигона. Этого должно быть достаточно для плавного сгиба. На каждом шаге экструзии удобно изменять форму сечения с помощью инструмента Bevel или просто через функцию Select and Uniform Scale , и уже после всех шагов экструзии подправлять сетку. Добавляем разрез по бокам колена и склеиваем выделенные вершины — так мы создадим выпуклости фиксатора наколенника. После того как мы покрутим ребра и склеим расположенные рядом вершины, у нас должно выйти что-то вроде сцены в файле scn12.max — рис. 13. Теперь экструдим до начала килта. На мой взгляд, трех сегментов для данного участка должно быть достаточно. Заметьте, я вообще не добавил новых вершин в результат экструзии. Давайте изменим положение ноги относительно рисунков. Это необходимо по двум причинам. Во-первых, при текущем положении ноги невозможно нормально смоделировать область между ног — пах (отставить шуточки в строю!). Во-вторых, если ноги расположить близко одну к другой, то их сложно анимировать: вершины одной ноги будут воздействовать на близлежащие вершины
Рис. 16. Часть торса персонажа.
другой. С учетом очень близкого расположения ног (вплотную) сложно корректировать “кривые” вершины. На основе этих рассуждений отклоняем ногу простым перемещением вправо/влево в Back/Front viewport. Загляните в файл scn13.max и сравните с тем, что получилось у вас. Выделенные на рис. 14 вершины считаем находящимися на своих исходных позициях и продолжаем наращивать модель. Четыре раза экструдируем до пояса. Это лучше делать в правом/левом видовом окне, потому что там удобно сразу корректировать сечение бедра. Несколькими разрезами делаем бляху пояса и добавляем полигоны килту (рис. 15). Посмотрите результат в файле scn14.max. Применяя комбинацию уже известных приемов, делаем сечение у пояса максимально плоским. Правда, скорее всего, в центре сечения будут лишние вершины. Давайте упростим себе жизнь, удалив их. Хм, дырка какая-то появилась! Не беда, ведь у нас есть замечательный инструмент Create. Переключаемся на уровень полигонов и против часовой стрелки обходим вершины будущего полигона. Почему против часовой стрелки, а не по? Вспомните из школьного курса физики правило правого винта. Помните, как там было: чтобы вект **_
_**
Рис. 17. Половина торса полностью готова.
ор индукции сердечника был направлен вверх, надо, чтобы в соленоиде ток бежал против часовой стрелки. Нам важен не ток, а сама идея. Когда вы обходите последовательность вершин по часовой стрелке, нормаль создаваемого полигона будет направлена именно вверх. Итак, сечение создано с нуля, экструдируем его четыре раза до начала нагрудной брони — до торса. Производим вертикальный разрез ребер на спине для создания рельефности мышц в области поясницы. Лично я показал рельефность панциря, защищающего пресс, всего пятью треугольниками (рис. 16). В зависимости от количества треугольников результирующей модели такие виды рельефности сглаживаются применением инструмента Chamfer к центральным вершинам. Но я в этом необходимости не вижу: после сглаживания сетки малое количество полигонов почти незаметно, к тому же его легче текстурировать. Смотрите файл scn15.max.
Рис. 18. Туловище.
_Грудная клетка _ Переходим к грудной клетке. Снова четыре раза экструдим полигон до начала брони грудных мышц. Руки пока не трогаем и “доводим” сетку до состояния, как в сцене scn16.max (рис. 17). Корректируем форму панциря на лопатках и спине. Сверяйте вершины с рисунком, а кривизну формы настраивайте в соответствии со своим воображением и/или знанием анатомии. Еще четыре экструдинга — и мы, сформировав грудную клетку, заканчиваем туловище. Нам надо еще доделать наплечники, но это лучше сделать после завершения модели. Туловище должно выглядеть как в сцене scn17.max. Я удалил полигоны с одной стороны туловища и их тех областей, куда будут крепиться рука, смоделировал шею (рис. 18).
Рис. 19. Рука. Плоскость позволяет видеть боковую проекцию руки.
_Руки _ Руку лучше делать от запястья (кисть присоединяется позже). Для этого создаем новый объект Box, который сразу же присоединяем к туловищу инструментом Attach на уровне редактирования Element. После присоединения Box сразу становится полупрозрачным, так как приобретает все свойства отображения сетки Erazer. Элемент логично спрятать (Hide) , чтобы он не мешал независимо моделировать руку. Попробуйте смоделировать руку самостоятельно и сравнить с моим результатом из файла s cn18.max (рис. 19). Внимательно моделируйте ло ктевой сустав. Не забудьте повернуть руку на угол 45—60 градусов относительно оси тела и “пришить” к туловищу склеиванием крайних вершин. Очередь кистей. Мы их будем делать не одну, как вы могли подумать, а две. Одна — левая, которая участвует в удерживании тяжелого оружия либо вообще свободна. Вторая — правая, которая всегда держит небольшое оружие. Поэтому левую руку надо сделать наполовину расслабленной, а правую — сжатой в кулак. Моделировать ладони и кулаки всегда немного проще, чем, скажем, голову, потому что у вас всегда перед глазами ваша собственная свободная левая рука, которую можно рассматривать с разных сторон. Итак, экструдим полигон-сечение запястья — получаем ладонь, а экструдингом отдельных полигонов получаем пальцы. После оптимизации вершин создаем левую руку, которую присоединяем к запястью. Для сокращения процесса я просто “отрезал” ладонь у стандартной модели MercMaleA. Возможность так сэкономить время имеется не всегда. Например, если вы моделируете черепашку-ниндзя. Теперь внимание! Мы выделяем на уровне треугольников только что созданную ладонь и отсоединяем (Detach) ее в отдельный элемент (опция Detach To Element в окне Detach ) и этот элемент скрываем (Hide). Все выглядит так, будто никакой ладони мы не пришивали. Осталась модель правой руки, которую надо пришить к…
Рис. 20. Два варианта ладони.
правой руке. Но у персонажа еще нет правой руки! Звучит странно, но кулак правой руки прицепляем к левому запястью. Смоделировав левую руку, сделать кулак довольно просто: элемент кисти (который мы спрятали) отсоединяем (Detach) с опцией Detach As Clone. Получим на сцене еще одну сетку Object01 (имя по умолчанию). Моделируем кулак из уже готовой модели ладони (рис. 20). Это уже дело техники. У меня получилась сцена scn19.max. _Голова _ Модель почти готова. Остались голова и наплечник. Метод моделирования головы несколько отличается от того, что мы уже применяли: экструдировать будем не полигоны, а ребра. Как и в случае с полигонами, ребро экструдируется в направлении нормали своего треугольника. Раньше я не заострял внимания на опции экструдинга Normal. При экструдинге граней это особенно важно учитывать: Group — направлением экструдинга выбирается усредненное значение нормалей выде ленных ребер (что не всегда удобно), Local — каждое ребро экструдируется независимо от соседнего. Моделирование головы начинается с локального экструдирования граней шеи до начала подбородка (рис. 21) — смотрите сцену scn20.max. Экструдируем те же грани 2 раза до середины подбородка (сцена scn21.max ). Теперь будем экструдировать ребра по отдельности: два на подбородке — до начала нижней губы (рис. 21). **
**
Рис. 21. Первая стадия создания головы. Рис. 22. Ребра, из которых создается нос.
До сего момента мы конструировали только половинку тела. При создании лица половинки становится недостаточно: мы не знаем, достаточна ли кривизна поверхности (например, но
Рис. 23. Финальный вариант головы.
са). Нам на помощь приходит так называемая reference-копия : Tools/Mirror. В окне указываем отражение относительно X , а тип отражения выбираем Reference. Стрелочками поля Offset корректируем смещение так, чтобы вторая половинка точно стыковалась с первой. Reference-копия сетки точно повторяет все изменения исходной сетки, поэтому можно наглядно оценить кривизну сетки. Чтобы Reference-копия не мешала при редактировании, ее п олезно “заморозить” (Freeze Selection). Теперь конструируем губы экструзией ребер (рис. 21) — смотрите сцену scn21.max. Доделываем щеку (scn22.max). Создание носа стоит начать с ребра над губой, а потом
Рис. 24. Из выделенного участка сетки (слева) получаем наплечник (справа).
доработать ребра вокруг ноздри (рис. 22) — как показано в файле scn23.max. _Наплечники _ Для моделирования наплечников отсоединяем (копированием) выделенный на рис. 24 участок в отдельную сетку и редактируем ее (сцена scn25.max ). Когда сам наплечник готов, присоединяем (как элементы) изготовляемые из цилиндра крепления (сцена scn26.max ). А потом сам наплечник — к туловищу. Процесс моделирования завершен! Поиск ошибок
Рис. 25. Интерфейс модификатора STL Check.
Несколько слов об отладке каркаса. Поскольку на м приходилось довольно много редактировать сетку вручную, не исключены незаметные для глаза ошибки типа совпадающих вершин, треугольников, дырок. На помощь нам приходит полезный модификатор STL Check. Применим его к нашему каркасу. На рис. 25 я отметил наиболее важные моменты: в группе опций Selection ставим флажок напротив Select Edges , а потом ставим галочку напротив Check. В группе Status выводится число найденных ошибок. В нашем случае красным цветом ничего, кроме открытых ребер наплечника и шва туловища, не обозначено. Отлично, значит, пока ошибок нет. В файле scn27.max можно обнаружить законченную модель персонажа. *** * *** Мы сделали многое, но предстоит сделать еще больше. В следующей статье цикла мы разберемся, как придать грубому каркасу сглаженный вид без увеличения числа полигонов, а также познакомимся с понятием текстурной развертки и применим эти знания на практике. __ __ Настройки 3Ds MAX Перед началом работы надо проверить, правильно ли настроен 3D Max. Идем в Customize/Preferences/Viewports/Configure Driver и устанавливаем Background Texture Size/Download Texture Size на максимум, отмечаем опции Match Bitmap as Close as Possible. Проверяем в настройках видового окна Perspective/Configure , включена ли во вкладке Rendering Method опция Shade Selected Faces. Она должна быть включена (в “Максе” версии 5.1 включена по умолчанию, а вот в 5.0 — нет). _ _ О разрезании и повороте ребер “Макс” не всегда разрезает ребра правильно с точки зрения симметрии разреза, а значит, удобства дальнейшего моделирования. Загляните в файл edges_cutting.max , где я максимально наглядно постарался показать действия по оптимизации разреза. Не помешает также взглянуть на классический пример, когда очень важно повернуть ребро, в файле edges_turning.max. __ Вредный экструдинг Почему строго запрещены одиночные клики по стрелочкам “вверх” или “вниз”? Дело в том, что при однократном нажатии “Макс” экструдирует полигон на предопределенное минимальное значение 0.1, чего просто не хватает, поэтому приходится кликать снова и снова. На каждом шаге экструзии полигона с N вершинами “Макс” создает N+1 полигон ( 2*N+[число треугольников экструдируемого полигона] штук треугольников). Вы уже, наверное, прикинули, во что выльется многократное кликание. Как минимум это будет уже не низкополигональная модель!