1. История развития Blender
Первоначально Blender являлся коммерческим продуктом компании NeoGeo и ориентировался исключительно для разработки трехмерных сцен. Прошли года, программа приобрела своих почитателей, поменяла "место проживания" (в 2000 году от NeoGeo отпочковалась дочерняя компания NaN, которая продолжила развитие программы), обзавелася игровым движком. Политика компании постепенно начала строиться именно на продвижении Blender, как игрового конструктора, но финансовые проблемы и неумелое руководство вынудили NaN объявить о банкротстве.
На этом история Blender могла закончиться, если бы не было мощного сообщества – почитателей программы. На удивление всему миру, всего за два месяца была собрана сумма в 100000 евро, которая послужила своеобразным выкупом за свободу Blender. С этого момента развитие программы пошло по законам Open Sources.
Однако, до недавнего времени, Blender в основном развивался именно как графический редактор. Изменения, касаемые встроенного движка являлись чисто косметическими. Все поменялось, когда организация Blender Foundation объявила о проекте создания игры Yo Frankie! (Apricot).
На старте разработки предполагалось, что BGE (Blender Game Engine) послужит всего-лишь площадкой для создания и обкатки прототипа игры, а основную нагрузку на себя возьмет Crystal Space – по всем параметрам более технологичный движок также из лагеря Open Sources. В процессе работы команда разработчиков пришла к решению выпустить игру в обоих вариантах. Интересен факт, что вариант с BGE оказался более выигрышный, как по качеству прорисовки картинки, так и по насыщению уровней.
Для решения поставленной задачи разработчикам пришлось значительно расширить и дополнить стандартные возможности движка. И по сей день, каждый релиз программы продолжает баловать своих пользователей новыми фичами BGE.
2. BGE Движок Blender Game Engine (BGE) является встроенным компонентом Blender.
1) Что такое игровой движок?
Это совокупность программного кода, позволяющего реализовать – графический и физический мир игры; поддержку AI и сетевого режима; звукового сопровождения и интерфейса пользователя. Возьмем, к примеру, известнейший графический движок OGRE. На его основе и вполне успешно выпущены несколько коммерческих игр, что положительно говорит о его пригодности к масштабным проектам. Вот только одно НО – это ГРАФИЧЕСКИЙ движок, а не игровой. Его задача вывести на экран красивую картинку и мало-мальски обеспечить взаимодействие с пользователем. Конечно, за счет модульной структуры к нему можно "привинтить" физику, звук и сеть, но на это потребуются лишние человеко-часы.
Blender в этом отношении более удобен. В своем составе он имеет встроенный физический движок Bullet, поддержку сети через скрипты Python, графический рендер с полноценной поддержкой шейдеров.
2) Второе
Любой мало-мальски продвинутый разработчик старается сократить время и усилия за счет массы утилит, выполняющих всю черновую работу: просчет lightmap, создание ландшафта, наполнение объектами уровней, скриптование и т.д. и т.п.
Мало какой из свободных движков может всем этим похвастаться, но только не Blender. В распоряжении разработчика имеется стандартный инструментарий программы, позволяющий моделить и текстурировать; размещать объекты на сцене и настраивать физику; создавать логику и в конце работы компилировать исходники. Заметьте, что все эти манипуляции можно проводить не написав ни строчки кода. Blender предоставляет превосходный интерфейс конструктора, где игровая логика настраивается простым кликаньем мыши. Те, кому этой возможности мало, могут через написание скриптов Python непосредственно обращаться к API движка и управлять игрой. По сути дела, для создания игры нет необходимости выходить из программы, так как все необходимое в ней уже имеется.
3) Третье
Как известно, голод игроков на новшества поистине непобедим: стенсильные тени, динамическое освещение, paralax mapping, rigid и ragdol – уже не вызывают восторженный писк, а являются стандартным требованием. Игры, которые вышли всего лет пять назад выглядят примитивно по сравнению с современными. Соответственно, игровые движки должны своевременно вводить новые фичи, чтобы не отстать от требований времени и аппетитов игроков. А как дело обстоит у BGE?
С момента выхода Apricot графический рендер движка (мы говорим об игровом движке, а не стандартном рендере программы) претерпел значительные изменения. Современный вид визуальной части игры невозможен без использования шейдеров. До указанного релиза разработчик мог использовать шейдеры, собственноручно написав необходимый блок кода на языке GLSL, через поддержку Python. Однако сейчас имеется возможность использования встроенных шейдеров материалов без этапа программирования. К примеру, настроенный материал объекта с normal map будет одинаково обрабатываться, как стандартным рендером, так и realtime-движком. Мало того, 3D-окно программы позволяет просматривать работу шейдеров без непосредственного запуска движка. Естественно, оставлена возможность написания своих собственных процедур на GLSL. Так уже имеется неплохая подборка шейдерных программ, адаптированных специально под BGE (можно найти на форуме сообщества Blender - www.blenderartists.org).
С версии 2.49 Blender обзавелся новым релизом физического движка Bullet. Интересно, что многие его вкусные возможности оказались доступными и для игрового режима. Обработка в реальном времени эффектов soft body, rigid body ставит BGE на ступеньку выше к великим монстрам коммерческих игровых движков индустрии. Хотя Blender позиционируется, как среда для разработки трехмерных игр, в новом релизе появился режим работы физического движка в двухмерном пространстве, что, по мнению разработчиков программы, может подстегнуть интерес к созданию казуальных игр.
4) Четвертое
Последнее время в современных играх стало модным использовать постобработку уже отрендеренной картинки. Примерами могут служить игры сериала NFS или тот же самый Constantine. Помните эффект форсажа в первом примере или подуровни ада во втором?
Blender также позволяет использовать постобработку, которая в его терминологии получила название фильтр. Подобное новшество появилось пару релизов назад и теперь от версии к версии коллекция фильтров все увеличивается. Пусть на данный момент их количество исчисляется десятком, но при отсутствии необходимого программист может написать свой собственный.
3. А как на практике?
Приятно осознавать, что приложение Open Sources предлагает столь обширные возможности. Однако в реальности не все так гладко. BGE является движком универсальным, соответственно, с весьма посредственными скоростными характеристиками. Да, он может выдать красивую картинку с приемлимой физикой, но играть в это будет совершенно невозможно. Подтверждением сказанного может служить замечательное демо – Bathroom (автор Martins Upitis). Если вы ее не видели, советуем поискать в интернете и скачать – оно того стоит. В ней демонстрируется работа динамического освещения, теней, normal map, а также soft body. Прилично смотрится, правда fps...
Однако не спешите скидывать BGE со счетов! Давайте разберемся для каких игр его можно использовать, а где нежелательно. Понятно, что для жанров типа пошаговой стратегии или квеста особо не критичен низкий fps, поэтому можно использовать все возможности BGE на полную катушку, но на играх активного действия следует остановиться подробнее.
Для экономии драгоценных fps нелишне использовать динамически создаваемые объекты.
Обычно для оригиналов используют отдельный слой. Отработавшие своё объекты также нужно удалять.
Рассмотрим сначала шутер. Различают три вида шутеров, с точки зрения окружения – это indoor (закрытое пространство), outdoor (открытое пространство) или смешанный. Думается, понятно, что игра с действием в закрытом помещении гораздо проще для просчета, нежели с обширным пространством. Проблема заключается еще в том, что нереально сразу загружать все пространство в память машины. Обычно игровые движки, оптимизированные для работы с открытым ландшафтом, умеют работать с так называемой страничной загрузкой, т.е. когда игровая зона подразделяется на сектора и в нужный момент ядро подгружает необходимый блок, причем незаметно для пользователя. BGE, к сожалению, на это неспособен. Можно, конечно, вручную разделить пространство на зоны и сохранить их в отдельные проектные файлы или сцены, но незаметно продлить ландшафт все же не удастся. Тут мы сталкиваемся с отсутствием такой необходимой вещи, как портал. Впрочем, если уровень с открытым пространством относительно небольшой – вариант с отдельными файлами сцен вполне подходит.
Следующая проблема – физика. BGE умеет работать с обычными столкновениями, soft body, rigid body, частицами. Все это на достаточно современном уровне. Но при большом количестве объектов с физическими свойствами падение скорости неминуемо. Разработчики в последней версии программы 2.49, на момент написания статьи, значительно оптимизировали код связанный с расчетом физики. Работает действительно быстрее, но недостаточно для активной игры. Выход может быть в отключении физики для тех объектов, которые уже отработали по сценарию. Версия 2.49 имеет необходимые функции управления состоянием физики, которые доступны как из скриптов, так и логических блоков.
BGE может с легкостью крутить сцены с сотнями тысяч полигонов. Но прибавьте сюда расчеты физики, обработку текстур, логики и ваш герой будет двигаться со скоростью черепахи. Используйте низкополигональные модели с normal map. Так как подобные расчеты берет на себя графический чип, то центральный процессор будет освобожден для более важных задач.
Определенную сложность может придать особенности лицензирования Blender, правда лишь в том случае, если игра предполагается быть коммерческой и без открытия исходников. Напомним, что лицензия GNU GPL предполагает свободное использование, распространение или изменение кода программы. В случае с контентом созданным в Blender – он является собственностью создателя, который может распространять или продавать его на любых условиях, в том числе по иной лицензии. Но вот код, скомпилированный Blender попадает под действующую лицензию GPL. Получается, что продавать его можно лишь с наличием открытых исходников. Конечно, в некоторых случаях это неудобно. Выходом может служить вариант подсказанный самими разработчиками Blender – использовать первоначальный код лишь для загрузки основного blend файла (ведь проектный файл является собственностью его создателя). Но возникает следующий вопрос, а как скрыть содержимое проектного файла от любопытных глаз?
И все же несмотря не некоторые шероховатости и проблемы, движок BGE выглядит весьма многообещающим. Активная работа разработчиков Blender в каждой следующей версии демонстрирует что-нибудь новое и полезное. К примеру, версия 2.49 уже может похвастаться почти троекратным увеличением производительности за счет оптимизации кода ядра. Этот факт мы собственноручно проверили у нас в редакции на realtime-проектах годичной давности.
Немаловажным выглядит возможность реализации проекта без выхода из самой программы. Да и набор предлагаемых технологий весьма впечатляет: частицы, билборды, динамические свет и тени; цветные тени; продвинутая физика и скриптовая система; поддержка звука и сети; графический конструктор; встроенные и пользовательские шейдеры; кроссплатформенность...
Думается, эта программа и её движок вполне подходят не только для начинающих, но и продвинутых разработчиков игр.
Лекция №15 (2ч.)