Разработка собственного игрового движка: итоги 2023 года

Мод для Thief: The Dark Project - The Black Parade на моём движке Force Tech
Мод для Thief: The Dark Project - The Black Parade на моём движке Force Tech

Как раз в конце прошлого года я начал вести публичные каналы, посвященные моему игровому движку - Force Tech. Прошел ровно год, и именно за этот прошедший год, пожалуй, и произошло больше всего положительных изменений в проекте, из-за более тесного контакта с сообществом. Особенно хотелось поблагодарить Артёма Башева за регулярные пожертвования и Mic'а, спасибо за ваш вклад! Кстати, за этот год на каждом из каналов собралось более сотни подписчиков! Спасибо вам, друзья, за интерес, проявляемый к проекту!

Самым значимым событием в уходящем году был очередной релиз Dark Engine Viewer 0.6.9, программы, использующей движок Force Tech, которая готовилась почти два года и вышла в июле. Многие смогли впервые притронуться к тому, за развитием чего долгое время наблюдали. А кто-то, я надеюсь, обрёл для себя полезный инструмент в виде удобной утилиты для менеджмента своих игровых ассетов ;).

Из планов, которые "не сложились" - это видео с демонстрацией возможностей Force Tech. Я написал сценарий, надиктовал материала и смонтировал звук продолжительностью 20 минут на двух языках: русском и английском (ох, на английском оказалось совсем непросто). Смонтировал около двух минут видео и только потом осознал, что структура ролика неправильная, не дает представления о движке, и надо многое переделывать. Что ж, ролик остаётся в планах, надеюсь, на новой версии движка он будет более презентативен.

Сейчас, как и заявлено в опубликованной не так давно Дорожной Карте, во всю идёт работа над новой архитектурой движка, основанной на ECS. Немало времени ушло на обдумывание и проектирование, поэтому наиболее активный кодинг начался только в ноябре. Я пришёл к выводу, что самым простым и эффективным способом "рефакторинга" будет построение всей архитектуры с нуля на новом фундаменте ECS, как бы мне ни хотелось сохранить прежнюю. Логика переносится небольшими частями на новые рельсы, и правится с учётом многолетнего опыта, приобретенного за последние годы работы в профессии разработчика C++.

Надо отметить, что парадигма Data Oriented Design, после Object Oriented Design, довольно непривычна, и многие вещи приходилось переосмысливать и отказываться от ООП с определенными усилиями ;).

На данный момент основные части движка спроектированы, и уже реализованы системы обеспечивающие рендеринг, основанный на полном стриминге данных. Кроме того, как и писал ранее, я пытаюсь сразу учесть и сделать правильно огромное количество накопившихся архитектурных пожеланий, которые в обычном режиме потребовали бы массу переделок. К примеру, работа с геометрическими данными. Сейчас удалось реализовать системы таким образом, чтобы сократить многократное перекладывание вершин из одной структуры в другую перед отрисовкой. Пока ещё о результатах говорить рано, но ожидается значительное увеличение скорости загрузки данных, в том числе и за счёт стриминга. В целом, я считаю, всё идёт согласно планам, указанным в дорожной карте.

В качестве небольшой иллюстрации прикладываю этот странный кривой скриншот 😁.

ECS "beyond-omega" prototype
ECS "beyond-omega" prototype

Пусть он не вызывает у вас недоумение и ропот, здесь работает стриминг, и системы ECS! 😆 Для вывода этой кривой картинки понадобилось написать почти полмегабайта кода, а раз картинка есть, значит прототип работает! ;)

В новом году желаю всем здоровья, сил и достаточной целеустремлённости для реализации собственных проектов и планов! ;) Со своей стороны, поскольку уже есть что показывать, надеюсь, будет получаться чаще радовать вас интересными подробностями о разработке.

P.S. За последние пару месяцев, пока разрабатывал новую архитектуру движка, появилась идея зафиксировать этот опыт в виде статьи. Думаю, это будет очень актуально, поскольку в интернете мало информации о разработке именно архитектуры игровых движков. Так что, можно считать это своего рода анонсом.

6969
36 комментариев

Напоминает thief)

3
Ответить

Да, это он и есть. Расширил описание скриншота. Мой движок работает с ресурсами Thief и System Shock 2.

6
Ответить

Удачи!
Я не понимаю большую часть твоих статей о работе над движком, но всё равно очень интересно читать.

2
Ответить

Спасибо 😄, я вроде бы стараюсь писать не зубодробительным техническим языком, но всё равно, бывает, недостаточно ясно формулирую мысли. Спасибо за оказываемое доверие! 😉👍

2
Ответить

А какой смысл создавать нарочно устаревший движок? Или тупенький чего то не понимаю.

Ответить

Смотря, что значит "устаревший". Для чего люди сегодня создают игры с заведомо "устаревшей" графикой? Типа, Dusk, или Ultrakill? Да, это не UE, но не все умеют работать с фотореалистичной графикой, поэтому, если блюпринты не нужны, а цель, к примеру, стилизованная игра, как Dishonored, например, то зачем UE?

4
Ответить

Сам интересуюсь темой ECS. Хотелось бы статью с большим кол-вом технических деталей. Очень интересно узнать, как у вас готовят ECS. Архетипы или SparseSet? Как решаете проблемы с графами и иерархическими структурами данных? Используете ли для обмена данными между системами какую-нибудь систему событий? Смотрели ли в сторону готовых реализаций, например entt?

1
Ответить