- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF96:Движки для игр
Материал из Linuxformat.
Содержание |
Движки для игр
«Что наша жизнь? Игра...» А сердце любой игры заключено в той части кода, которая в простонародье кличется «движком». Андрей Прахов заглянул прямо в сердце...
Прежде, чем мы начнем повествование, необходимо четко разъяснить то, что понимается под вынесенным в заголовок термином. Очень часто, говоря о движке, люди связывают его с определенной игрой. Это не совсем верно. Технологии, используемые, скажем, в DOOM 3, вполне могут быть лицензированы третьей фирмой. И не факт, что получившаяся у них игра затмит оригинал или даже задействует все крутые разработки конкретного движка. Кроме того, движок – это не только исполняемый код ядра, но и его окружение в виде вспомогательных утилит и, что немаловажно, поддержка производителя.
Возьмем гипотетическую компанию «XGames», решившую создать очередной шедевр. Пусть в свою игру они предполагают включить зрелищные поединки на мечах. Что они могут предпринять? В принципе, путей только три: лицензировать чужую технологию, написать свой код, воспользоваться разработками Open Source. Однако какой бы путь они ни выбрали и какие бы запредельные возможности приобретенная ими система «файтинга» ни имела –если нет сопутствующего инструментария для воссоздания задуманных движений и эффектов, то львиная доля возможностей системы будет просто не задействована.
Хороший движок – это не монолитное сооружение, а скорее конструктор, призванный воплотить цели разработчика. В принципе, можно выделить неизменяемую часть – «Core Engine» – и систему подключаемых модулей. Именно от качества кода основного ядра и имеющихся модулей зависит диапазон возможностей игр, которые теоретически можно реализовать на данном движке.
Существующие движки можно разбить по категориям: графические, физические, скриптовые, звуковые, AI [искусственный интеллект, – прим. ред.] и т.д. Нет в мире универсального движка, решающего все эти задачи. Скажем, GLScene имеет в своем составе физическую библиотеку ODE, а Unreal Engine II слит с Havok. Поэтому далее мы рассматривать будем отдельных представителей конкретных направлений. Кроме того, только последователей открытости и бесплатности. И этому есть как минимум пара причин. Во-первых, стоимость графического движка колеблется от $5000 до бесконечности. Так, в свое время, Source продавался почти за миллион долларов. Цены на физические чуть поскромнее: славный представитель этого семейства Havok, по слухам, стоит около $50000 (всего-то!). И откуда брать деньги разработчикам, начинающим и не очень? Опять-таки, качество отдельных бесплатных разработок заслуживает уважения, и не раз они использовались в коммерческих проектах.
При выборе движка нужно учитывать специфику текущего проекта. Так, Quake Engine II хорош для прорисовки закрытых пространств и весьма непродуктивен на открытых. Но есть и универсальные движки.
К таким можно отнести GLScene.
GLScene
Когда-то разработанный для использования в среде Delphi (Windows), он благополучно перекочевал и на Linux. Работать с ним можно либо из-под Lazarus (открытый аналог Delphi), либо из-под FreePascal. Понятное дело, что в основе его лежит работа с OpenGL и язык программирования Object Pascal. Это вполне шустрый и современный движок, технически не отстающий от веяний времени. Подчас разработчикам удается воплощать новое быстрее, чем соответствующее оборудование появляется на массовом рынке. Помимо графической части, движок имеет в своем составе модули физики (ODE, DDE), умеет работать со звуком и сетью, есть встроенный редактор сцены (правда, очень и очень примитивный). Конечно же, поддерживаются шейдеры, скелетная и покадровая анимация, частицы, motion blur, bump-mapping и многое другое. Помимо своего непосредственного назначения (работы с трехмерной графикой), GLScene неплохо умеет обращаться и с двумерными спрайтами, примитивами. Для разработки интерфейса предназначен специальный класс, что существен- но облегчает жизнь программиста, а имеющиеся в наличии небольшие утилиты освобождают от рутинности разработки. Большой плюс – наличие документации, примеров и целой армии поклонников.
Особенности движка – серьезная продуманность внутренней структуры и большое количество встроенных заготовок. Так, создать полноценное небо или водную поверхность можно буквально несколькими командами. Не обойден стороной и звук: работать с ним – одно удовольствие. Естественно, поддерживается трехмерное окружение.
Нельзя сказать, что это очень быстрый движок. Да, стрелялку класса ААА на нем не сделаешь, но для небольших казуальных игр или не слишком динамичных RPG он в самый раз. По секрету: разработчики GLScene никогда не позиционировали его только лишь для программирования игр.
OGRE
Совсем недавно завершился цикл статей по программированию игры на OGRE в нашем журнале, поэтому остановимся на нем вкратце. Читатели наверняка попробовали на ощупь мощь и элегантность работы движка. Созданный аж в 2002 году, OGRE активно разрабатывается и поныне, заслуженно считаясь наиболее динамично развивающимся и перспективным проектом такого рода. Продуманная архитектура, богатый набор документации и примеров, большое количество сопроводительного инструментария – все это делает движок интересным не только для простых пользователей, но и для коммерческих проектов (примером может служить игра «Стальные монстры (Pacific Storm)» студии «Леста»). Кроме того, по слухам, просочившимся из стана разработчиков Blender, этот движок скоро ляжет в основу следующих версий редактора.
Итак, что же «вкусного» он может нам предложить? Во-первых, независимость от типа графического API, позволяющую с легкостью переключаться между DirectX и OpenGL. Поддержка трех операционных систем – Linux, Windows, Mac OS X. Богатый набор модулей расширения для работы с различмерных редакторов (3ds Max, Maya, Blender, MilkShape...). Движок написан на языке программирования C++.
И хотя он позиционируется в первую очередь как графический движок, остальные стороны игростроя не остались в стороне. Так, имеется пример использования открытой физической библиотеки ODE совместно с OGRE.
Итого: мощная и открытая архитектура, солидная документация, технологичный язык программирования – все это делает OGRE привлекательным и для коммерческого использования.
The Nebula Device
История этого проекта достаточно необычна и поучительна. Немецкая студия «Radon Labs» при создании игры «Project Nomads» встала перед обычной дилеммой: то ли лицензировать чужой движок, то ли написать свой собственный. По некоторым причинам, движки, предлагаемые рынком, не подходили для задуманного, но и ресурсов для создания своего явно не хватало. Ребята поступили просто и мудро – открыли свои наработки, и впоследствии, не без помощи сторонников Open Source, получилась красивая и изящная игра.
Движок этого типа призван для обработки исключительно открытых пространств. Изумительное по красоте небо, реальные облака, детализированные острова и видимость на десятки километров – вот что предложила игрокам эта игра, а соответственно, и ее движок.
Подобно OGRE, движок является мультиплатформенным, он поддерживает DirectX и OpenGL. Как и его вышеописанные собратья, он предлагает разработчикам мощь современных технологий и легкость (относительную) программирования.
Написан на C++, поддерживает несколько скриптовых языков (в том числе и любимый разработчиками игр Lua). Имеется даже возможность включить поддержку иного языка с помощью системы расширений.
Работа с различными форматами графических файлов также сделана на подобающем уровне. Движок «понимает» форматы BMP, JPG, GIF, TIFF, PNG и некоторые другие. Исключение составляет поддержка файлов трехмерных редакторов. Помимо собственных форматов NVX и N3D, можно использовать лишь OBJ (слабое место!).
В своем составе имеет несколько дополнительных утилит. Так, к примеру, для контролирования источников света можно воспользоваться специальным инструментом (Light Control Tool).
Ну и, под конец, еще одна большая ложка дегтя – почти полное отсутствие документации. Впрочем, на собственном сайте Nebula имеются кое-какие примеры и руководства.
Irrlicht
Завершает повествование о графических движках обзор еще одного интересного проекта. Из всех рассмотренных, только Irrlicht имеет возможность использовать программный режим отрисовки. Скажете, древность? А вот и нет. Представьте, что для разработки небольшой казуальной игры вы воспользовались, скажем, тем же OGRE. Получилось красиво, быстро, интересно. Но вот беда, на обычных конторских машинах не всегда стоят видеоплаты с 3D-ускорителями (или соответствующие драйвера), а игры такого класса рассчитаны по большей степени именно на них. Потеря потенциальных потребителей – дело неприятное. Irrlicht же позволяет с легкостью переключаться с аппаратного ускорения на программный рендер.
Движок достаточно новый. Не совсем еще стабильный, но основные функции для разработки уже имеются. Набор предлагаемых эффектов достаточно богат: создание реалистичных водных поверхностей, динамическое освещение, световые карты, динамические тени, работа с биллбордами (billboards), система частиц и многое другое.
Irrlicht, понятное дело, является кроссплатформенным (Windows, Linux, MacOS, Sun Solaris/SPARC), написан на С++, понимает форматы OBJ, 3DS, MD2 (формат Quake Engine). Легко интегрируется с физическими библиотеками ODE, Tokamak.
...и другие
Конечно же, количество существующих графических движков, подходящих для использования в Linux, не ограничивается лишь четырьмя ранее рассмотренными. Существует масса узкоспециализированных, разработанных для создания игр разного жанра. Но есть еще одна категория движков, без которых не обходится ни одна из современных игр – а именно, физические.
Уже из названия понятно их назначение. Столкновения, падения, гравитация, зрелищные взрывы – все, что основано на законах физики, находится во власти этого кода.
Не стоит думать, что эти расчеты достоверно моделируют физические процессы на все 100%: как правило, происходит лишь аппроксимация. Расчет в реальном времени требует немалых процессорных ресурсов, и поэтому разработчики идут на всевозможные ухищрения, типа разбиения игрового пространства на обсчитываемые зоны, нестандартного использования GPU высокоскоростных видеоплат и, наконец, использования специализированных физических ускорителей.
Примером последнего может служить движок PhysX компании Ageia. Это пока единственный движок, способный использовать всю мощь PPU (Physics Processing Unit); кроме того, он самый шустрый. Но есть и погрешности моделирования. Имеется несколько бесплатных лицензий (без поддержки PPU) для коммерческого использования. По слухам, скоро появятся двоичные пакеты и для Linux.
Гораздо более привычным для разработчиков является движок ODE – старейший представитель, изначально создававшийся под эгидой Open Source, не самый быстрый и, как ни странно, не очень стабильный. Он разрабатывается и поныне, изредка радуя почитателей некоторыми новыми функциями. Умеет просчитывать столкновения не только между стандартными примитивами (сфера, плоскость, куб), но и работает непосредственно с mesh-объектами. Используется имитация физики твердого тела (Rigid body sumulation), на основе которой можно воссоздать широко известный эффект «тряпочной куклы» (rag- doll). Является стандартом de-facto использования совместно с другими графическими движками, такими, как OGRE, GLScene, Nebula. Из особенностей: богатая документация, несложная и понятная реализация функций. Лучше всего проявляет себя при обсчете простых физических тел в небольшом проекте. Однако, благодаря своей открытости и документированности, может стать основой для разработки более сложного кода (появилось желание создать конкурента Havok?).
Напоследок хочется дать добрый совет: не гонитесь за самым мощным движком, лучше используйте простой, но хорошо документированный!
Врезка
Справочник игродела
Billboards Двухмерные спрайты, всегда повернутые «лицом» к активной камере. Часто используются для создания объектов (или подмены «реальных» трехмерных объектов), находящихся на удалении от камеры, с целью уменьшения нагрузки на систему.
Bump-Mapping Технология выдавливания для придания шероховатости поверхности объекта. Неровности создаются одной картинкой (бамп-карта), состоящей из градаций серого цвета (от 0 до 255). Чем светлее пиксель, тем выше он находится от поверхности. Кроме него, имеются более современные способы: Normal Mapping, Parallax Mapping, Relief Mapping.
Collision Detection Обнаружение столкновений между объектами с последующей реакцией программы. Расчеты могут вестись либо на уровне примитивов (сфера, куб), либо на уровне граней (mesh) самого объекта. В последнем случае точность определения значительно возрастает за счет увеличения нагрузки на систему.
Motion Blur Эффект размытости изображения при движении. Как известно, при высокой скорости движения объекта в реальном мире его очертания расплываются. Данная технология придаст более зрелищный вид любой трехмерной игре.
Particles System Предназначена для моделирования объекта с неопределенной формой. В свою очередь, сам объект состоит из подмножества других, каждый из которых рождается, живет и умирает в конкретный момент, по замыслу аниматора. Частицы могут порождать другие частицы, приобретать новые свойства и перемещаться по заданным траекториям. Таким образом, контролируя цвет, прозрачность, размер и динамику поведения частиц, можно получить различные визуальные эффекты: например, облака, пламя, водные брызги, дым.