Files

12 KiB
Raw Permalink Blame History

03. Сравнение существующих подходов

Статус на 18.09.2026. Исследование и проектные решения, не описание реализованного движка. Канонические решения — ARCHITECTURE.md, порядок до и после MVP — PLAN.md. Сведения о других движках сохраняются как исследовательский контекст; прежние рекомендации, помеченные superseded, не задают стек Faset.

Матрица ниже — история оценки чужих подходов, не обещание реализовать все перечисленные возможности. Выбор Faset уже сделан: C++/EnTT, собственные retained C++ UI и Vulkan 1.3 renderer/RenderGraph, Slang/SDL3, CMake/Ninja/Clang и clang-cl, Box2D/Box3D; Lua добавляется отдельным обязательным этапом и остаётся необязательным для конкретной игры. MCP ограничен редакторским authoring/import/build/PlayStop/logs, отсутствует в Player и не инспектирует runtime world.

Это не таблица «лучший engine». У каждого проекта другая целевая цена сложности. Вопрос: какую идею забрать в новый движок, а какую не импортировать.

1. Сводная матрица

Движок/подход Сильный mental model Что особенно полезно Цена/риск Вывод для нового движка
Godot Node + Scene + Resource композиция сцен, единый editor, простая project structure, remote scene/debug Node легко превращается в object soup; 2D/3D имеют отдельные типы; физика не обещает determinism взять scene/resource UX и explicit 2D/3D parity; remote inspection оставить сравнением, без runtime MCP
Unity GameObject + Component + Prefab + Asset Database быстрый authoring, prefab variants, package model, большой ecosystem скрытое состояние import/cache, сложный execution order, heavy editor/runtime coupling взять prefab overrides, actions, frame debugger; сделать source/cache boundaries более прозрачными
Unreal Actor/Component + Level/Asset + отражение мощные editor tools, world/level authoring, Details/Outliner, trace/Insights, source-control UX высокая когнитивная и build complexity, tick/GC/reflection pitfalls взять details/outliner/trace patterns; не следовать enterprise-scale breadth
O3DE Entity Component System + Editor/Runtime/System components + Gems четкая component composition, Asset Processor, modular Gems, editor/runtime split большой surface area, много abstractions, тяжелый onboarding взять component categories, asset pipeline, plugins; держать API меньше
Bevy ECS World + Resources + Systems + plugins data-driven composition, explicit schedules, modular render/asset systems, code-first ergonomics code-first UX, evolving APIs, ECS complexity для новичка взять explicit schedule/resources/plugin boundaries; добавить визуальный authoring layer

2. Godot: композиция и маленький проект

Godot явно строит философию вокруг object-oriented composition, scenes как reusable units и возможности сочетать editor и code (design philosophy). Scene Tree и FileSystem легко объяснить новичку. Inspector, Project Settings и editor plugins превращают metadata в UX surface (Inspector, Project Settings, EditorPlugin).

Перенять:

  • любой node/subtree может стать сценой;
  • сцена открывается и запускается независимо;
  • ресурсы имеют собственное редактирование;
  • import errors видны рядом с ассетами; remote scene Godot сохраняется здесь как сравнение, не требование runtime MCP Faset.

Не перенять без критики:

  • смешивание lifecycle, hierarchy и behaviour в огромном количестве Node types;
  • неявные глобальные singletons как основной способ коммуникации;
  • отдельные 2D/3D API там, где общий concept был бы удобнее.

3. Unity: скорость результата и prefab contract

Unity показывает, насколько powerful один consistent loop GameObject → Component → Inspector → Prefab → Play. Prefab поддерживает nested instances и variations (Prefabs); контекстный Prefab Mode и breadcrumbs уменьшают риск редактировать не тот уровень (Prefab Mode). Asset Database разделяет source, meta identity и cached artifacts (Asset Workflow).

Перенять:

  • inspector-driven authoring;
  • prefab instance source/override visualization;
  • named action input вместо raw keys;
  • Frame Debugger, который делает render pipeline пошагово обозримым (Frame Debugger).

Не перенять без критики:

  • dependency на opaque generated Library/cache;
  • «магический» execution order; scheduling should be explicit;
  • authoring-правки компонентов в обход общего command/history layer. Gameplay изменяет runtime-компоненты через runtime API без редакторского Undo; structural changes применяются через отдельный runtime command buffer.

4. Unreal: масштабируемая authoring-система

Unreal показывает ценность богатого Outliner + Details panel: actor можно найти в иерархии и редактировать свойства в контексте (Level Editor, Details panel). Source Control встроен в Content Browser и показывает checkout/history/diff (Source Control). Tick groups и dependencies делают порядок работы подсистем явным (Actor Ticking). Unreal Insights демонстрирует, что trace должен включать gameplay, objects, physics и cook, а не только FPS (Insights).

Перенять:

  • Outliner/Details split;
  • human-readable reflection metadata;
  • explicit runtime/editor distinction;
  • trace channels и frame/object history;
  • asset source-control status.

Не перенять:

  • broad enterprise feature set;
  • повсеместный per-actor ticking;
  • сложную рефлексию без генерации schema и compile-time validation.

5. O3DE: component boundaries и pipeline

O3DE формулирует entity/component model, причем компоненты могут объявлять required/provided services, что предотвращает невалидное состояние entity. Отдельные editor components и system components — полезная архитектурная граница (ECS overview). O3DE также явно выделяет Asset Processor, authoring tools, plugins и build system (Key Concepts).

Перенять:

  • schema-level component dependencies;
  • editor component, runtime component, system service;
  • importer/processors as first-class pipeline;
  • modules/plugins with declared dependencies.

Осторожно:

  • dependency graph component-услуг не должен быть непостижимым; показывать его в Inspector;
  • не создавать micro-service архитектуру внутри маленького движка.

6. Bevy: explicit data flow и systems

Bevy предлагает code-first ECS, typed Assets и plugin composition. В релизных материалах подчеркиваются modularity, render phases, entity/component-driven draw functions и explicit resources (Bevy 0.6); новый scene system делает сцены composable, patchable и dependency-aware (Bevy 0.19).

Перенять:

  • schedule phases и typed Res/components;
  • asset handles + async loading;
  • plugins as composition units;
  • render extraction вместо обращения gameplay напрямую к GPU.

Не перенять:

  • code-only authoring как единственный путь;
  • нестабильную публичную surface без compatibility policy;
  • предположение, что ECS автоматически делает every workload faster.

7. Синтез

Сильнейший общий паттерн не «ECS» и не «scene graph», а наличие понятного authoring contract:

Object in editor
  = stable identity
  + inspectable schema
  + composable parts
  + explicit references
  + reversible changes
  + runtime mapping

Для нового движка разумно выбрать:

  • Godot-подобную простоту сцен;
  • Unity-подобный prefab/Inspector loop с nested composition и явными overrides; variants и Apply to template — после MVP;
  • Unreal-подобные trace/Outliner/Details;
  • O3DE-подобное разделение editor/runtime/system и Asset Processor;
  • Bevy-подобные schedules/plugins/render extraction.

И сознательно не переносить их масштаб, legacy и неявные соглашения.

Прежние варианты C#/Flecs, готовый UI toolkit и прямое редактирование Player через automation superseded. Blender используется в официальной сборке: обычный glTF/GLB импорт самодостаточен; optional Python add-on добавляет устойчивые IDs и удобную кнопку экспорта. Его отсутствие не блокирует импорт, но ограничивает гарантии reimport после rename частей. MVP — два маленьких 2D/3D-демо с baseline PBR/тенями и самостоятельным экспортом под Linux/Windows; передовые графические технологии развиваются после него.