Вы находитесь на странице: 1из 23

1

Содержание

Введение
1. Сборка модели танка для игры ВТВ2 (БПО, ЛП, Штурм)
1.1 Предисловие
1.2 Кость модели
1.3 Базис
1.4 Корпус модели
1.5 Создание шасси модели
1.6 Создание материала для модели
2 Создание изображений бликов и бампа
2.1 Создание изображения бликов
2.2 Создание изображения бампа
2

Введение

Особенностью современного мира стала виртуализация окружающей


среды. Игры, симуляторы, мультимедийные тренажёры – вот далеко
неполный перечень современных средств виртуальной реальности.
Сообразно новым веяния появилась и новая потребность в
профессиональных создателях этой самой реальности. Одним из мощных
пластов виртуального мира является мир трёхмерного моделирования – 3-D
графики. Каждый желающий может создать какую-нибудь трёхмерную модель
чего-нибудь. Однако что делать дальше с этой моделью?
Одной из составных частей виртуального мира является мир игр серии
«В тылу Врага» и её версий. Не вдаваясь в подробности, отметим открытость
ресурсов игры для всевозможных привнесений, в том числе и моделями
окружающего мира. Одним из способов войти в мир дизайнеров, освоить пакет
трехмерного моделирования 3DS MAX и получить какой-то конкретный
результат является создание моделей для вышеуказанной игры.
Целью данной работы явилось популяризация работы моделлера танков
для игр серии «В тылу Врага 2» (и её аддонов) с помощью средств,
представленных самими разработчиками игры – Северодонецкой компанией
Bestway.
3

1. Сборка модели танка для игры ВТВ2 (БПО, ЛП, Штурм)

1.1 Предисловие

Прежде всего, ознакомьтесь с документом для подключаемого модуля


экспорта моделей в игру «В тылу врага 2» для пакета моделирования 3DSMAX
версий 7 и 8 readme_rus.htm. В нем освещаются ключевые моменты создания
моделей, которые не рассматриваются в данном руководстве.
Данный материал создан как дополнение к вышеуказанному документу,
своего рода шпаргалка типа «что и куда нажимать, чтобы получить
работоспособную модель». Рассматриваются некоторые основные моменты
создания модели, параметров костей и создания анимации. Вопросы создания
полигональных моделей, наложения текстур также не освещаются в данном
руководстве.

1.2 Кость модели

Кость модели bone – составная часть модели. Для модели примерно то


же, что и кость в скелете человека. Может иметь полигональный вид или не
иметь, может быть вращающейся (revolute) или неподвижной.

1.3 Базис

Basis - корневая кость модели (далее базис). Объект Dummy (пустышка).


Является основой модели, через нее проходят оси симметрии. Ее ориентация
должна совпадать с основной системой координат. Что очень важно учесть,
так это то, что в игре осью вращения является ось Z, поэтому модель должна
создаваться таким образом, чтобы вертикальная ось модели совпадала с осью
Z базиса, т.к. при повороте танка или другой техники в игре модель вращается
относительно именно оси Z.
Для создания базиса выбираем вкладку Create и выбираем объекты-
помощники (Helpers) на панели инструментов справа, как показано на рис. 1.

Рисунок 1.
4

Выбираем объект Dummy и «растягиваем» его в одном из рабочих окон,


превращая в куб. Задаем имя новому объекту – basis. Если ориентация базиса
не совпадает с общими осями координат, выделяем базис, идем на вкладку
Hierarchy, там выбираем категорию Pivot (точка опоры) и жмем кнопку Affect
Pivot Only (применить воздействие только к точке опоры), как это показано на
рисунке 2. Далее выбираем инструмент «Вращение» (см. рис.2) и вращаем
точку опоры базиса. Оси базиса (зеленая, красная и синяя стрелки на рисунке 2
в центре) должны совпасть с такими же цветными осями в левом нижнем углу
рабочего окна общей системы координат. В нашем случае мы должны
повернуть точку опоры так, чтобы зеленая ось Y базиса смотрела бы от нас, а
синяя Z - вверх. Ось X уже направлена в нужную сторону. Ленивые, в этом
случае, могут нажать кнопку Align to World (см. рис. 2).

Рисунок 2.

Теперь нужно прописать свойства модели в параметрах базиса. Окно


параметров можно вызвать выделив нужную кость (базис в данном случае) и
нажав правую клавишу мыши. В отрывшемся меню выбираем пункт Properties.
Откроется окно Object Properties. В нем активируем вкладку User Defined. Вот
в этом большом текстовом окне и записываются параметры и свойства костей,
о которых речь идет ниже.
В параметры базиса прописывается тип сущности (type=entity для
техники, работоспособной или поврежденной моделей и type=game_entity для
разрушенной модели).
Обязательно в свойствах базиса указывается местоположение модели,
папка, в которую будет положена модель при экспорте, например:
Model=entity/-vehicle/tank_light/pz38t
5

Радиус колес задается параметром Wheelradius. Эта величина определяет


скорость вращения колес при движении. Задается для всех колес модели. Для
задания радиуса каждому колесу индивидуально используется параметр
Radius, который задается в параметрах именно желаемого колеса и действует
только для последнего.
Также здесь задается общая анимация модели: старта start, остановки
stop, выстрела из главного орудия fire, открытия люков open (замкнутая),
открытия дополнительных люков (open_driver) и попадания снаряда hit.
Параметры анимации можно определить позже, когда будут необходимые для
нее кости и возможно будет создать группы анимации для нее (см. п. 1.10). В
противном случае при экспорте модели плагин будет ссылаться на
невозможность найти ту или иную группу анимации и очень ругаться.

Пример набора параметров для модели Pz38t (на момент окончания


сборки):
Type=Entity
Model=entity/-vehicle/tank_light/pz38t
Animation=start,body,10-50,60
Animation=stop,body,50-90,50
Animation=hit,body,90-110,80
Animation=fire,fire,120-150
AnimationResume=open,open,160-180,80
AnimationResume=open_driver,open_driver,100-220
Wheelradius=0.43

Примечание 1. Обязательно оставляйте после последней строки


параметров одну пустую строку (См. документ readme_rus.htm к
официальному плагину).

Подробнее о значении параметров рассказывается в документе


readme_rus.htm к официальному плагину.

1.4 Корпус модели

Корпус модели носит имя body. Можно создать с нуля, а можно


использовать импорт старой модели, например из ВТВ1. При создании
полигонального вида с нуля, селдует учесть, что нельзя использовать
инструмент масштабирования Scale до того, как объект будет преобразован в
объект типа Editable Mesh или Editable Poly. Также здесь в полный рост встает
проблема масштаба модели. Для оценки длины/ширины модели используем
инструмент «Измерение дистанции», находящегося по адресу Tools/Measure
Distance… Один метр в «максе» равен примерно 2,45 метрам реальным. Но все
равно, подгонять габариты модели придется опытным путем, сравнивая
линейные размеры с уже существующими моделями, путем предварительного
экспорта модели с одним единственным корпусом. В противном случае, уже
6

готовую модель со множеством костей будет сложнее правильно


отмасштабировать.

Примечание 2. При масштабировании нельзя масштабировать (Scale)


или использовать отражение (Mirror) для модели целиком, а только лишь
сами полигональные виды на уровне полигонов и вертексов.

В параметрах корпуса записываем следующие свойства:


Poly – кость будет иметь полигональный вид и будет видна в игре. Если
не указать, полигональный вид экспортироваться не будет
ID=body – определяет, к какому компоненту принадлежит кость. В
данном случае кость принадлежит корпусу. Если не указать, то в игре, при
разрушении компонента «корпус» изменения в виде эту кость не затронут
Animation=repair,body_r,190-220,body_r,60 – определяет кадры
анимации, проигрываемой при починке корпуса.
Теперь настало время прилинковать корпус к базису. Нажимаем кнопку
Schematic view вверху справа. Откроется схема иерархии модели, на
которой пока будут только две кости: basis и body.
Нажимаем кнопку Connect и линкуем корпус к базису от дочернего
объекта к родительскому, т.е. растягиваем связь от body к basis.

1.5 Создание шасси модели

Для начала, пока масштаб модели не определен со всей ясностью, можно


ограничиться наброском шасси. Нужно создать две кости по обеим сторонам
модели: wheelsR и wheelsL, соответственно с правой и с левой сторон модели.
Это будут корневые кости шасси. Они могу представлять собой ту же
пустышку (dummy), что и базис, а могут иметь полигональный вид деталей
подвески, в зависимости от задумки и возможностей создателя. В нашем
случае возьмем пустышку. Задав имена костям, переходим к их параметрам.
Соответствующей кости присваиваем компонент ID=trackright или ID=trackleft.
В случае полигонального вида подвески не забываем про Poly (не в нашем
случае). Линкуем как было указано выше обе кости к базису (именно к базису,
т.к. корпус может изменять свое положение в пространстве относительно
базиса при проигрывании анимации старта, например, а шасси должно твердо
стоять на земле в это время).
Теперь необходимо создать волумы для траков. Идем на вкладку Create,
раздел Geometry (см. рис. 3) и выбираем Box (коробка). Создаем
продолговатые параллелограммы и выравниваем нижние их грани по нулю
координаты Z общей системы координат. Можно создать один волум, а потом
применить копирование. Имена волумов должны быть Trackright_vol
Trackleft_vol для правого и левого соответственно. В параметрах волумов
задать свойство Volume. Прилинковываем волумы к костям wheelsR и wheelsL
и размещаем их на соответствующих сторонах.
7

Рисунок 3.

Теперь остается наложить текстуру на корпус и можно будет


экспортировать для сравнения размеров создаваемой модели с уже
существующими без боязни вызвать «терминатора» в игре.

1.6 Создание материала для модели

Нажимаем кнопку Material Editor . Появится окно редактора


материала. Выбираем свободный слот. Задаем имя материалу (base или
material1, к примеру) и нажимаем кнопку, справа от поля имени, как показано
на рисунке 4.

Рисунок 4.
В появившемся списке Material/Map Browser выбираем строку
EclipseMtl. В раскрывшемся окне параметров материала выбираем тип
прозрачности:
8

Opaque (None) – для материала не используется альфа-канал на


текстурах, т.е. на модели не будет прозрачных мест
1 bit alpha (Test) – для материала, использующего альфа-канал,
например, прорези на ведущих колесах танков
8 bit alpha (Blend) – для техники нет смысла использовать, используется
для окон зданий и т.п. моделей.
Для создания техники лучше создать два материала, использующих одну
текстуру, но один с альфа-каналом, другой без такового.
Далее, нажимаем кнопку напротив слова «Material:», как показано на
рисунке 5.

Рисунок 5.

Во вновь открывшемся Material/Map Browser на этот раз выбираем


строку Standart. Разделе Blinn Basic Parameters материала жмем кнопку, как
показано на рисунке 6. В появившемся списке выбираем Bitmap (рисунок).
Появляется диалоговое окно, позволяющее указать путь к основной текстуре и
выбрать ее.

Рисунок 6.
9

Для наложения бликовых текстур (specular) и бампа (bump) необходимо


иметь соответствующие изображения. О создании таких изображений речь
пойдет ниже в п.2. Для того чтобы добавить их к материалу, возвращаемся к
материалу Material #N (который Standart, не EclipseMtl) и переходим в раздел
Maps, выставляем галочки напротив Specular Level (не Specular Color!) и Bump.
Значение Amount определяет силу эффекта и выставляется произвольно. Далее
нажимаем кнопочки напротив материалов (см. рис. 7) и выбираем Bitmap из
списка так же, как делали выше, назначаем текстуры бампа и бликов.
Теперь созданный материал нужно применить к корпусу. Есть несколько
путей добавления материала объекту, самый простой из которых – простое
перетаскивание материала на объект мышкой.
Наложение текстур осуществляется с помощью модификатора Unwrap
UVW, который можно добавить объекту во вкладке Modify (Изменение), окно
Modifier List (Список модификаторов) как к объекту целиком, так и к
отдельным полигонам/поверхностям объекта. Подробнее на наложении
текстуры мы останавливаться не будем.
Настало время для первого пробного экспорта.

Рисунок 7.
10

1.7 Экспорт модели

Как настроить плагин при первом экспорте см. в документе


readme_rus.htm к официальному плагину. Для последующих операций
экспорта используются те же настройки, что и для первой.
Для экспорта модели нажимаем File/Export…, далее выбираем тип файла
MDL Scene Export (*.MDL), вводим имя файла и нажимаем OK. Модель будет
сохранена в папке по адресу, прописанному в параметрах базиса, например
entity/-vehicle/tank_light/pz38t. В этой папке будут находится файлы с
расширениями:
.ply – файлы, содержащие полигональные виды костей
.vol – файлы, содержащие сложные виды волумов (простые это боксы,
цилиндры и т.д.), если таковой был создан (как правило, создается для башен
или корпусов), объемов взаимодействия
.mtl – файлы с параметрами материалов
.mdl – файл, описывающий иерархию и структуру модели. Начинающим
особо рекомендуется изучить принцип построения данного файла, используя
собственноручно экспортированный, сравнивая с любым, созданным
разработчиками игры
.def – файл, определяющий набор свойств сущности (техники, предметов
и т.д.) такие как тип шасси, вооружение, скорость передвижения, экипаж, вес и
т.д. Также рекомендуется к изучению начинающими
.dds или .bmp – файлы текстур
anim.txt – файл-таблица анимации. Нужен для проверки правильности
создания анимации, если возникли какие-то трудности. Может быть удален без
каких либо последствий
Нас интересует файл имямодели.def. При экспорте создается простая
версия файла дэф. Его необходимо отредактировать. Пока модель
представляет собой корпус и набросок шасси с волумами траков, в файл дэф
можно добавить описание свойств шасси и самой сущности модели. К
примеру для танка pz38t дэф файл будет выглядеть так:
{Entity
(include "/properties/tank.ext")
(include "/properties/shadow/tank.inc" scale(1.0))
(include "/properties/selection/vehicle.inc" scale(1.2))

{mass 9500}
{Chassis
("tank_trace" fx("tracks_sm") step(0.3) len(0.73))
{Locomotion ("locomotion")
{MaxSpeed 20}
}
}
{Extension "pz38t.mdl"}
}
11

На начальном этапе, пока у модели не имеется ни волумов корпуса, ни


башни, ни хелперов прицелов (Foresight) или визоров, все соответствующие
параметры (sensor, weapon, armor) необходимо убрать. Иначе при загрузке
карты с моделью придет дядя Арни. В последствии, при создании данных
костей в файл дэф можно (и нужно) будет добавить параметры брони, оружие,
визоры и т.д.

1.8 Создание вращающихся костей

Когда с масштабом модели определились, можно приступать к основной


работе.
При создании башни танка, нужно таким образом ориентировать pivot
башни, чтобы ось Z башни была направлена вверх от корпуса. В параметрах
башни указываем:
Poly
ID=turret – компонент turret (башня)
Animation=repair,turret_r,155-180,turret_r,60 – анимация при починке
башни
IKSpeed=0.01 – скорость вращения кости, т.е. башни
Чтобы сделать башню вращающейся, переходим на уже знакомую
вкладку Hierarchy, нажимаем кнопку IK (инверсная кинематика). Выставляем
галочки в разделе Object Parameters как показано на рисунке 8, тем самым,
давая понять плагину, что кость будет вращаться. При экспорте эта кость
будет записана в .mdl файле не просто как кость bone, а как bone revolute.
Рекомендуется проверять визуально после экспорта в .mdl файле те кости, что
должны вращаться, на предмет корректного объявления кости как bone
revolute. В случае несоответствия – проверяем в 3DSMAX правильность
выставленных галочек.

Рисунок 8.
12

Прилинковываем башню к корпусу.


Теперь создаем маску пушки. Имя для этой кости используется обычно
gun_rot. Ориентируется кость таким образом, чтобы ось Z находилась в
горизонтальной плоскости, параллельно оси Y общей системы координат, что
обеспечит пушке подвижность в вертикальной плоскости, т.е.
подъем/опускание. Делаем кость вращающейся, как было указано выше. В
параметрах прописываем:
Poly
ID=gun – компонент gun (орудие)
IKSpeed=0.01
IKMin=-10 – минимальный угол отклонения
IKMax=25 – максимальный угол отклонения
Минимальный и максимальный углы определяют сектор вращения
кости.
Прилинковываем маску пушки к башне.
Создаем саму пушку. Ее делать вращающейся не надо. В параметрах
прописываем:
Poly
ID=gun
Прилинковываем пушку к маске пушки. Обратите внимание на
иерархию модели.
Теперь, для того, чтобы можно было прописать танку оружие и пушка
могла стрелять в игре необходимо добавить кость прицела (Foresight). Идем на
вкладку Create, в раздел Helpers и выбираем объект Point (точка). Выставляем в
параметрах объекта в меню справа галочку напротив Cross (крест) и задаем
размер креста. Обычно хватает 0.2-0.3 метра. Хелпер типа крест проще
ориентировать, т.к. сразу видно его расположение. Создаем напротив дульного
среза пушки кость с именем Foresight1 и ориентируем таким образом, чтобы
ось X хелпера была направлена от пушки.

Примечание 3. Для остальных подобных хелперов ось X означает


направление выпуска эффекта, такого, как вылет снаряда, выпуск дыма,
направление света или огня, прорисовка следов от траков и т.д.

Прицел линкуем к пушке. Теперь в файле дэф модели можно прописать


параметры основного орудия танка. Если параметры орудия заданы и иерархия
модели была сделана правильно, у модели появится возможность стрелять из
пушки, а также башня будет вращаться за прицелом. Если нет прицела, башня
вращаться не будет.
Примечание 4. Рекомендуется самостоятельное ознакомление
читателя с принципами действия инверсной кинематики с целью прояснения
вышеприведенного эффекта.
В таком случае нужно проверить правильность задания параметров
орудия, а также имени прицела. Для основного орудия имя должно быть
обязательно Foresight1 (Foresight3, Foresight4… – это для дополнительного
оружия типа пулеметов, Foresight2 для техники не используется). Если прицел
13

есть, а вращения башни нет – нужно проверить правильность параметров


вращения башни. То же и для маски пушки. Орудие должно наводиться по
горизонтали поворотом башни, а по вертикали подъемом/склонением маски
пушки.
Теперь можно вернуться к шасси танка. Ведущие колеса и ленивцы
танка, а также опорные катки делаются вращающимися так же, как и башня
танка или маска пушки. Разница заключается в том, что для колес не нужно
прописывать в параметрах скорость и пределы вращения. Скорость вращения
колес задается параметром Wheelradius в базисе модели или параметром
Radius индивидуально для каждого колеса, если его радиус существенно
отличается от остальных. В случае, если после экспорта модели при проверке
ее в игре колеса вертятся в сторону обратную от запланированной, необходимо
поменять ориентацию pivot (см. п. 1.3) таким образом, чтобы ось Z, как ось
вращения, изменила направление на противоположное первоначальному.
Ведущие колеса и ленивцы линкуются к корпусу, опорные катки к
костям подвески wheelR и wheelL. Параметры для всех колес Poly и
ID=trackright или ID=trackleft, в зависимости от стороны и не зависимо от
кости, к которой линуются.

1.9 Создание траков

Самый простой способ изготовления траков, это создание лофт (loft)


объекта. С принципами создания и использования лофт объекта можно
ознакомиться тут:
http://www.williamspublishing.com/PDF/5-8459-0825-6/part.pdf
Для начала нужно создать путь. Он же будет являться контуром
будущего трака. Идем на вкладку Create в раздел Shapes (см. рис. 9). Из списка
сплайнов выбираем Line (линию). Далее тыкая в рабочем окне, расставляем
ключевые точки трака по контуру. Замыкаем контур, тыкая в самую первую
точку в фигуре и на запрос о Вашем желании замкнуть контур, отвечаем «Да».
Теперь очередь за сечением трака. Выбираем объект Rectangle
(прямоугольник) и создаем прямоугольник сечения. Теперь создаем лофт
объект.

Рисунок 9.
14

Выделяем линию-путь и идем на вкладку Create в раздел Geometry. Из


списка классов объектов выбираем Compound Objects (см. рис.10).

Рисунок 10.

Создаем объект Loft. В свитке Creation Method нажимаем кнопку Get


Shape (см. рис. 11) и щелкаем на том прямоугольнике, что был за сечение.
Созданный объект будет похож на трак.

Рисунок 11.

Остается во вкладке Modify поиграть с параметрами прямоугольника


сечения для получения желаемой формы. Для этого в окне модификатора
нужно войти в режим редактирования лофт объекта, далее войти в подпункт
Shape и щелкнуть на одном из прямоугольников сечения в лофт объекте. В
15

окне параметров появятся пункты Length, Width и Corner Radius,


соответственно длина, ширина и радиус угла (для закругления). Выйти из
режима редактирования Shape до уровня Loft. В свитке Skin Parameters
выставить параметры Shape Step (шаг формы) и Path Step (шаг пути) в нуль.
Тем самым добивается единичная сегментированность объекта.
Создаем материал для траков, аналогичный созданному ранее для
корпуса и остальных деталей, называем его track#1. Материал должен
использовать 1 битную альфу и не иметь текстур бликов и бампа.
Накладываем полученный материал на трак. Теперь, НЕ применяя
модификаторов наложения текстур (типа Unwrap UVW), с помощью счетчика
Tiling меню Coordinates в Material Editor для материала траков, добиваемся
нужного шага текстуры на траке, чтобы длина и ширина отдельного элемента
трака были нужного размера. Альтернативный способ настройки текстуры
трака – изменение аналогичных параметров в свитке Surface Parameters (см.
рис. 11) в секции Mapping самого лофт объекта, счетчиками Length Repeat и
Width Repeat. В данном случае мы подстраиваем параметры маппинга под
текстуру, а не наоборот, как предыдущим способом, что даже лучше.
Только после этого к объекту можно применять модификатор наложения
текстур. Также можно использовать модификатор типа Editable Mesh для
создания штырей траков. Это можно сделать скопировав боковую поверхность
трака. Лофт объект конвертировать не надо, т.к. он прекрасно воспринимается
движком игры и в дальнейшем очень легко редактируется (параметры Line и
Shape).
Готовой объект копируем на другую сторону танка и получившимся
тракам присваиваем имена trackR и trackL, не забываем про параметры Poly и
ID=trackright и ID=trackleft. Линкуем к костям wheelsR и wheelsL.
Теперь на готовый трак накладываем модификатор Skin. Заходим в
режим редактирования Skin-> Envelope. Нажимаем кнопку Add, позволяющую
добавить контрольную кость, с перемещением которой будет двигаться и
модель трака. Из предоставленного списка выбираем body.
В свитке Parameters в секции Select ставим галку напротив слова Vertices
(вершины). Теперь нужно выделить вершины трака (точки, проще говоря), что
находятся в нижней его части, которая касается земли (уровень земли - ноль по
оси Z). Не снимая выделения с вершин, нажимаем правую клавишу мыши и в
появившемся окне выбора опций жмем в пункт Weight Table Dialog. Появится
таблица распределения весов. В левой нижней части устанавливаем фильтр
Selected vertices, как показано на рисунке 12, в результате чего в таблице
останутся только выделенные вершины трака.
16

Рисунок 12.

Далее для всех строк в таблице ставим крестик в столбце M, который на


рисунке 12 помечен стрелкой. Закрываем диалоговое окно, выходим из
режимов редактирования Envelope и Skin. Выделяем корпус (body –
контрольная кость для модификатора Skin) и пробуем его немного подвигать.
Если все было сделано правильно, то вместе с корпусом в пространстве будут
двигаться ведущие колеса и ленивцы, а также верхние части траков, как бы
растягиваясь вслед за ведущими колесами. Получился эффект, будто трак
действительно лежит на ведущем колесе и ленивце (хотя траки прилинкованы
в шасси), а опорные катки как бы прижимают нижнюю часть трака к земле.
Остается посмотреть результат в игре. Если траки при движении будут
вращаться в обратную сторону, идем в Material Editor в материал траков, в те
же параметры, где изменяли Tiling материала траков, и меняем по очереди
параметры U, V и W с 0 на 180 (обычно нужная координата U). Если параметр
был изменен верный, то трак должен будет начать крутиться в правильную же
сторону. При этом не должно быть перекоса текстуры.
На этом изготовление траков закончено.

1.10 Создание анимации

Рассмотрим создание анимации на примере анимации старта Start. Для


начала обратим наш взор в правый нижний угол редактора. Нажимаем кнопку
Time Configuration, что отмечена на рисунке 13.
17

Рисунок 13.

Поскольку 30 стандартных кадров для анимации, выставленных по-


умолчанию, может не хватить, в открывшемся окне счетчиком выставляем
количество кадров с запасом, как показано на рисунке 14. Нажимаем ОК.

Рисунок 14.

Теперь выделяем базис и заходим в его параметры. Находим строку,


определяющую отрезок кадров для анимации старта: Animation=start,body,10-
50,60. Т.е. для анимации старта будут использоваться кадры анимации с 10-го
по 50-й для группы анимации body. Нужно определить эту самую группу body.
18

Идем в пункт Edit менюбара и жмем на пункте Edit Named Selection Sets.
Появляется окно редактора групп. Остается создать там группу body и
добавить к ней кость body. Аналогично создаются остальные группы (см. рис.
15).

Рисунок 15.

В нижней части редактора можно увидеть ползунок и шкалу кадров


анимации. Нас интересует 10 кадр, т.к. он является начальным в анимации
старта. Выставляем ползунок на 10-й кадр, как это показано на рисунке 16.

Рисунок 16.

Выделяем кость корпуса (если не выделена или выделение сбросилось).

Нажимаем кнопку Set Keys , которая создаст первый кадр анимации и


зафиксирует начальное положение кости корпуса. Затем переводим ползунок
на 50-й кадр и опять нажимаем кнопку Set Keys, тем самым, создавая
конечный кадр. Можно воспользоваться копированием (зажав Shift просто
перетащить копию кадра на нужное место).
Примечание 5. Важно всегда создавать начальный и конечный
(конечный в некоторых случаях создавать не нужно, например при анимации
открытия люка) кадры при исходном положении кости, т.к. тогда не будет
«скачков» модели (кости) при проигрывании разных видов анимации
последовательно.
19

Теперь перемещаем ползунок в промежуток между 10-м и 50-м кадрами


в любое место в передней части отрезка, например на 20-й кадр. Нажимаем
переключатель Auto Key справа от кнопки Set Keys. При активации режима
автозаписи кадра, полоска под ползунком станет красной. Теперь кадр будет
записываться на отрезке каждый раз, как нами будет меняться положение
кости. Выбираем инструмент перемещения и смещаем немного корпус вниз по
оси Z. Затем инструментом поворота слегка наклоняем корпус назад, имитируя
наклон корпуса при старте танка. При изменении положения корпуса на шкале
анимации под ползунком должна появиться отметка. Кадр записан.
Перемещаем ползунок вперед на несколько кадров. Теперь переместим корпус
слегка вверх, как бы реакция подвески на стартовое проседание –
выталкивание танка вверх. Кадр записался. Переместив ползунок еще вперед,
опять перемещаем корпус слегка вниз. И так несколько раз, создавая эффект
затухающих покачиваний после старта танка. Далее выходим из режима
автозаписи кадров и, прокручивая ползунок вперед-назад, смотрим результат
работы. При необходимости ключевые кадры анимации можно перемещать
вдоль шкалы, пытаясь добиться максимально реалистичного результата.
Записывать каждый кадр вручную нет необходимости. Достаточно лишь
указать ключевые точки, «точки перегиба». Редактор сам сгенерирует
положения костей в промежуточных кадрах, сделав это максимально плавно.
Если не устраивает скорость изменения положения, можно самому задать
амплитуду и кривую движения кости в редакторе кривых Mini Curve Editor.
В конечном итоге должно получиться что-то вроде картинки, показанной
на рисунке 17.

Рисунок 17.

Теперь экспортируем и смотрим в игре результаты. Если все правильно,


танк при начале движения начнет наклоняться.
Последняя цифра в параметрах анимации Animation=start,body,10-50,60
означает скорость проигрывания анимации. Подбираем оптимальную скорость
(определяется опытным путем, изменяется от 0 до 100%).
Остальная анимация создается аналогично.
Вид мэшевой анимации (анимация вершин) создается примерно также. В
параметрах кости вместо Poly прописывается CommonMesh, далее выделяются
нужные вершины и так же изменяется их положение в пространстве с запись
этого положения в кадр.

1.11 Дополнительные кости

Дополнительные кости – кости визоров, прицелов, дымовых эффектов.


Как правило являются простейшими объектами пойнтами. При создании
пойнтов ознакомьтесь с примечанием 3 пункта 1.8.
20

Список минимально необходимых для модели дополнительных костей:


Foresight3, Foresight4 и т.д. – пойнты прицелов, для каждого
дополнительного вооружения должен быть свой прицел, линкуются к кости
оружия;
visor1 – главный визор танка, линкуется к башне либо к маске пушки;
visor2 – визор механика-водителя, линкуется к корпусу;
fxsmoke1 и fxsmoke2 – эффекты выхлопа двигателя, линкуются к
корпусу;
fxfire1 и fxfire2 – эффекты огня при возгорании танка, линкуются к
корпусу, один у мотора, другой под башней;
fxfire3 – эффект пламени из люка, линкуется в башне под основным
люком;
FXtraceR1 и FXtraceL1 – эффекты следов колес или траков, линкуются к
шасси;
FXtraceR2 и FXtraceL2 – эффекты выброса грязи с траков или колес,
линкуются к шасси.

1.12 Создание волумов

Волум – объект взаимодействия в игре. Определяет физическую область


занимаемого моделью пространства и ее физическую форму. Для создания
волумов нужно исходить из нескольких простых правил.
1) Волум не обязательно должен точно повторять компонента модели, к
которому прилинкован. Достаточно более-менее приблизительного совпадения
граней. Слишком подробный волум будет съедать большое количество
машиноресурсов, а слишком грубый не будет правильно отображать
геометрические параметры объекта.
2) Волум должен быть выпуклым. Т.е. любой отрезок, проведенный
между двумя любыми точками волума, должен лежать ВНУТРИ волума (если
отрезок в плоскости грани – это тоже считается как внутри). Объясняя на
пальцах, можно сказать, что в волуме, если взять два любых соседних
граничащих треугольника, угол между этими треугольниками по границе не
должен быть обращен внутрь волума. При создании волумов часто возникает
ситуация, когда угол между треугольниками почти равен нулю. Можно
попробовать удалить спорный участок (прилежащие треугольники), а затем
произвести экспорт модели. Если при экспорте плагин не выдал ошибок
выпуклости волума (Non convex), тогда причина была именно в этом участке.
Далее можно пробовать разные варианты создания спорной грани
(треугольников) до получения правильного результата.
После создания правильной формы волума, конвертируем его в объект
типа Editable Poly, заходим в режим редактирования полигонов Polygon,
выделяем все грани, которые относятся, например, к лобовой части, и
назначаем в свитке Polygon Properties счетчиком Set ID индекс 1. Таким
образом, игра будет понимать, что данная область является лобовой частью
модели и, при назначении параметров бронирования, присвоит значение
21

именно как для лобовой поверхности. Остальные грани индексируются


согласно схеме, приведенной на рисунке 18.

Рисунок 18.

2 Создание изображений бликов и бампа

2.1 Создание изображения бликов

Создается для материала Specular level. Обычно присваивается имя как и


у основной текстуры модели, но с добавлением суффикса _sp. Создается
следующим образом. Берем копию оригинальной текстуры. Делаем ее черно-
белой, выбрав в менюбар программы Photoshop пункт:

Image => Adjustments => Desaturate (Shift+Ctrl+U).

Далее выставляем в нужных пропорциях яркость и контраст:

Image => Adjustments => Brightness/Contrast...

Сохраняем в формате .dds с настройками:

DXT1 RGB (No alpha), Generate MIP maps.


22

2.2 Создание изображения бампа

Создается для материала Bump. Присваивается имя с суффиксом _bp.


Берем копию оригинальной текстуры. Задача - сделать изображение выпуклых
или вдавленных частей на модели (текстуре). При этом считается, что более
темный цвет означает углубление, а более светлый выпуклость относительно
общего уровня. Чем больше контраст цветов, тем эффект объема будет ярче
выражен. Можно использовать схему белый-серый-черный. Таким образом,
раскрашиваем оригинальную текстуру в основном в серый цвет, где
выпуклости будут нарисованы белым точно по границе объекта, а углубления
– черным. После окончания работы делаем полные копии в два других слоя
(Layers), называем один слой alpha, другой bump, чтобы потом не было
путаницы. Выделяем слой bump. Переходим на вкладку каналов (Chanels).
Выбираем канал Red и закрашиваем полностью черным цветом.
В канале Blue нужно добиться серых контуров нужных деталей на белом
фоне. Этого можно достичь с помощью инструмента инверсии цвета, к
примеру:

Image => Adjustments => Invert

При необходимости, можно использовать инструмент яркость/Контраст:

Image => Adjustments => Brightness/Contrast...

Теперь выбираем канал Green, картинка на котором должна быть серого


цвета, поэтому к изображению канала применяем фильтр:

Filter => Stylize => Emboss...

Настройки фильтра следующие:

Angle = 90 - угол падения света

Height = 2 pixels, меньше будет меньше рельефность, больше - тоже не


очень хорошо

Amount = 100...130%, в зависимости от желаемого результата

Получилось изображение, имитирующее плоскую поверхность с


впадинами и выпуклостями и падающим сверху от изображения светом.
Теперь переходим обратно к слоям. Выбираем слой alpha и также к нему
применяем фильтр:

Filter => Stylize => Emboss...


23

Настройки на этот раз немного отличаются:

Angle = 180

Height = 2 pixels

Amount = 100...160%

Далее альфу на время делаем невидимой.

Бамп-слою применяем тот же фильтр:

Filter => Stylize => Emboss...

Должно получится такое же изображение, как и для канала Green слоя


bump, только свет падает как бы справа от изображения.
Далее делаем невидимым слой bump, а alpha слой, наоборот, видимым.
Копируем изображение слоя alpha в буфер обмена и опять идем на вкладку
каналов. Переходим на канал alpha и вставляем изображение из буфера
обмена.
Возвращаемся во вкладку слоев, делаем невидимым слой альфа и
видимым готовый слой бампа и сохраняем картинку с настройками:

DXT3 RGB (Explicit Alpha), Generate MIP maps.

Заключение

При создании данного руководства использовались материалы и помощь


разработчиков серии игр «В тылу врага 2» и «В тылу врага 2 Братья по
оружию» Skael и Трудяга. Цель работы достигнута, танк создан.
Данный материал не претендует на «истину в последней инстанции».
Как говаривали древние: «Errare humanum est».