Игровой движок
Игрово́й движо́к (англ. game engine), комплекс программных средств (ПО), обеспечивающих работу графических, звуковых, геймплейных и других элементов видеоигры. Игровой движок может быть отнесён к промежуточному ПО (англ. middleware – связующее, или подпрограммное, обеспечение), поскольку предоставляет программным приложениям дополнительные возможности по обеспечению связи и управлению вводом и выводом, не заложенные в основной функционал платформы и операционной системы.
Характеристики и особенности
Чёткого различия между всеми программными элементами видеоигры и игровым движком не существует. Обычно используется практическое определение: игровой движок – это такое ПО, на основе которого можно разработать другие игры без существенных изменений кода. Игровой движок является существенной частью фреймворка, набором инструментов разработчика, состоящим из согласованных друг с другом прикладных программ, отвечающих за отдельные аспекты видеоигры. Одним из важных признаков игрового движка считается наличие архитектуры управления данными. Ключевыми для игрового движка выступают программы:
создающие графику (системы двухмерного и трёхмерного рендеринга);
обеспечивающие правила взаимодействия геймера с игровым миром (физический движок);
организующие управление для той или иной игровой платформы и устройств;
участвующие в координации визуализации и звукового сопровождения;
отвечающие за запуск скриптов, искусственный интеллект, онлайн-соединение и др.
Понятие игрового движка вошло в активный обиход в 1990-е гг. благодаря появлению шутеров от первого лица «Doom» (1993) и «Quake» (1996), позволивших создавать игры-клоны. В ранний период развития видеоигр, особенно для игровых автоматов и консолей, игровой движок был тождественен коду игры и неотделим от него, а также был жёстко связан с платформой, для которой игра создана (Jason. 2009). С развитием ПК-игр, а также появлением специальных игровых редакторов и библиотек игровые движки получили самостоятельное развитие благодаря специальным компаниям, занимающимся их (или их отдельных компонентов) разработкой.
В начале 2000-х гг. большинство студий, создающих видеоигры, перешли на использование движков, либо выложенных в открытый доступ, либо распространяемых по лицензии крупными разработчиками, такими как id Software, Unity Technologies или Epic Games. Многие создатели игровых платформ (Microsoft с Xbox, Sony с семейством PlayStation, Nintendo и др.) часто заинтересованы в разработке и продвижении оригинальных игровых движков, позволяющих увеличить качество и объём производимого контента для своих устройств. В 2021 г. пятёрку самых популярных игровых движков на Steam представляли: Unity, Unreal, GameMaker, RPGMaker, Ren’Py (Doucet. 2021).
История игровых движков
Понятие «игровой движок» восходит к более широкому термину «программный движок» (software engine) – основному компоненту, ядру программной системы, для описания которого была применена автомобильная метафора (двигатель как источник работы машины). Разработчики игр, как и любого другого ПО, при создании служб более высокого уровня заинтересованы в ускорении и оптимизации этого процесса. Для этого они постепенно стали использовать общие программные ядра, базы данных и библиотеки, вспомогательные программы (например, отвечающие за работу с памятью, интерфейсы и др.).
Игровые движки появились позже, чем сами видеоигры, поскольку в период зарождения индустрии в силу принципиальных аппаратных (физических) ограничений игровых устройств (прежде всего аркадных автоматов) каждая игра разрабатывалась как отдельная программная сущность с уникальной архитектурой. Программисты неоднократно использовали собственные удачные наработки, но для появления устойчивых ядерных элементов не хватало стабильности и преемственности в развитии устройств и операционных систем (возникших только с появлением ПК с MS-DOS и затем Windows). До появления такой стабильности лишь один из элементов ПО сохранялся и эволюционировал при разработке новых игр для автоматов и приставок – программы, отвечавшие за отображение игры на дисплее. Например, для платформера «Super Mario Bros.» (1985) Миямото Сигэру применил наработку из другой игры Nintendo – гоночной аркады «Excitebike» (1984), что позволило менять скорость перемещения героя в пространстве (Williams. 2017).
В 1980-е гг. возник новый термин, предшествовавший появлению игрового движка, – «система создания игр» (англ. game creation system, GCS). По сути это были редакторы для создания простых пользовательских игр с небольшими изменениями, касавшимися сценария и в очень малой степени геймплея. Практически все они были рассчитаны на 8-разрядные домашние компьютеры (например, ZX Spectrum), а в 1990-е гг. переориентировались на IBM PC (Tairne. 2013). Подобный коммерческий продукт был рассчитан на обычных пользователей и мало заинтересовал профессиональных разработчиков. Однако такие системы послужили основой для многих оригинальных игровых экспериментов, предвосхитивших развитие направления инди-игр.
Понимание значимости игрового движка как ключевого инструмента разработчика пришло с появлением 3D-игр, прежде всего шутеров от первого лица. Компания id Software, создавшая «Doom» и «Quake», стала лицензировать отдельные элементы кода этих игр для сторонних студий. Это дало импульс разработке множества игр-клонов, в которых при практически неизменной базовой механике игры игровой контент (графика, сценарий, персонажи, оружие и уровни) мог значительно отличаться. Так, студия Raven Software на основе «Doom» создала игру «Heretic» (1994), получившую высокие оценки и популярность у игрового сообщества, а уже в следующем году выпустила клон «Heretic» – игру «Hexen» (1995), использовавшую модифицированный игровой движок «Doom». В 1998 г. компания Epic Games, основанная разработчиком Т. Суини, выпустила на рынок первый полноценный игровой движок Unreal Engine (Horvath. 2012).
Структура и виды игровых движков
Игровые движки, особенно созданные для одной платформы, обладают множеством сходных элементов. В то же время единого представления о компонентах игрового движка не существует в силу значительных различий самих видеоигр. Можно перечислить основные функциональные возможности, которые требуются от готового игрового движка. К ним относятся системы рендеринга (графика), физический движок (движение и взаимодействие объектов игрового мира), программы для внедрения звука, анимации, скриптов/сценариев, искусственного интеллекта, вспомогательные программы для поддержки работы с Интернетом или другими сетями, оптимизации памяти, обеспечения многопоточности, локализации и т. д.
Иногда структуру игрового движка описывают как базовый набор программ-инструментов для разработчика, вспомогательные библиотеки (т. е. сборники подпрограмм или объектов, используемых для разработки ПО) и программы настройки и поддержки. Компоненты базового набора зависят от задач разработчиков, но часто упоминаются такие производные понятия, как «физический движок», «графический движок» и «звуковой движок». Многие игровые движки, созданные после 2000 г., представлены программами для работы и координации других программ – это визуальные инструменты, создающие интегрированную среду разработки (англ. integrated development environment, IDE) (Unity Manual).
Игровые движки можно разделить на два вида: 1) визуализированные, имеющие отдельный редактор; 2) программистские, запускаемые через обычную среду разработки. В свою очередь, они могут различаться по форме распространения: открытые (open source), или свободные, т. е. бесплатные, и проприетарные, требующие покупки лицензии. Некоторые компании – разработчики игровых движков переводят программные инструменты в открытый доступ по мере их устаревания. Такой подход стал традицией в id Software, где в 1999 г. разработали игровой движок id Tech 3 (и на его основе выпустили видеоигру «Quake III Arena»), а в 2005 г. после очередного обновления исходный код движка и игры стали открытыми.
Игровые движки также различают по специализации, т. е. в зависимости от ориентации на отдельные видеоигровые жанры или группы жанров. Например, платформер или пошаговая стратегия обычно имеют совсем другие требования к движку, чем трёхмерные шутеры, особенно многопользовательские. В то же время опыт использования игровых движков показывает, что многие из них применимы и для других жанров – например, на основе Unreal Engine, разработанного для шутеров от первого лица, были созданы шутер от третьего лица «Gear of War» (2006) и RPG-игра «Grimm» (2004) (Jason. 2009).
С ростом специализации и технических требований к видеоиграм игровые движки всё чаще понимаются не как единый набор программ, созданный одним разработчиком, а как сборка специализированных компонентов. В рамках компонентно-ориентированного программирования (англ. component-oriented programming, COP) отдельные компании создают инструменты, решающие специализированную задачу (например, физический движок от Havok, звуковое ПО от Wwise или FMOD) и хорошо пригодные для гибкой интеграции в интерактивные медиа и видеоигры. И полноценные игровые, и отдельные программные движки, библиотеки и шейдеры (программы для исполнения процессорами видеокарты) считаются одним из самых сложных для написания и настройки видов приложений, поскольку требуют точной координации аппаратных и других программных средств.