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

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску

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

Автор: James Chronister
Оригинальный перевод: Юлия Корбут aka Balista
Переработка текста: Азовцев Юрий aka gumanoed
Переработка иллюстраций: Елена Силаева


Мы уже видели насколько Blender хорош и функционален при рендеринге и анимации. Но все рассмотренные нами функции есть и в других современных программах для 3D-моделирования и анимации. Основная разница между ними - стоимость программы и набор функциональных возможностей включенных в эту цену. Но одна вещь (кроме цены) делает Blender особенным, среди остальных подобных программ - наличие интегрированной системы рендеринга в реальном времени (Игровой Движок - Game Engine). Blender интегрирует систему "отрисовки" движения в реальном времени с системой физики и логическими блоками. Например, вы можете установить значение гравитации в разделе World в Окне Кнопок, назначить материалу параметры Friction и Force, сделать объект "действующим лицом" (actor) и управлять его движением в сцене. Когда он будет приближаться к другим объектам они будут взаимодействовать с ними как в реальном мире.

Вы можете создавать работы выглядящие так же хорошо, как профессиональные 3D-игры. Blender великолепно подходит для создания архитектурных симуляций прогулок по зданию, где двери открываются и закрываются в зависимости от ваших действий. Но самое приятное во все этом - вы можете создавать игры и другие вещи с помощью Игрового Движка без навыков программирования. Есть и другие бесплатные программы для создания 3D-игр, но они требуют умения и знания методов программирования. Навык программирования скриптов на Python может быть полезен в Blender, но не обязателен.

Эта глава не может покрыть всего, что вам понадобиться при использовании игрового движка. Мы рассмотрим как текстурировать вашу модель, разберемся с интерфейсом и логикой. Мы так же, посмотрим как записать действия игрового движка в IPO-кривые. Для более детального описания, обратитесь к туториалу по игровому движку на сайте Blender.org. Он хорошо написан и рассказывает о всех базовых командах системы.

Игровой Движок в Blender претерпел значительное развитие за несколько последних версий. Одним из последних изменений была переработка системы текстурирования. Теперь она более запутанная, но дает гораздо большую гибкость. Оригинальный модуль физики в Игровом Движке называется Sumo и по прежнему доступен для выбора, но практически во всех современных работах используется модуль Bullet. Bullet просчитывает физически правильное поведение объекта более аккуратно и дает возможность создавать IPO-кривые анимации прямо из действия в реальном времени.


Настройка Физического Движка

Первым шагом к использованию игрового движка будет его настройка. Для этого, в Окне Кнопок перейдите в раздел Shading, подраздел World. На панели Mist/Stars/Physics вы увидите выбранный движок для физики - Bullet. Здесь же вы можете задать значение параметру гравитации Grav. Скорее всего эти параметры будут уже установлены.

BlenderBasics 3rdEdition2009b-138 1.jpg


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

Давайте создадим простую сцену со сферой и плоскостью и разместим сферу над плоскостью. Измените форму сферы, вытянув одну вершину и сформировав "нос". Это даст нам возможность знать где находится "передняя часть сферы" при ее повороте вокруг оси. Создайте материалы для обоих объектов и выберите для них цвета на свой вкус. Для назначения текстур мы воспользуемся способом, отличным от ситуации с текстурами для рендеринга. Мы добавляем материалы для придания объектам определенных физических свойств (эластичность, коэффициент трения). Вот что здесь есть:

BlenderBasics 3rdEdition2009b-139 3.jpg BlenderBasics 3rdEdition2009b-139 4.jpg


Выберите сферу и перейдите в Окне Кнопок в раздел Game (небольшая кнопка с пурпурным пэкманом). Вот что вы увидите в этом разделе:

BlenderBasics 3rdEdition2009b-139 2.jpg
  • Кнопка Action - делает объект "действующим" актером.
  • Add Property - используеться, когда вы хотите что бы в вашей сцене что то произошло. Событие происходит при "срабатывании" этих настроек.
  • Sensors, Controllers and Actuators - это "мозг" игрового движка. Думайте о них как о Вводе-Процессе-Выводе, где данные загружаются, компьютер их обрабатывает и в соответствии с этим что то происходит. Здесь сокрыто большое количество опций.


Давайте сделаем нашу сферу действующим лицом. Для этого нажмите кнопку Actor и выберите Dynamic. Обратите внимание опции, ставшие доступными:

BlenderBasics 3rdEdition2009b-139 1.jpg
  • Damp: затухание движения - предотвращает бесконечное движение объекта после завершения приложения силы. Мне нравиться значение 0.4.
  • Actor Size (Радиус)- при изменении этого параметра вы заметите пунктирную линию, окружающую сферу. Это размер "Актера".
  • Mass - насколько тяжел ваш "актер".
  • RotDamp: затухание вращения - предотвращает постоянное вращение объекта. Я, обычно, устанавливаю этот параметр равным 0.8.
  • Bonds - изменяет взаимодействующую форму объекта со сферической (радиуса) на другую.


Переместите курсор мыши в окно 3D-вида и нажмите клавишу "P" для начала действия. Если сфера находится над плоскостью при запуске игрового движка она упадет на нее. Сфера, в нашем случае, является действующим объектом игры. Выйдите из игрового движка, нажав клавишу Esc. Нажмите кнопки "Add" под Sensors (сенсоры), Controllers (контроллеры) и Actuators (актуаторы). Удерживая левую кнопку мыши над каждый из блоков вы сможете изменить его тип. Измените тип сенсора со значения Always на значение Keyboard.

BlenderBasics 3rdEdition2009b-140 2.jpg

Затем, соедините блоки вместе.

BlenderBasics 3rdEdition2009b-140 3.jpg

После изменения типа блока на Keyboard вы увидите поле для указания клавиши. Щелкните в это поле и нажмите клавишу, которую вы хотите использовать для этого действия. Мы используем клавишу "стрелка вверх". Мы свяжем приложение силы с нажатием этой клавиши так, что при нажатии на "стрелки вверх" на клавиатуре, сфера будет двигаться вперед.

BlenderBasics 3rdEdition2009b-140 1.jpg

Теперь, мы настроим прикладываемые силы (force) к действующему объекту. Вы видите три колонки в блоке Motion. Они представляют оси X, Y и Z. Наиболее удобный способ изменить параметры в них - щелкнуть в них левой клавишей мыши, удерживая клавишу Shift. В блоке Force мы поменяем значение для Y и установим его равным 10. Для лучшего результата поэкспериментируйте со значением этого параметра. Если при нажатии на клавишу, движение объекта происходит не в ту сторону, верните значение параметра Y обратно в 0 и попробуйте другую ось. Если движение происходит по нужной оси, но в противоположном направлении - попробуйте отрицательное значение для параметра. При получении правильного движения сферы по нажатию на клавишу вверх, добавьте еще один набор логических блоков для Сенсоров, Контроллеров, Актуаторов. Так же, как в предыдущем случае, соедините их и настройте движение назад. Для управления поворотами объекта влево и вправо, работайте с блоком Torque и используйте клавиши со стрелками влево/вправо. Здесь расположено большое количество параметров для Игрового Движка. Обратитесь к документации по Игровому Движку Blender на Blender.org. Вы можете скачать оттуда замечательную книгу Blender Gamekit.

BlenderBasics 3rdEdition2009b-13 5.jpg

РобоЧувак говорит: Если вы хотите переместить объект, не являющийся "актером", используйте Loc и Rot. Для "актера" - Force и Torque.


Наложение материалов

До версии Blender 2.48 наложение игровых текстур было достаточно простым процессом. Материалы и текстуры, используемые в рендеринге и анимации, отличались от UV-текстур, используемых в Игровом Движке. В новых версиях Blender разработчики объединили многие функции материалов и текстур для рендеринга и игрового движка, что, на мой взгляд, внесло некоторую путаницу. Причина отделения системы текстурирования для игрового движка исходит из концепции максимально простых объектов для плавного хода игры. Использование разнообразных опций из системы текстурирования для рендеринга может значительно снизить скорость гейм-плея. UV-текстуры могут быть легко наложены (mapped) на грани меша, что снижает количество расчетов на текстурирование объектов во время игры. Обычные текстуры так же могут использоваться для объектов в игровом движке, но мы сфокусируемся на UV-маппинге (UV-mapping).


BlenderBasics 3rdEdition2009b-141 1.jpg

Вы уже знаете что на объект можно наложить материал и он появится в Игровом Движке. Сначала, убедитесь что у вас включен режим отрисовки объектов "Texture Draw" (Alt-Z так же переключит вас в этот режим). В своей сцене я использую базовый куб для демонстрации работы с UV-текстурами. Наложим материал на куб.


BlenderBasics 3rdEdition2009b-141 2.jpg

В режиме текстурирования выберите куб и переключите тип одного из окон в "UV/Image Editor".

BlenderBasics 3rdEdition2009b-141 3.jpg

Внизу этого окна вы увидите опции - View, Image и стрелки вверх/вниз. Стрелки используются для просмотра изображений, уже добавленных в сцену. Воспользуйтесь меню Image и Откройте (Open) текстуру, которую вы планируете использовать. Я выбрал текстуру камня для своего куба. Теперь, перейдите в режим редактирования и переключитесь в режим работы с гранями. Нажмите "A" и выделите все грани. Теперь вы можете наложить текстуру, нажав "U" в окне 3D-вида для вызова меню UV Mapping. Для этого примера я выберу опцию Cube Projection. Мы открыли текстуру перед ее настройкой и теперь она автоматически появиться на всех гранях (вы можете сменить текстуру, щелкая по стрелке и выбирая нужную из списка). В окне UV вы увидите вершины и грани, расположенные поверх образца текстуры. Они могут быть перемещены, смаштабированы и т.п. для изменения способа наложения текстуры на объект. Вместо выделения всех граней, мы можем выделить только одну и наложить текстуру только на нее (это основное отличие материалов для рендеринга и UV-текстур).

BlenderBasics 3rdEdition2009b-141 4.jpg


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

BlenderBasics 3rdEdition2009b-13 5.jpg

РобоЧувак говорит: Что бы сохранить стремительность хода игры старайтесь создавать меши с минимальным количеством вершин и граней. Используйте текстуры для создания мелких деталей объекта, вместо их моделирования на меше (например, окна в здании, надписи на стенах).

Куб выглядит хорошо, но у нас есть еще несколько инструментов. Перейдите в раздел Edit в окне кнопок и найдите панели UV Calculation и Texture Face. Панель Texture Face будет видна только после нажатия клавиши U для наложения UV-текстуры. Обе панели видны только в режиме редактирования.

BlenderBasics 3rdEdition2009b-142 1.jpg

BlenderBasics 3rdEdition2009b-142 2.jpg

  • Copy - нажмите эту кнопку для применения эффектов
  • Light - выбранные грани будут отражать свет
  • Invisible - выбранные грани не будут видны во время игры
  • Collision - "актеры" не смогут проходить сквозь эту грани
  • Two-Sided - грани будут отображать текстуры с обоих сторон (в режиме one-side грани не будут видны с обратной стороны)
  • Add - текстуры с темными/черными областями будут отображать эти области прозрачными. Великолепно подходит для тектста на черном фоне.
  • Alpha - текстуры с каналом прозрачности будут отображать его

UV Calculations используется для выбора способа отображения текстур на гранях объекта. Если вы измените "Cube Size", поместите курсор мыши в окно 3D-вида и нажмите "U" еще раз. В появившемся меню выберите "Cube Projection" и текстура объекта изменится.

Здесь можно сделать и много других вещей. Воспользуйтесь информацией на blender.org и c форумов о Blender. Не бойтесь эксперементировать!

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

Blender предоставляет возможность использовать физику игрового движка для записи анимации (IPO-кривых). Вместо создания ключей положения и вращения для падающего (движущегося) объекта, вы можете настроить Bullet-модель и сказать Blender записать действие в IPO-кривых анимации. Больше нет необходимости беспокоиться о "реалистичности" падения/полета/отскока объекта. Blender сделает это для вас автоматически! Для начала, вам нужно настроить игровую логику на нужное вам поведение объекта. Сделайте вашего актера Rigid Body-актером (твердотельным), вместо Dynamic. Динамические объекты не будут просто скользить по сцене. Они будут катиться или поворачиваться при необходимости. Возможно, вы захотите выбрать параметр Bounds.


[[image::BlenderBasics_3rdEdition2009b-142_3.jpg|201px|right]] Когда вы настроите тип вашего актера, перейдите в меню "Game" и выберите "Record Game Physics IPO". Нажмите "P" для запуска действия. Когда закончите, нажмите клавишу "Esc". Действие будет записано в виде IPO-кривых для объекта. Теперь, если вы нажмете "Alt-A", в окне 3D-вида начнется проигрывание полученной анимации. Наложите материалы и текстуры на объекты, как вы это делали ранее и создайте видеоролик.

BlenderBasics 3rdEdition2009b-13 5.jpg

РобоЧувак говорит: Не забывайте выключать опцию Record Game to IPO после завершения записи анимации. В противном случае, при каждом проигрывании действия будет создаваться новая IPO-кривая.

Практическое Задание. Пробиться сквозь стену

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


Создайте сцену, похожую на обсуждаемую в этой главе. Она должна включить в себя "актера" и плоскость, текстурированных для игрового режима. Назначьте актеру физическую модель (Dynamic), позволяющую ему двигаться вперед и назад, поворачиваться влево и вправо. Создайте кирпич (куб) и сделайте его объектом типа Rigid Body и выберите опцию Box в списке параметра Bounds. Продублируйте его несколько раз (Shift-D) и постройте из получившихся блоков стену. Направьте вашего "актера" прямо сквозь стену так, что бы они рассыпалась после удара. После успешной проверки в режиме проигрывания (клавиша "P") сделайте запись действия в IPO-кривые и из получившейся анимации создайте видеоролик.


BlenderBasics 3rdEdition2009b-143 2.jpg


** После завершения задания позовите инструктора **