Но как же тогда обновляются или совершенствуются возможности библиотеки, если файл не изменяется? DirectX, напротив, обновляется чуть ли не каждый месяц. Дело в том, что DirectX и OpenGL, в основном, не общаются с видеокартой напрямую, а используют в качестве надежного посредника ее драйвер. Вот, например, схема взаимодействия приложения и монитора компьютера с видеокартой ATI Radeon:
Рисунок 1 – взаимодействия приложения и монитора компьютера с видеокартой
Отсюда видно, что DirectX и OpenGL являются аппартно-независимыми, т.к. общаются с драйверами, которые у каждой видеокарты свои (и, естественно, являются аппартно-зависимыми).
5 Игровой движок
5.1 Что такое игровой движок?
Игровой движок – это центральный программный компонент компьютерных и видео игр или других интерактивных приложений с графикой, обрабатываемой в реальном времени. Он обеспечивает основные технологии, упрощает разработку и часто даёт игре возможность запускаться на нескольких платформах, таких как игровые консоли и настольные операционные системы, например, GNU/Linux, MacOSX и MicrosoftWindows. Основную функциональность обычно обеспечивает игровой движок, включающий движок рендеринга («визуализатор») для 2D или 3D графики, физический движок или обнаружение столкновений (и реакцию на столкновение), звук, скриптинг, анимацию, искусственный интеллект, networking, streaming, управление памятью, threading и граф сцены. Часто на процессе разработки можно сэкономить за счет повторного использования одного игрового движка для создания множества различных игр.
В дополнение к многократно используемым программным компонентам, игровые движки предоставляют набор визуальных инструментов для разработки. Эти инструменты обычно составляют интегрированную среду разработки для упрощённой, быстрой разработки игр на манер поточного производства. Эти игровые движки иногда называют «игровым подпрограммным обеспечением» (сокр. ППО; англ. middleware), так как, с точки зрения бизнеса, они предоставляют гибкую и многократно используемую программную платформу со всей необходимой функциональностью для разработки игрового приложения, сокращая затраты, сложность и время разработки – все критические факторы в сильноконкурирующей индустрии видеоигр.
Как и другие ППО решения, игровые движки обычно платформо-независимы и позволяют некоторой игре запускаться на различных платформах, включая игровые консоли и персональные компьютеры, с некоторыми внесёнными в исходный код изменениями (или вообще без них). Часто игровое ППО имеет компонентную архитектуру, позволяющую заменять или расширять некоторые системы движка более специализированными (и часто более дорогими) ППО компонентами, например, Havok– для физики, FMOD– для звука или SpeedTree– для рендеринга. Некоторые игровые движки, такие как RenderWare, проектируются как набор слабосвязанных ППО компонентов, которые могут выборочно комбинироваться для создания собственного движка, вместо более традиционного подхода расширения или настройки гибкого интегрируемого решения.
Некоторые игровые движки предоставляют только возможности 3D рендеринга в реальном времени вместо всей функциональности, необходимой играм. Эти движки доверяют разработчику игры реализацию остальной функциональности или её сбор на основе других игровых ППО компонентов. Такие типы движков обычно относят к «графическим движкам», «движкам рендеринга» или «3D движкам» вместо более содержательного термина «игровой движок». Однако эта терминология используется противоречиво: так, многие полнофункциональные игровые 3D движки упомянуты просто как «3D движки». Некоторые примеры графических движков: RealmForge, Ogre 3D, PowerRender, CrystalSpace и Genesis3D. Современные игровые или графические движки обычно предоставляют граф сцены – объектно-ориентированное представление 3D мира игры, которое часто упрощает игровой дизайн и может использоваться для более эффективного рендеринга огромных виртуальных миров.
Чаще всего 3D движки или системы рендеринга в игровых движках построены на графическом API, таком как Direct3D или OpenGL, который обеспечивает программную абстракцию GPU или видеокарты. Низкоуровневые библиотеки, например, DirectX, SDL и OpenAL, также обычно используются в играх, так как обеспечивают аппаратно-независимый доступ к другому аппаратному обеспечению компьютера, такому как устройства ввода (мышь, клавиатура и джойстик), сетевые и звуковые карты.
До появления аппаратно-ускоряемой 3D графики использовались программные визуализаторы. Программный рендеринг всё ещё используется в некоторых инструментах моделирования, для рендеринга изображений, для которых визуальная достоверность важнее производительности (количество кадров в секунду) или когда аппаратное обеспечение компьютера не удовлетворяет требованиям, например, не поддерживает шейдеры.
5.2 OpenSceneGraph
Разработчики называют OpenSceneGraph кроссплатформеным пакетом для создания графических приложений, в частности, компьютерных игр. Иными словами, движок заточен под игры, но на его основе можно делать еще много чего – например, неигровые программные модули, презентации и другой трехмерный контент.
OpenSceneGraph (далее OSG) – это open source-проект, то есть любой желающий может изменить исходный код инструментария и выложить творение своих рук в интернете. Благодаря этому движок постоянно развивается, чуть ли не ежемесячно в Сети появляются новые модули для OSG. Технология на полную катушку использует возможности OpenGL, который в последнее время набирает все большую и большую популярность среди игростроевцев.
OSG очень быстр, а картинка, которую можно создать даже без использования дополнительных модулей (то есть только при помощи базовых функций движка), вполне может потягаться по красоте с Unreal Engine первого поколения.
Откомпилировать движок можно в Visual Studio 6.0, Cygwin, Mingw и OSX. OSG умело работает с трехмерными моделями форматов .lwo, .obj, .geo, .3ds, .x, .wrl, то есть свободно оперирует с объектами, созданными в любом современном редакторе трехмерной графики (3DS Max, Maya и Lightwave 3D)
Что касается работы с 2D-изображениями, то и тут у движка все в полном порядке: поддерживается большинство распространенных графических форматов, от стандартных .bmp и .jpg до передовых .dds и .tga. Помимо этого, в OSG встроено несколько библиотек для работы со спецэффектами, системами частиц, шейдерами, ландшафтами и навигационными точками освещения.
На основе этого движка можно сделать неплохую трехмерную RPG, несложную пошаговую стратегию, залихватскую аркаду или даже космический симулятор.
5.3 GLScene
Рассмотрим основные возможности движка. Рендеринг осуществляется через библиотеку OpenGL, которая не только в несколько раз превосходит по скорости Direct3D, но и значительно проще в освоении. По сути, вам не нужно профессионально знать программирование, вы просто берете различные компоненты, которые уже спрограммированы за вас, и перетаскиваете их на форму программы. Впрочем, многие команды, функции, переменные и значения атрибутов по-прежнему вбиваются вручную.
Создатели GLScene максимально упростили процесс программирования: например, поворот и перемещение созданных объектов осуществляются с помощью специальных коротких движковых функций, а не посредством длинных команд OpenGL. Создание простых объектов вроде кубов, сфер и простеньких спрайтов также проводится с помощью простейших команд, так что игру уровня первого DOOM можно собрать из базовых форм (самому ничего рисовать не придется). Но для разработки тайтла современного уровня этого, конечно, недостаточно, поэтому GLScene поддерживает импорт 3D-моделей. Основной упор разработчики сделали на универсальный 3DS-формат. Впрочем, не «Максом» единым: OpenGL поддерживает файлы типов .obj/objf, .smd, .md2, .stl, .tin и .ply. «Оживить» объект можно как во внешнем графическом пакете, так и непосредственно из движка — набор для скелетной анимации прилагается.
Но на одних лишь примитивах и трехмерных модельках далеко не уедешь, для создания красивой картинки нужно нечто большее. И оно у OpenGL есть. На данный момент движок поддерживает практически все версии шейдеров, системы частиц (дождь, снег, туман), ряд универсальных программных модулей для создания спецэффектов. GLScene версии 1.0 научился работать с динамическими тенями, эффектами блеска и отражения. В движок были добавлены модули для работы со звуками и музыкой, а также для захвата данных с разных манипуляторов типа джойстиков и клавиатур. Отдельным пунктом идет возможность интеграции с одним из свободно распространяемых физических модулей – ODE.
5.4 The Nebula Device 2
После того как свет увидела игра Project Nomads, Nebula Device набрал популярность и не сбавляет темп по сей день. Многие разработчики выбирают именно его, особенно если собираются делать недорогой экшен или трехмерную аркаду.
Описанные выше игровые движки GLScene и OpenSceneGraph для вывода изображения на экран используют только графическую библиотеку OpenGL, а Nebula Device 2 поддерживает как OpenGL, так и Direct3D (движок по полной использует возможности DirectX 9.0). При этом Nebula Device 2 – кросс-платформенный движок, на нем можно делать игры под PC (Windows и Linux), Mac и даже Xbox.
Совсем уж здорово, что Nebula поддерживает сразу несколько широко распространенных скриптовых языков – TCL, Python и Lua. Но Nebula мало похож на конструктор для начинающих: девелоперы честно предупреждают, что их разработка – это не набор редакторов карт, трехмерных моделей и прочих удобных утилит. Чтобы сделать нормальную игру, вам сначала придется разработать инструментарий, и тут уж не обойтись без команды опытных программистов.
Игровой движок содержит модули для работы с particle-эффектами: огнем, дымом, туманом, дождем... Что касается форматов трехмерных моделей, поддерживаемых движком, то тут-то разработчики преподнесли весьма неприятный сюрприз – движок способен переваривать модели лишь трех форматов – .n3d и .nvx, которые известны только самому движку, и .obj (для импорта моделей такого формата используется специальный плагин).