Все статьи
Туториалы · 2 min read

Нулевые затраты во время выполнения: как Numivo запекает всё в нативные ассеты движка

Архитектурное решение, лежащее в основе Numivo: почему каждый скаттер, блендинг и грид становится обычным ассетом движка, и что это значит для ваших сборок, репозитория и команды.

Illustration of Numivo scene data being baked into engine-native asset files

Самая важная функция Numivo невидима: в вашей выпущенной игре нет ни капли его. Каждый инструмент в наборе (скаттер, mesh blending, гриды) создаёт обычные ассеты движка и ничего больше. Этот пост объясняет, что это значит технически и почему мы считаем это не подлежащим обсуждению.

Что «нативный» значит конкретно

Когда вы запекаете проход скаттера в Unreal, Numivo записывает компоненты Hierarchical Instanced Static Mesh или инстансы foliage: те же структуры, которые вы получили бы, расставляя объекты вручную. В Unity это обычные инстансы префабов или детали террейна. Материалы из mesh blending компилируются в обычные материалы движка с идеальными по пикселям переходами нормалей; нет никакого пользовательского прохода шейдера, никакой работы плагина на кадр, никакого модуля «Numivo runtime» в вашем Build.cs или манифесте пакета.

Числа, которые из этого следуют:

  • 0 строк кода Numivo в вашей сборке
  • 0 мс добавленного времени кадра: выполнять нечего
  • < 150 МБ ОЗУ редактора в типичных сценах, потому что редакторские инструменты — это весь след
  • 1 общее ядро для Unreal и Unity, так что пресеты переносятся между движками

Почему мы отказываемся от зависимости во время выполнения

Зависимости во время выполнения — это долг, который приходится оплачивать кому-то другому:

  1. Сертификация. Команды консольной сертификации спрашивают, что делает каждый сторонний модуль. «Его нет» — самый короткий возможный ответ.
  2. Долговечность. Игры переживают подписки на инструменты. Поскольку запечённые результаты — обычные ассеты, сцена, созданная в Numivo, откроется и выйдет через десять лет, с нами или без нас. Если вы отмените подписку, вы сохраните всё, что сделали — это не обещание в наших условиях, а свойство архитектуры.
  3. Владение производительностью. Ваш профилировщик показывает примитивы движка, которые вы уже умеете оптимизировать (дистанции отсечения, LOD, настройки Nanite), а не чёрный ящик.

Что это значит для вашего репозитория

Запечённые результаты версионируются как любой другой ассет: их можно сравнивать, сливать, рецензировать. Пресеты видов и гридов Numivo — это маленькие простые файлы, которые вы можете коммитить и делить с командой. Единственное, что не должно попадать в контроль версий, — это локальный кэш индекса контента (он пересобирается сам); одно правило игнорирования, и готово.

Компромисс, названный честно

Неразрушающее процедурное редактирование требует плагина: однажды запечённый склон — это данные движка, и повторное процедурное редактирование означает повторное открытие в Numivo. Мы считаем это правильным компромиссом: альтернатива (держать сцены зависимыми от слоя времени выполнения) тихо берёт ваш проект в заложники. Ваши уровни должны принадлежать вашей игре, а не вашим инструментам.

Если эта философия совпадает с тем, как работает ваша команда, бесплатный уровень — самый простой способ проверить её: разбросайте что-нибудь, запеките, удалите плагин и понаблюдайте, как сцене всё равно.