Blender Basics 4-rd edition/Chapter 21- Game Engine Basics (real-time animation) — Blender3D

# Blender Basics 4-rd edition/Chapter 21- Game Engine Basics (real-time animation)

### Материал из Blender3D.

[править]

# Глава 21: Основы использования Игрового Движка

Автор: James Chronister
Перевод: Азовцев Юрий aka gumanoed

Как создать 3D-игру с помощью Blender? Как можно использовать физический движок Blender для создания анимации? Вы пытались создать реалистичный эффект падения домино в Blender используя лишь традиционные ключи анимации? Это будет очень трудной задачей. Используя возможности инструментов реального времени в Blender вы получите гораздо более качественный результат за меньшее время. В одном из самых кассовых фильмов прошлого года "2012" для создания реалистичных падающих и разрушающихся зданий, летящего мусора использовался физический движок Bullet. И именно Bullet используется в Blender для создания эффектов и расчетов взаимодействия объектов в реальном времени. Игровой движок Blender использует язык программирования Python. Можете ли вы создавать отличные игры без знания Python? Определенно "Да", но если вы захотите достичь более профессионального уровня, знание Python будет необходимо. В Интернет есть большое количество хорошей документации для изучения Python.

[править]

## Настройки физического движка

Давайте для примера создадим реалистичную анимацию падения шара с помощью физического движка. Первое что для этого нужно будет сделать - создать сцену. Для этого примера я создал простую сцену с UV-Сферой в 4 юнитах над Плоскостью. Помните, что в этой сцене будет гравитация и взаимодействие между объектами. Поэтому объекты должны располагаться как в реальной жизни, плоско из вида спереди, относительно глобальных осей координат.

Теперь мы можем можем включить анимацию реального времени. Когда я первый раз посмотрел на Blender 2.6 я не мог понять как и где сделать объект действующим лицом анимации (actor), так сильно изменился интерфейс! Вот что вам нужно будет для этого сделать:

| Для включения Игрового Движка Blender обратите внимание на панель в верхней части окна Blender и найдите выпадающее меню с выбором Движка Рендера. По умолчанию здесь будет значение "Blender Render", измените его на "Blender Game". После этого изменится набор параметров во многих раздела Окна Свойств, дав доступ к параметрам настройки игрового движка. Нас будут интересовать параметры в 3-х из них:

[править]

### Раздел Physics:

В разделе Physics вы управляете Объектами-Актерами (Actors) вашей анимации реального времени. По умолчанию все объекты Статичны ("Static"), что означает что они не взаимодействуют с параметрами физического движка. Они могут выполнять действия, назначаемые им с помощью логических блоков, но ничего более. Два других типа - "Dinamic" и "Rigid Body" мы рассмотрим чуть позже. С помощью опции "Invisible" вы можете сделать какие то из объектов невидимыми.

Два других важных параметра в этом разделе это "Radius", который контролирует размер области взаимодействия вокруг объекта-актера, и "Collision Bounds", который позволяет задать форму области взаимодействия, отличную от шара. Все это мы более подробно рассмотрим чуть позже.

[править]

### Раздел Scene:

Наиболее важным параметром в этом разделе является "Gravity". По умолчанию этот параметр имеет значение соответствующее гравитации на земле. Но что если вы создаете сцену в космосе где гравитация не имеет значения? Тогда вам нужно будет установить этот параметр в значение 0.000 либо близкое к нему. Возможно вы захотите создать игру, где объекты будут притягиваться к чему то по оси X, эти параметры так же нужно будет настроить здесь. |

[править]

### Раздел Render:

Как и при выполнении рендера изображения, именно здесь вы включаете игровой движок. Вы можете нажать на кнопку "Start" или использовать клавишу "P".

Конечным результатом создания игры, обычно, является создание standalone-приложения (приложения, не зависящего от Blender). Это потребует сохранить сцену, как независимое приложение, способное запускать само себя. Здесь вы можете настроить параметры запуска такого приложения: размер окна игры, глубину цвета, скорость игры в кадрах в секунду и эффекты при переходе в полноэкранный режим.

Поскольку в играх очень активно используются звуковые эффекты здесь присутствуют параметры воспроизведения звуков во время игры.

Теперь самое время назначить физические параметры для сферы. Но сначала давайте добавим в сцену Конус. Конус выступит в роди дефлектора, что бы падение шара было более сложным и интересным. Переключитесь в режим сплошного затенения и выберите UV-Сферу. Слегка поверните ваш вид что бы вы могли видеть что будет происходить при назначении физических параметров объектам. Мы хотим увидеть как шар будет падать и ударяться об объекты. Для этого перейдем в раздел Physics в Окне Свойств и сделаем некоторые настройки. |

| Измените тип физических расчетов для UV-Сферы на "Dynamic". Если вы переключитесь в каркасный (wireframe) режим отображения объектов и уменьшите размер сферы, то увидите небольшой пунктирный круг. Этот круг представляет собой активный размер объекта-актера и взаимодействия будут просчитываться в соответствии с этим размером. Вам нужно будет изменить параметр "Radius" для соответствия активной физической области размерам UV-Cферы. Если окружность будет больше Сферы, при запуске игрового движка Сфера зависнет над поверхностью и никогда ее не коснется.

| РобоЧувак Говорит: Игровой движок ожидает, что размер объекта-актера (его радиус) будет равен единице, чего в действительности практически никогда не происходит. Если вы уменьшите радиус объекта-актера и активной области, взаимодействия по прежнему могут работать не правильно. Использование команды Ctrl-"A" и сброс параметров Scale и Rotation обычно решают эту проблему.

Теперь давайте проверим созданную нами физическую систему. Переключите режим отображения объектов обратно в Сплошной (Solid). Наведите курсор мыши на окно 3D-вида и нажмите клавишу "P". Blender переключится в режим работы игрового движка. Шар должен начать падать и удариться о конус. Но взаимодействие будет не очень реалистичным. Если вы разместили Сферу точно над Конусом, то ваш шар, вероятно, будет отскакивать от его вершины! Если такое происходит, слега переместите Конус и запустите игровой движок еще раз. Теперь Шар ударяется о Конус и скользит вниз по его грани. Но при этом Шар не вращается, как это происходит в реальности. Для выхода из режима работы игрового движка нажмите клавишу "Esc". |

[править]

### Типы физических объектов Dynamic и Rigid Body:

Объект-актер типа Dynamic участвует в сцене как физический объект, может падать и отскакивать, реагирует на действие сил но не ведет себя как настоящее твердое тело (rigid body). Такого типа объекты хорошо подходят для игр, где вам нужно ехать или идти по лабиринту. Объекты же с типом Rigid Body будут вести себя как настоящие твердые предметы в реальном мире. Они будут вращаться и отклоняться при взаимодействии с другими объектами. Такие объекты пригодятся при создании игр, но более полезны при создании анимации разрушающейся кирпичной стены и отскакивающих объектов.

Давайте изменим тип физического объекта для UV-Сферы на "Rigid Body" и проверим получившийся результат, нажав клавишу "P". Теперь шар должен упасть и покатиться по плоскости, после чего свалиться в "ничто". Нажмите клавишу "Esc" для выхода из режима работы игрового движка. Попробуйте поэкспериментировать с таким параметром как Mass (Масса). Как и в реальном мире, при столкновении двух объектов разной массы, один будет испытывать на себе более мощный эффект чем другой. |

Не смотря на то, что мы изменили физический тип сферы на "Rigid Body" у нас по прежнему присутствует Радиус активной области объекта и расчет поведения объекта производится в соответствии со значением параметра Radius. Если вы удалите Сферу и вместо нее добавите Куб (назначив ему тип Rigid Body), он будет падать и катиться в точности как Шар. Для исправления такого поведения вам потребуется активировать панель "Collision Bounds" и выбрать тип границы. Тип "Box" отлично подойдет для кубического объекта, в то время как "Convex Hull" и "Triangle Mesh" подойдут для более сложных форм. Для определения лучшего типа для вашего объекта необходимо экспериментировать.

При просмотре вашей физической модели в действии вы можете заметить некоторые недочеты в поведении и взаимодействии объектов. Например, шар может слегка пробуксовывать либо наоборот проскальзывать. Он может слишком сильно отскакивать и слишком много вращаться в воздухе, либо наоборот, слишком мало. У нас есть два места где мы можем контролировать параметры влияющие на такое поведение. Первое - это раздел Physics. Здесь на панели Physics вы найдете блок Damping. Слайдер "Translation"
контролирует степень проскальзывания в направлении движения (подобно скольжению на льду), в то время как слайдер "Rotation" контролирует сопротивление вращению. Эти два параметра мы рассмотрим еще более подробно при разговоре о создании игры.

| Вторым местом, где расположены параметры влияющие на поведение объектов в игровом движке является раздел Materials. Добавьте материал для Сферы и найдите панель Physics с настройками физических параметров. Если вы хотите сделать что-то "прыгучим", увеличьте значение слайдера "Elasticity", параметр "Friction" будет контролировать степень трения либо степень проскальзывания объекта. Здесь вы так же можете применить силы и степень затухания. Для правильной работы этих параметров материалы следует накладывать на оба взаимодействующих объектов (например, Эластичность следует настраивать как на Сфере так и на Плоскости).

[править]

### Материалы для Игрового Движка:

Некоторые вещи, работающие при рендере, не будут работать в игровом движке, но некоторые работают в обоих случаях. Например, стандартная текстура-изображение будет работать и в игровом движке, но многие параметры ее настройки работать не будут. В последних версиях Blender над текстурами для игрового движка была проведена большая работы и мы с вами рассмотрим некоторые из нововведений чуть позже, в разделе об UV-развертках. Пока мы будем использовать стандартные цвета материала из панели Diffuse. Для того, что бы увидеть как ваши объекты будут выглядеть во время игры, переключите режим отображения объектов с "Solid" на "Textured".
Либо нажмите клавишу "P" и вы увидите как будут выглядеть объекты после сохранения игры. Следующая часть рассказывает об использовании игрового движка для получения анимаций. В рамках такого способа использования игрового движка вы можете работать с материалами как и раньше, конечная обработка изображения будет проводиться стандартным рендером.

[править]

## Использование игровой физики в анимации

У нас есть шар падающий на конус и катящийся по плоскости. Все отлично работает при нажатии клавиши "P". Но что, если вы хотите использовать такое поведение объектов в анимационном видео? Если вы сейчас нажмете Alt-"A" на экране ничего не будет происходить. Все потому, что взаимодействия и поведение объектов небыли записаны в кривые анимации ... пока небыли!

Запись игровой физики в кривые анимации очень простой процесс. Для записи разверните сверху меню "Game" и выберите опцию "Record Animation". Это включит функцию записи поведения объектов во время работы игрового движка. Теперь нажмите клавишу "P", дождитесь пока в сцене произойдет все что вам нужно, затем, нажмите клавишу Esc для выхода. Зайдите еще раз в меню "Game" и выключите опцию "Record Animation".
Поведение объектов было записано и теперь нам нужно работать с ними как с обычной анимацией. Для этого переключите режим рендера с "Game Engine" на "Blender Render" (так же на верхней панели в выпадающем меню).

| Давайте проверим записанную анимацию. Переключите режим организации рабочего пространства с "Default" на "Animation". Вы должны видеть кривые анимации в окне Редактора Кривых. Нажмите Alt-"A" для просмотра записанной анимации. Теперь вы можете работать с вашей сценой как с любой другой анимацией, включая настройки материалов и наложение текстур.

| РобоЧувак Говорит: Всегда отключайте опцию "Record Animation" после окончания записи поведения объектов в игровом движке. Если вы случайно забудете про нее и оставите включенной, при повторном нажатии клавиши "P" все ранее записанные кривые анимации будут переписаны заново!

Единственной проблемой такого способа создания анимаций объектов может стать скорость их движения. Обычно игровой движок просчитывает движения объектов с большой частотой кадров (FPS), и при воспроизведении на скорости 25 или 30 кадров в секунду движения кажутся очень медленными. Есть несколько способов исправить этот недочет:

Способ 1-й: Пересчитать тайминг в разделе Render. В Окне Свойств перейдите в раздел Render и на панели Dimensions найдите параметры "Old" и "New". Если вам нужно что бы видео воспроизводилось в два раза быстрее, установите параметр "New" в значение 50 (имеется ввиду 50%) и назначьте последний кадр анимации в два раза ближе к началу. Если же вам нужно замедлить анимацию, скажем в два раза, используйте для параметра "New" значение 200 и установите параметр конечного кадра анимации в два раза дальше от начала. |

| Способ 2-й: Масштабировать ключи анимации в окне Диаграммы Ключей. Другой метод - выделить все ключи анимации в окне Диаграммы Ключей (Dope Sheet) и масштабировать их по оси X (клавиша "S" и "X" - затем двигайте мышь вправо).

[править]

## Использование логических блоков

Мы с вами поговорили об использовании физического движка для создания анимации. И вот пришло время поговорить о создании Анимации Реального Времени, как например виртуальная прогулка по зданию и да, об играх.

[править]

### Создание сцены:

Создайте новую цену, добавьте в сцену Плоскость. Расположите ее так, что бы Куб располагался прямо на ней. Нажмите клавишу "N" и откройте Панель Трансформаций, измените масштаб Куба по оси X до значения 0.200. Мы используем этот объект как кусок стены. Выделите Плоскость и там же, в Панели Трансформации, измените масштаб по осям X и Y до значения 10.000. Это будет наш пол. |

Теперь добавьте в сцену UV-Сферу и перейдите в Режим Редактирования. Выделите только одну вершину из вида сверху, как показано на иллюстрации слева, и с помощью клавишу "G" вытяните ее вперед. Этот "Нос" будет определять направление "вперед" когда мы сделаем Сферу объектом-актером и будем управлять ее движением с помощью клавиш. Убедитесь, что Сфера находиться немного над Плоскостью и не касается ее.
Плотное расположение объектов может привести к коллизии при запуске игрового движка и объекты будут вести себя не так, как вы ожидаете.

Мы создали с вами основу сцены, добавили материалы каждому объекту и задали цвет на панели Diffuse для каждого из них. Сейчас у вас должно быть что то, напоминающее сцену на иллюстрации справа. |

[править]

### Настройка объекта-актера:

Пришло время сделать нашу Сферу объектом-актером с Динамическим просчетом физических взаимодействий. Начнем с переключения рендера с "Blender Render" на "Blender Game" (как это сделать было описано 2 страницы назад). В Окне Свойств перейдите в раздел Physics и для Сферы выберите тип "Dynamic". Для предотвращения слишком сильного скольжения и свободного вращения объекта мы изменим значение параметров Translation Dampening на 0.400 и Rotation Dampening на 0.900. Позже вы можете поэкспериментировать с этими параметрами. Пока используйте эти значения. Если значения этих параметров будут слишком низкими, вы заметите как ваш объект плывет после того, как вы уже отпустили кнопку. Эти же параметры можно настроить и с помощью материалов (параметр Friction - трение).

В нашем случае нет необходимости изменять значение параметра Radius, мы не изменяли размер Сферы. Но, если вы изменяете размер объекта-актера вам обязательно нужно проверить этот параметр. Так же не забывайте после изменения размера объекта нажать Ctrl-"A" для сброса параметров масштабирования и вращения.

Пришло время переключить рабочее пространства в режим работы с игровой логикой, сверху в выпадающем меню выберите режим "Game Logic". |

[править]

### Работа с логическими блоками:

Теперь, когда вы переключились в режим организации рабочего пространства "Game Logick" вы видите эти самые Логические Блоки внизу окна Blender. Логические блоки организуются по принципу "Вход-Процесс-Выход", но называются "Сенсоры-Контроллеры-Актуаторы". В логических блоках вы так же увидите поля для добавления Свойств (Property).

Здесь доступно большое количество различных типов сенсоров, контроллеров и актуаторов, которые вы можете использовать. Мы будем говорить лишь о части из них. Об остальных вы можете найти информацию в интернете, включая описания создания реальных игр. Давайте начнем! Добавим сенсор "Keyboard", контроллер "And" и актуатор "Motion".

Теперь соедините блоки между собой, захватив ЛКМ точку выхода одного блока перемещайте курсор мыши к точке входа другого блока. Разместив курсор над точкой входа другого блока отпустите ЛКМ. Связь будет создана и вы увидите соединительную линию. Для удаления связи выполните это действие в обратном порядке (захватите точку входа второго блока и переместите курсор к точку выхода первого).

Первое что нам нужно сделать - научить Сферу двигаться вперед при нажатии на клавиатуре клавиши "стрелка вверх". Для этого щелкните ЛКМ в пустом поле, рядом со словом Key. В поле появится надпись "Press a key" и Blender будет ожидать нажатия вами нужно для управления объектом клавиши. Нажмите на клавиатуре клавишу "стрелка вверх". В поле появится соответствующая информация. Здесь есть и другие параметры, но сейчас они нам не нужны. |

Думайте о Контроллере как о процессоре компьютера. По умолчанию мы выбираем тип "And", что при подключении нескольких сенсоров к этому контроллеру будет запускать актуатор только при срабатывании сразу всех подключенных сенсоров. Для другой логики работы доступны другие типы контроллеров.

Актуатор Motion работает как для динамических так и для статических объектов. Когда вы управляете Статическим объектом, вам потребуется использовать параметры Loc и Rot, которые задают шаг движения или вращения. Не используйте параметры Loc и Rot для Динамических объектов!. Если вы используете эти параметры для динамического объекта, он будет проходить сквозь стены, что нам совершенно не нужно. Думайте о динамических объектах как об объектах из реального мира. Что бы такой объект начал двигаться, его нужно толкнуть (приложить Силу - Force) или закрутить (Torque). В блоке актуатора Motion вы увидите блоки для каждого из этих параметров со значениями по осям X, Y и Z. В нашем случае давайте установи Force Y в значение 5.00. Нажмите клавишу "P" и проверьте получившийся результат. Теперь при нажатии на клавишу "стрелка вверх" ваша Сфера должна двигаться вперед. Если скорость движения слишком большая - уменьшите значение параметра "Force Y". Если сфера двигается в обратном направлении - используйте отрицательно значение этого параметра. Если же объект двигается в неправильном направлении, например вбок, попробуйте вместо Force Y использовать силу по оси X. Здесь же вы можете настроить параметр Dampening для более быстрого либо более медленного затухания движения (подобно силе трения). |

Мы научили сферу двигаться вперед. Теперь добавьте еще ряд сенсоров, контроллеров и актуаторов для управления движением сферы назад. Все что понадобилось сделать мне, в отличии от настройки предыдущего актуатора - задать Силу по оси Y равной -5.00. Для получения поворота объекта, нам понадобиться приложить к нему Силу Вращения - Torque по оси Z. Силы вращения (Torque) по оси Z величиной 1.00 должно быть достаточно. Сейчас у вас должно быть три линии логических блоков, управляющих движением Сферы вперед, назад, влево и вправо.

Хорошей привычкой будет давать осмысленные названия сенсорам. В дальнейшем, при более сложной логике у вас может быть большое их количество и осмысленные имена помогут проще понимать за что они отвечают. Для экономии рабочего пространства вы можете сворачивать логические блоки, щелкая по небольшому треугольнику в левом верхнем углу. |

| РобоЧувак Спрашивает: У меня проблема с объектом. Он странно перекатывается при движении вперед. Что делать? Попробуйте перейти в раздел Materials в Окне Свойств и уменьшить параметр Friction для материала Сферы или Плоскости. Если ваш объект вращается при соударении со стеной, проделайте то же самое для материала стены.

Система ваших логических блоков должна быть похожа, на приведенную ниже:

Давайте добавим "Прыжок" по нажатию на клавишу пробел. Так как мы хотим создать прыжок, а не полет на ракетном двигателе, нам следует соединить с Контроллером 2 Сенсора. Один сенсор - "Keyboard", как мы уже делали. Вторым сенсором будет "Collision" с настроенным параметром Property (Свойство).

| Выберите Плоскость-Пол и добавьте для нее новое Свойство нажатием кнопки "Add Game property" слева от области с логическими блоками. Дайте этому свойству имя "floor". Все имена свойств чувствительны к регистру букв, поэтому следите, начинаете вы слово с большой или малой буквы.

Теперь снова выделите Сферу и добавьте для нее еще один набор блоков Сенсор-Контроллер-Актуатор. Выберите тип Сенсора - "Keyboard" и назначьте ему слежение за клавишей Пробел. установите для Контроллера тип "And", для Актуатора тип "Motion". В блоке актуатора задайте Силу по оси Z равной 100. Так как сила будет прилагаться к объекту только в момент его нахождения на полу, значение этой силы должно бы достаточно большим. Теперь нам нужно добавить еще один Сенсор с типом "Collision".
В блоке Property этого сенсора наберите "floor". Свяжите этот сенсор с тем же контроллером, с которым связан сенсор следящий за клавишей "Пробел". Так как контроллер у нас имеет тип And сила прыжка будет прикладываться только при одновременном Положительном состоянии обоих сенсоров.

[править]

### Использование анимации в Играх:

Мы научились создавать и управлять движением объектов и игре, давайте научимся добавлять анимации. Пусть Куб ведет себя как поднимающаяся вертикально дверь при приближении к нему нашей Сферы. Сначала нам нужно создать несколько ключей анимации для Куба. Выделите Куб и находясь в 1-м кадре нажмите клавишу "I" и добавьте ключ анимации типа Location. Перейдите в 60-й кадр и поднимите Куб вертикально вверх, что бы наша Сфера могла пройти под ним, и еще раз нажмите клавишу "I" для добавления второго ключа анимации тоже типа Location. На время создания этой анимации вы можете переключиться в режим "Animation" или "Default", если вам так более удобно работать. |

| После завершения создания анимации поднимающейся двери вернитесь обратно в режим организации окон "Game". Выберите Сферу и добавьте для нее Свойство (кнопка "Add Game Property" в окне Логических Блоков). Дайте ему имя "player".

Выберите Куб еще раз и добавьте для него набор блоков Сенсор-Сонтроллер-Актуатор. На этот раз сенсор будет типа "Near", контроллер типа "And", а актуатор типа "F-Curve". Соедините и настройте их как показано на иллюстрации ниже:

- Distance-Reset: Дистанция, на которой произойдет срабатывание триггера. Reset-Distance обычно устанавливается в значение больше значения Distance и определяет на каком удалении объекта произойдет сброс тригера.
- Start-End Frames: Определяет с какого по какой кадр будет воспроизводиться анимация при срабатывании триггера.

Когда объект-актер со свойством "player" приблизится на Дистанцию указанную в настройках сенсора, произойдет срабатывание актуатора. Актуатор F-Curve предоставляет несколько опций воспроизведения анимации: Play - воспроизвести один раз и остановиться; Ping-Pong - воспроизводить от начального до конечного кадра, затем в обратном порядке; Flipper - воспроизвести анимация, затем остановиться, при срабатывании Reset, воспроизвести анимацию в обратном порядке; Loop - воспроизводить анимацию постоянно, пока работает триггер.

Это лишь самые основы использования Игрового Движка Blender. Практикуясь, экспериментируя и используя дополнительные уроки и информацию вы сможете создавать потрясающие игры. Игра всегда происходит в виде из камеры, поэтому располагайте камеру удобным образом либо связывайте камеру с объектом-актером как Потомка-Родителя. Когда вы закончите все настройки логики игры и внешнего вида объектов вы можете сохранить игру как отдельное приложение, которое будет запускаться само по себе, не требуя установки Blender. Для этого в меню File откройте окно User Preferences зайдите в закладку Add-Ons и в разделе Game Engine активируйте плагин "Game Engine: Save as Runtime". Теперь через меню "File-Export" вам будет доступна опция сохранения игры в качестве отдельного приложения (Save as Runtime).

| РобоЧувак Говорит: Когда создаете объекты для игры, старайтесь использовать как можно меньше граней. Игровому Движку приходиться обрабатывать и производить расчеты положения и освещения для каждой грани. Слишком детализированная модель значительно замедлит этот процесс. Лучше всего для создания деталей на объекте использовать текстуры, о чем мы поговорим в следующей главе.

[править]

# Практическое Задание. Создание интерактивной сцены