Игры бывают разные, большие и маленькие, триA и супер инди, в компаниях с сотнями разработчиков и что создаются гениями-одиночками. Редко их делают с нуля и пишут код только игры, чаще пишут игровые тулы, редактор и параллельно пишут саму игру. За всей этой многомиллиардной индустрией стоит код, много кода, очень много кода. Игровые движки и фреймворки – мощные инструменты, которые помогают разработчику творить его идеи и создавать увлекательные игровые миры. Это каркас, на котором строится все игровые вселенные, они включают в себя сотни инструментов, библиотек и ресурсов, позволяя разработчикам превратить строчки кода в театр для одного зрителя.
Существует более сотни игровых движков, каждый из них содержит как минимум одну фичу которой нет ни в каком другом. Всех возможностей вместе нет ни в одном, и это прекрасно — иначе бы такой движок захватил мир. Хм, Unreal5 ты ли это? Иногда полезно пробежать по release notes движка, чтобы оставаться в курсе последних новостей. Возможно вы разрабатываете свое решение и эта статья натолкнет вас на новые идеи. Готовы узнать что ваша любимая игра была сделана не на Unity, а на православном SDL?
Когда я работал в студии EA Spb, там был отдельный инженер, который отслеживал изменения в новых версиях и вел бААААльшую такую таблицу какие возможности в каком движке есть. К сожалению таблица была действительно большая, что-то около 800+ столбцов-описаний на больше чем сотню движков, и скопировать её возможности не было. А жаль, работа была проведена по истине титаническая. Не меньше тратилось времени на её поддержание в актуальном состоянии, если для этого потребовалась отдельная позиция. Но список движков был в свободном доступе, да и вы можете при наличии времени составить его сами. Я не буду расписывать особенности каждого движка, понятно что каждый из них это мощный, универсальный, с кучей возможностей и тд и тп. Просто приведу ссылку на гитхаб и пару-тройку игр, если вас что заинтересует вы сможете сами пройти по ним и детально ознакомиться что к чему. Я веду небольшую таблицу с игровыми движками и играми, которые были на них сделаны. Если что-то не увидели, добавляйте в коментах. По какому принципу движки попали в этот список — с каждым из них я столкнулся и что называется потрогал руками, где-то были интересные игры, где-то попробовал собрать пример, а где-то починить баг или добавить фичу.
nCine (MIT/С++)
Игровой движок с открытым исходным кодом, предоставляющий разработчикам средства для создания 2D и 3D игр на различных платформах. Предлагает обширный набор инструментов для разработки игр, включая поддержку множества операционных систем, графику, аудио, анимации и физику. Интересен для изучения компонентной системы и системы ивентов.
MonoGame (MPL/С#)
https://github.com/MonoGame/MonoGame
Аналоги (https://fna-xna.github.io/)
Фреймворк для разработки, созданный на основе платформы Microsoft XNA. Предоставляет инструменты и библиотеки для создания кросс-платформенных игр, поддерживая несколько операционных систем, включая Windows, macOS, Android, iOS, Linuх. Этот движок я изучал параллельно с шарпом, в качестве практики применения языка. Ну а проекты на нем, популярны и известны.
RayLib (ZLIBL/C/Lua)
https://github.com/raysan5/raylib
Легковесная и простая в использовании библиотека для разработки игр и приложений. Написана на C и поддерживает несколько платформ( Windows, macOS, Linux), обеспечивает доступ к графическим, звуковым и input ресурсам. Отличным инструмент для начинающих разработчиков игр. Поддерживает несколько языков программирования (C, C++, C#, Python).
Каких то известных игр я не нашел на нем, но есть хороший туториал по разработке игры. Движок был интересен в плане реализации биндинга lua-c.
Love2d (MIT/C++/Lua)
https://github.com/love2d/love
https://gitlab.com/stone-kingdoms/stone-kingdoms
Минималистичный, но мощный фреймворк для создания 2D игр. Обладает активным сообществом и множеством доступных библиотек и плагинов. Сообщество развивает функциональность движка и помогает создавать разнообразные игры. C этим движком я столкнулся когда помогал с разработкой игры StoneKingdoms (это такой клон Stronghold’a с открытыми исходниками и благословением на разработку от авторов оригинальной игры)
Slwjgl3 (Apache 2.0/java)
https://github.com/LWJGL/lwjgl3
https://libgdx.com/
https://jmonkeyengine.org/.
Библиотека для разработки кроссплатформенных 2D и 3D приложений и игр на языке Java. Предоставляет доступ к низкоуровневым библиотекам, таким как OpenGL, OpenAL и GLFW, поддерживает многозадачность и широкие возможности для реализации графики, звука и ввода. Разбирался с исходниками mindustry, и параллельно смотрел саму либу.
Cocos-Engine (Propritary/C++)
https://github.com/cocos/cocos-engine
https://github.com/cocos2d/cocos2d-x
Предоставляет богатую библиотеку ресурсов, инструменты для анимации и физики, поддержку различных языков программирования, включая C++, JavaScript и Lua, широко используется для создания красочных и интерактивных игр на множестве платформ. С движком столкнулся еще в 2014 в EA, на нем было сделано несколько проектов питерской студии.
Phaser (MIT/JS)
https://github.com/photonstorm/phaser
Поддерживает спрайты, тайлмапы, анимации, параллакс-фоны и другие графические элементы, делая создание визуально относительно легким и эффективным. Включает физический движок Arcade Physics для управления столкновениями, гравитацией и другими физическими эффектами в игре. Очень простой для разработки особенно если не знаешь html, за вечер в свое удовольствие накидал клон динозаврика из хрома, с астероидами и поеданием неандертальцев 🙂
Babylon.js (Apache 2.0/TypeScript)
https://github.com/BabylonJS/Babylon.js
Использует WebGL для отображения трехмерных сцен, обеспечивая хорошую производительность. Поддерживает рендеринг с использованием PBR и освещения, включая рейтрейсинг в реальном времени. Имеет активное и обширное сообщество разработчиков, которые пишет плагины и расширяет функциональность. Как и следующий в списке изучал на нем JS для саморазвития.
PixiJS (MIT/TypeScript)
https://github.com/pixijs/pixijs
Широко используется для создания веб-игр, интерактивных анимаций, рекламных баннеров и других визуальных приложений. Благодаря своей производительности и гибкости, остается популярным среди веб-разработчиков.
The Forge (Apache 2.0/C++)
https://github.com/ConfettiFX/The-Forge
Поддерживает несколько платформ, включая Windows, Linux, Android, iOS и консоли нового поколения. Движок разработан с учетом максимальной производительности и оптимизированные алгоритмы для обеспечения плавной работы игр даже на слабых устройствах (по заявлениям авторов). Обеспечивает доступ к современным графическим API, таким как Vulkan и DirectX 12. Обратил внимание на этот движок, после того как ребят упомянули среди разработчик одной из игр про SpiderMan. Попробовал собрать примеры с их сайта, но не получилось.
HaxeFlixel (MIT/Haxe)
https://github.com/HaxeFlixel/flixel
Хотя и предоставляет мощные инструменты для разработки, достаточно сложный для новичков в разработке игр. Точно потребуется время, чтобы освоиться с фреймворком и его архитектурой (которой не то чтобы нет, но она не всегда есть). Несмотря на популярность, у него относительно ограниченное количество ресурсов и документации по сравнению с другими игровыми движками. Сообщество последнее время слабо развивается.
Kha (zlib/Haxe)
Низкоуровневая либа для создания игр и мультимедийных приложений, ориентированная на переносимость. Можно представить его как более мощную версию библиотеки SDL. Искал фреймворк на замену SDL2, все хорошо, куча возможностей. Если бы был написан на плюсах, вообще бы цены не было.
PixelBox.js (MIT/Js)
https://github.com/cstoquer/pixelbox
Библиотека для создания пиксельных и ретро-стильных игр и приложений в браузере с использованием JavaScript. Предоставляет разработчикам набор инструментов (не очень большой на самом деле) для работы с пиксельной графикой, звуком и управлением, подходит для создания игр в стиле 8-битных и 16-битных консолей. Относительно новая и малоизвестная библиотека, но предоставляет хорошие инструменты для создания ретро-стильных игр. Собрал по примерам игру и понял, что восьмибитные игры не моё.
OpenFL (MIT/Haxe)
https://github.com/openfl/openfl
Фреймворк для разработки мультимедийных и интерактивных приложений, включая 2D и 3D игры, анимации, визуализации и многое другое. Является современной альтернативой Adobe Flash и предоставляет возможность создавать кроссплатформенные приложения, используя язык программирования Haxe. Очень понравилась в свое время игра Papers, Please и пошел смотреть на чем и как это чудо сделали, заодно немного подучил Haxe.
SFML (zlib/C++)
https://github.com/SFML/SFML
https://github.com/ObEngine/ObEngine
SFML (Simple and Fast Multimedia Library) — это бесплатная и opensource библиотека для разработки мультимедийных приложений и игр. Написана на C++, предоставляет простой и понятный интерфейс для работы с графикой, аудио, сетью и инпутом, хороший выбор для начинающих разработчиков, чтобы познакомиться с хорошо спроектированным API. Есть пара хороших проектов, но они увы с закрытыми сорцами.
SDL2 (zlib, C)
Либой пользуюсь с 2009 года, реальной альтернативы по простоте и подключаемым модулям не нашел. Используется в основном не как самостоятельный фреймворк, а в качестве дополнения к уже существующим для облегчения процесса портирования, позволяет запустить минимальное приложение для почти любой платформы от Винды до HaikuOS, на которое уже можно добавить нужный функционал. Игры, созданные с использованием SDL2, это известные проекты: «Hearthstone: Heroes of Warcraft» от Blizzard Entertainment, «Stardew Valley» от ConcernedApe, «Terraria» от Re-Logic и множество других. Сапортится ребятами из Valve.
Хоть SDL и не является полноценным игровым движком, игры на нем разрабатывать достаточно просто. Это мой проект выходного дня, сделан на SDL + C++ + Js в качестве конфигов (https://github.com/dalerank/Akhenaten)
Flame (MIT/Dart)
https://github.com/flame-engine/flame
Flame Engine — это движок для создания игр, полностью на Dart. Обеспечивает создание красочных игр, которые (по словам разработчиков) можно запускать на разных платформах, включая мобильные устройства и веб-браузеры. Создан с учетом возможности интеграции с экосистемой Flutter, делая его удобным для мобильных разработчиков. Увидел у ребенка на телефоне, какой-то очередной идлер про муравьев, который бесстыдно просил деняк и показывал рекламу каждые пять секунд, от рекламы отучил и выдал таблетку от жадности. Заодно узнал, что есть вот такой интересный движок на дарте. Попробовал запустить примеры: на винде не работало (года полтора назад), на линуксе и андроиде запустилось.
Allegro (zlib/plain C)
https://github.com/liballeg/allegro5
Кросс-платформенная либа, ориентированная на создание игр. Достаточно низкоуровневая, чтобы обеспечивать хорошую производительность при большом объеме данных. В целом абстрагирует разработчика от рутинных вещей но не закрывает возможности переделать все под себя. Тем не менее, Allegro не является игровым движком, скорее комбайн с кучей возможностей, игру придется писать самим. Самый известный пример использования это игра Factorio, но уже больше года автор отказывается от Allegro в сторону своих велосипедов.
AndEngine (Apache 2.0/Java)
https://github.com/nicolasgramlich/AndEngine
Древний движок, сейчас не развивается. Некоторые из игр «Cannon Ball», «Zombie Dash», «Plumber». Заря так сказать мобильного игростроя, дал старт другим популярным движкам, отдельные заимствованные части исходного кода и архитектуры встречаются в LibGDX, Cocos2d, Godot Engine, Panda3D, Phaser. Имел хороший API, что делало его неплохим выбором для прототипирования и обкатки разных мелких фич. Использовал его в паре мелких игр для ведроида, когда надо было сделать и показать MVP «уже вчера».
GameMaker (Licensed)
Даже самый начинающий разработчик может сделать игру, популярен настолько, что его начали использовать в школах на уроках программирования, с сыном делал на нем лабу, Hotline Miami конечно не вышло, но за неделю удалось сделать сделать аналог angry birds на минималках. Визуальное программирование это, конечно, штука удобная до поры до времени, но я все же больше предпочитаю плюсы и нормальный код. Где то на форуме я нашел слоган к движку: однажды здесь была создана игра, а потом и вторая, и третья… и так каждый раз, когда кто-то заходил в GameMaker. Лично мне движок не понравился свой переупрощенностью, хотя кому как.
Defold (Apache 2.0/C++)
https://github.com/defold/defold
Сам движок написан на C++, очень хорошо оптимизирован, есть хороший биндинг для Lua. Поддерживает iOS, Android, HTML5, Windows и macOS. Широко использует компонентную архитектуру, почти все системы в движке выполнены в виде компонент и могут быть заменены своими или переписаны, что делает создание и управление компонентов очень удобным. Один из движков, который поддерживает совместную работу через плагины. Каких известных игр я на нем не видел, движок заинтересовал в первую очередь реализацией hotreloаd скриптов (lua), достигается это за счет песочницы для каждого запущенного скрипта. Используется легковесная lua vm, которую перезапускают на лету при изменении кода в скрипте.
GB-Studio (MIT/C)
https://github.com/chrismaltby/gb-studio
Проект родился на gamejam «Bored Pixels 3» за неделю, а потом перерос в полноценный движок для создания мини игр в стиле GameBoy. Простой, интуитивным и легкий в использовании. Действительно умеет делать ROM для GBA, собственно так я с ним и познакомился, когда пытался сделать простенькое приложение для этой платформы.
TileEngine (MIT/C)
https://github.com/megamarc/Tilengine
Графический движок с открытым исходным кодом для создания 2D-игр с использованием тайловых карт, спрайтов и палитр, что позволяет делать игры похожие по стилистике на NES/Sega конца 90-х. Также в движке реализованы на софтовом уровне разные хардварные решения консолей того времени. Per-Column Offset — эффект вибрации, часто ассоциируется с старыми телевизорами и мониторами, хотя был реализован впервые в Sega MD. Per-Pixel Displacement — изменяет положение пикселей на экране, создавая искажения и иллюзию деформации изображения. Использовался в 2д играх для создания эффекта водной поверхности или других искажений. И много других. Сейчас репо почти не обновляется, автор пишет вторую версию движка. Движок заинтересовал в первую очередь реализацией разных эффектов для спрайтов, разного рода наложений, мозаики и слоев.
Godot (MIT/C++)
https://github.com/godotengine/godot
История Godot началась в 2007 году, когда аргентинский разработчик Juan Linietsky начал работать над игровым движком под названием «D.». Также в то время он работал в Аргентинском офисе Square Enix в команде по разработке внутреннего движка студии. В 2014 движок был впервые опубликован на гитхабе и через месяц собрал свою первую тысячу звезд, тогда же автор получает грант от Mozilla для продолжения разработки, еще через год гитхаб и Microsoft также выделяют гранты на развитие, а репо разменивает первые 10к звезд. Godot стал платформой для множества игр, включая инди-проекты и крупные коммерческие игры, интересен опять же своим компонентным подходом к разработке. По набору компонентов, ассетов, уроков и размеру сообщества вполне может потягаться с Unity/Unreal. Есть много интересных фичей в редакторе, которые отсутствуют или ограничены в других редакторах, например возможность настраивать все и вся через внутренние скрипты, от игры до самого редактора.
CryEngine (Proprietary)
https://github.com/CRYTEK/CRYENGINE_ReadMe
https://github.com/ValtoGameEngines/CryEngine
https://aws.amazon.com/lumberyard/
https://github.com/o3de/o3de/
Какое-то время исходники движка были доступны на гитхабе, но теперь для доступа к актуальным сорцам надо запрашивать явки и пароли на сайте, который лежит уже больше полугода. Движок очень интересный в плане применения передовых разработок (на конец 2017 года). Поставлялся с мощным редактором под названием Sandbox, который позволял создавать и редактировать уровни, добавлять объекты, текстуры и настраивать логику прямо во время игры в режиме активной паузы, один из первых движков, которые начали применять BT (Behavior Tree), для любых объектов на сцене. В свое время поражала иммерсивность Prey, и возможность взаимодействия с объектами, поэтому как только движок появился в открытом доступе я стал разбираться как он работает. Amazon форкнули его в 2015 для своего LumberYard и продолжили развитие, в итоге он превратился в O3DE
Flax (MIT/C++)
https://github.com/FlaxEngine/FlaxEngine
Движок от одного из архитектов Frostbite, ключевой особенностью возможность писать скрипты на «с++», это конечно не настоящий c++, но очень похож. Если вам, как и мне, комфортно использовать фигурные скобки, то движок должен понравиться. Если не требовать от него шаблонов, то почти c++. Недавно появилась еще и возможность hotreload для с++-скриптов, что очень ускоряет разработку. Движок достаточно взрослый, разработка велась с 2012 года, но исходники стоили денег. Обратил на него внимание из-за его синтаксиса, с++ не очень-то популярен в виде скриптового языка в игровых движках.
Panda3D (MIT/C++)
https://github.com/panda3d/panda3d
Развитие Panda3D началось в начале 2000-х годов как проект Нью-Йоркского университета под руководством доктора Дэвида Фокса и Disney Interactive Studios. Движок разрабатывался для мультимедиа приложений и презентаций, впоследствии был открыт для сообщества. Интересен прежде всего своей библиотекой шейдеров, большинство из которых запатентованы Диснеем, но никто не мешает подсмотреть реализацию.
OGRE (MIT/C++)
https://github.com/OGRECave/ogre
https://www.ambiera.com/coppercube/ (платный саппорт)
Работал с этим движком в Transas, на нем была построена система видеонаблюдения и АРМ оператора. Не только конечно на нем, в связке с Qt. Движок на тот момент был достаточно мощный, с поддержкой новомодных фич, хорошей документацией и дружелюбным сообществом. Отличительной возможностью сейчас авторы ставят возможность скомпилить его для web в пару кликов (https://ogrecave.github.io/ogre/emscripten/)
DagorEngine (Уже BSD/C++)
https://github.com/GaijinEntertainment/DagorEngine
Ну что тут сказать, хороший движок от не менее известной студии. Четыре года положено на его доработку для свича и appletv. На нем бегала Тундра и Cuisine Royale. Достаточно сложный в освоении, явно писался программистами для программистов. Награждает освоивших возможностью запускаться на любом утюге, с железом похожим на проц и видеокарту. Мое мнение — открывать надо было еще 8 лет назад, тогда был шанс потягаться c Unreal. Большие платформы — все что есть в наличии, даже собирали под байкалы его. Мобильные платформы, судя по мобильной тундре, тоже поддерживаются. Улитки молодцы, а картошка вот что-то не торопится ничего выкладывать в опенсорс.
Irrlicht (C++)
https://sourceforge.net/p/irrlicht/code/HEAD/tree/
https://github.com/skylicht-lab/skylicht-engine
C этого движка я начинал знакомство с игростроем, некоторое время сапортил UI фреймворк NerpaGUI, который был почти «официальным» для движка. С полноценным ui редактором в стиле Qt, рефлексией и скриптами внутри виджетов (это 2008-09 года). Что удивительно, движок до сих пор поддерживают, последний комит был пару недель назад. Поддерживают, но не развивают и не меняют, все так и осталось на уровне конца нулевых.
Unreal (C++)
https://github.com/EpicGames/UnrealEngine
Великолепный движок, настоящая жемчужина среди игровых движков! Этот движок способен вдохнуть жизнь в самые амбициозные проекты, надо только где-то достать 64Гб оперативки, а то 32 уже не вывозят. Blueprints — гениальное решение для программирования без кода, которое открыло двери в игрострой любому желающему. А диалект unreal c++, похоже скоро будет новым стандартом. Количество написаных плагинов для движка скоро перевалит за миллион, проще наверное сказать для чего плагины не написаны, и обычно это все отдается в опенсорс или условные пять баксов за доступ к коду.
X-Ray (MIT/C++)
https://github.com/OpenXRay/xray-16
Исходники первого Сталкера, частично утекшие в сеть и огромная работа сообщества по реверсу оригинала привела к тому, что сейчас игра на этом движке выглядит лучше оригинала. Особенности? Свой алокатор памяти, своя векторная математика, свои строки, свои контейнеры, не свое только DX9 — классика игростроя нулевых. Примерно так это все и делалось в начале 2000х с разной степенью упоротости, и на это действительно были причины.
Заключение
Вот такая получилась сборная солянка воспоминаний, в каждом есть свои особенности, каждый интересен, в каждый вложено сотни, если не тысячи человеко-часов разработки. И каждый нашел свою нишу.
Другие движки, с которыми я сталкивался, но дальше обзора дело не шло.
Bevy: https://github.com/bevyengine/bevy (Rust)
Ceramic: https://github.com/ceramic-engine/ceramic (MIT/Haxe)
Pygame: https://github.com/pygame/pygame (LGPL/Python)
Dome: https://github.com/domeengine/dome(MIT/C)
Mach: https://github.com/hexops/mach(Proprietary/Zig)
PythonArcade: https://github.com/pythonarcade/arcade(MIT/Python)
ClanLib: https://github.com/sphair/ClanLib(zlib/C++)
Just a Neat Game Library: https://github.com/jhasse/jngl (zlib/c++)
Tetra: https://github.com/17cupsofcoffee/tetra(MIT/Rust)
Ursina: https://github.com/pokepetter/ursina (MIT/Python)
Tofu: https://github.com/tofuengine/tofu(MIT/C/Lua)
Ultaviolet: https://github.com/UltravioletFramework/ultraviolet (MIT/C#)
Macroquad: https://github.com/not-fl3/macroquad (MIT/Rust)
GDevelop: https://github.com/4ian/GDevelop (MIT/Java)
Stencyl: https://github.com/Stencyl/stencyl-engine (Haxe)
Heaps: https://github.com/HeapsIO/heaps(Haxe)
MicroStudio: https://github.com/pmgl/microstudio(MIT/JS)
TIC-80: https://github.com/nesbox/TIC-80(MIT/C)
AGS: https://github.com/adventuregamestudio/ags(C++)
Oxygine: https://github.com/oxygine/oxygine-framework(C++)
FlatRedBall: https://github.com/vchelaru/flatredball(C#)
Starling: https://github.com/Gamua/Starling-Framework(ActionScript)
LiteEngine: https://github.com/gurkenlabs/litiengine(Java)
Duality: https://github.com/AdamsLair/duality (C#)
Stride: https://github.com/stride3d/stride(C#)
NeoAxis: https://github.com/NeoAxis/NeoAxisEngine(C#)
WikedEngine: https://github.com/turanszkij/WickedEngine(C++)
JMonkey: https://github.com/jMonkeyEngine/jmonkeyengine(Java)
Fyrox: https://github.com/FyroxEngine/Fyrox (Rust)
Magnum: https://github.com/mosra/magnum(C++)
Lumix: https://github.com/nem0/LumixEngine (MIT/C++)
CastleGame: https://github.com/castle-engine/castle-engine (Pascal)