Из чего состоит движок для игры?

Актуальная тема для движкописателей. Из чего состоит движок? Каков его состав? Это абстрактные вопросы, и общий ответ на них есть. В данной статье сделаем смелую попытку описать состав движка для игры)

Примечание: мы все еще учимся, поэтому данная статья будет постепенно дополнятся))

Примечание: я намерено не использую понятие игровой движок, потому что в моем понимании это не движок для игры, хотя судя по всему игровой движок  в некоторых случаях может относится к понятию движка для игры. Вообще игрвоой движок входит в состав движка для игры))

Абстрактность заключается в специфики проекта, его требованиях и характеристиках.

Общность ответа состоит в общей характеристики ключевых составных частей движка.

В разных проектах состав движка может быть разный, все зависит от требований и предоставляемых возможностей.

Ключевые составные части движка для игр:

  • графика, необходимо выбрать GAPI — графическое API, от него многое зависит (DirectX 9/10/11/12, OpenGL, Vulkan и прочее)
    • описание мира 2d/3d, с применением frustum culling (рисовать только то что видит сейчас камера), а также с occlusion culling (отбрасывать все то что находится в поле зрения камерой, но загорожено другими объектами, то есть невидимо камере)
      • статическая геометрия (ландшафт, здания и все то что не будет двигаться) с лодами
      • растительность (деревья, кусты, трава), с лодами
      • анимация (скелетная) (анимированные модели, те же персонажи)
      • освещение (статическое/динамическое, forward render/deferred shading/lpp)
      • тени
        • глобальные (PSSM — Parallel-Split Shadow Map)
        • локальные (Shadow map)
      • материалы
        • отражения
        • преломления
        • полупрозрачность (сложность зависит от метода освещения)
    • частицы/партиклы (огонь, дождь, дым, искры)
    • декали (к примеру следы от выстрелов, столкновений)
    • gui — графический пользовательский интерфейс (миникарта, полоска здоровья, различные кнопки)
    • постпроцесс (туман, коррекция цвета, глубина резкости, ssao, lens flare, bloom, лучи, антиальясинг, прочее)
  • звук
    • пространственный (зависит от расположения слушателя в игровом мире)
    • фоновый (не зависит от расположения слушателя в игровом мире)
  • физика
    • трассировка лучей и определение столкновений
    • физика твердых тел
    • рэгдоллы
  • ввод данных от игрока (с клавиатуры, мыши, геймпада и прочее)
  • ИИ — искусственный интеллект
  • игровые объекты
  • сценарий/сюжет игры
  • редакторы
    • уровней
    • материалов
    • партиклов
    • прочие
  • сеть (опционально)

Наверняка что-то упустил))

Дополнительные моменты

Еще множество нюансов внутри каждой подструктуры, зависящие от множества факторов. К примеру если выбрать deferred shading и в качестве GAPI DirectX9 то возникают большие проблемы с полупрозрачными объектами.

Во главе всего этого стоит архитектура, потому что именно она задаст основной тон и сложность процесса разработки. Неудачная архитектура при внедрении нового слоя/функционала может разрушать нижележащие слои. Для примера приведу наш SkyXEngine, в 2016 году он начал переписываться на четвертый раз, а все из-за плохой архитектуры, которую выбирал именно я)) Вместо того чтобы опять переписывать движок, можно было бы взять и доделать его, но архитектура не давала.

Многие составные части движка должны иметь связь и взаимодействие с другими составными частями. И архитектура должна этому способствовать. Физика должна единожды брать информацию из геометрии, растительности.

Все это должно управляться и иметь единый контроль в каком-то месте движка. К примеру можно создать основной цикл обновления, который будет обновлять все составные части движка и производить рендер.


Движок состоит из множества бессонных ночей и трудных дней, тонны кода и нервов, разочарования и негодования, ошибки и оплошности все это состав движка. Но когда видишь свое творение в действии … ощущаешь себя творцом, создателем (да, читатель, ты правильно понял)!

Перед началом разработки следует задать себе вопрос: что я хочу делать: разрабатывать игру или разрабатывать движок?

И надо четко ответить на него, нельзя так просто взять и создать движок, такого не бывает, разве что для очень примитивных игр, о коих не идет речь в данной статье.

Я хотел разрабатывать игру, но повяз в разработке движка, о чем не жалею по многим на то причинам, но если повернуть время вспять, я бы очень серьезно подумал и задал бы себе вопрос: что я хочу делать: разрабатывать игру или движок?

Поделиться:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

*

code