Разработка трёхмерного игрового движка
Уже долгое время пишу игровой движок общего назначения (т.е. не исключительно для какого-то одного жанра). Естественно, под GPL. Естественно, онтопик – гражданин перого класса. Использую инфраструктуру Qt. Сейчас проект состоит из:
-
Библиотеки
libKawaii3D
, предоставляющей классы для построения одной или нескольких трёхмерных сцен. -
Библиотеки, облегчающей создание различных Renderer плагинов
libKawaiiRenderer
. -
Renderer плагина
libMisakaRenderer
. Использует OpenGL 4.5 Core + ARB_bindless_texture. -
Renderer плагина
libKurisuRenderer
. Использует Vulkan, Glslang и SPIRV-tools. -
Плагина загрузчика ассетов
libKawaiiAssimp
. Загружает модели, меши и сцены из файловой системы, используя библиотекуlibAssimp
. Примеры передаваемых строк:"models/preCombinedCastle.fbx"
,"file:///usr/share/somegame/character.dae"
,"/home/user/models/helicopter.obj"
. -
Плагина загрузчика ассетов
libKawaiiFigures3D
. Загружает некоторые простые меши – куб, сферу, тетраэдр, октаэдр, икосаэдр, тор, квадрат и плоскость. Примеры передаваемых строк:":/cube_x5"
,":/octahedron_x0.33"
,":/torus"
. -
Библиотеки
libKawaiiWorlds
. Игровой движок. Отвечает за загрузку и хранение ассетов, физику, переходы между локациями, сетевой мультиплеер, воспроизведение музыки и звуков, обработку пользовательского ввода, ландшафты с картами высот и вот это вот всё. -
Библиотеки
libKawaiiWorlds_qml
. Поддержка QML и JavaScript дляlibKawaiiWorlds
. Предоставляет классы обёртки над классами и структурами движка. -
Приложения
KawaiiWorldsViewer
. Загружает игры, читая специальный json файл. Таким образом избавляет большинство игр от необходимости иметь собственный бинарный исполняемый файл и обеспечивает независимость от ОС и, до определённого предела, архитектуры CPU. Предполагается, что такие игры-миры будут использовать JSON файл для указания используемых моделей, текстур, шейдеров, материалов и прочего; JavaScript для игровой логики и QML для разметки GUI.
Повесточка:
-
Пишу игру – пошаговую мультиплеерную стратегию. Цель сделать так, чтобы у соперника не осталось городов (либо штурмануть, либо уйти в глухую оборону и ждать пока монстры спушат супостата по самые уши). Осаду городов планирую сделать в стиле TowerDefence, драку между юнитами – исключительно на глобальной карте. В целом имеется достаточно подробная задумка и лимитированный скоуп. Слишком сильно распространяться сейчас не хочу – пока не доделаю играбельный прототип.
-
Как придумать название игре? Может ли ЛОР помочь с этим? :)
-
День после. С достаточно большой уверенностью, могу сказать, что до играбельного прототипа я дотолкаю игру довольно скоро. А что дальше? Работает ли краудфандинг для движков / игр? Если да, то что на него нужно предоставить? На каких площадках? Если нет, то как найти патронов / инвесторов? Понятно, что в этой стране геймдев мёртв и посыпан токсичной радиоактивной пылью мобилькерами, так что искать нужно среди интернационалов. Интересны ли энтузиасты, например Valve, или они только место в Стиме продадут? Кому бывают интересны?
-
Было бы классно обрасти командой единомышленников – художников, композиторов, левел дизайнеров, программистов, девопсов и прочих. Сейчас тащу в одно, в меру отъетое, лицо :D
-
Средства для локализации / интернационализации игр-миров на уровне движка – нужно ли и в каком виде?
-
Позиционный звук – что для него вообще использовать?
/*в игре юзаю QML-ский AudioEngine, но понятно, что это "ну такое"*/
Первым в голову приходит OpenAL, но он в последних версиях спроприетарился и скурвился. Использовать старые версии? Или есть современные решения? -
Поддержка языков кроме C++ и JavaScript – на сколько нужно? Сейчас поддерживается C++, так как сам движок написан на нём, так что достаточно было не превращать его в монолитное монструозное. А JavaScript, так как Qt имеет всю необходимую инфраструктуру для этого, ну и сам язык довольно простой, да. Пока склоняюсь к тому, не особо приоритет, а всякие пайтоны, lua и прочие расты могут подождать.
-
Сейчас есть PKGBUID-ы под этот наш Арч и они хороши. Но что бы придумать с поддержкой других десктопных дистров? Есть скрипты и даже CMakeLists.txt, чтобы скачать все модули движка в уютный хомячок и там же собрать. Нужно ли подобное? Стоит ли их поддерживать / обновлять и т.д. или лучше сделать разбиение на пакеты также как для Арча, с использованием, например CPack?
Скриншотики: https://imgur.com/a/zhHhcnw
Исходники: https://gitlab.com/KawaiiGraphics