Как компания Megapop создала живой океан в игре Life Below с помощью системы компонентов сущностей.

Эта веб-страница была переведена с помощью машинного перевода для вашего удобства. Мы не можем гарантировать точность или надежность переведенного контента. Если у вас есть вопросы о точности переведенного контента, обращайтесь к официальной английской версии веб-страницы.
Узнайте, как компания Megapop создала свой плотный, органично развивающийся подводный градостроительный симулятор, используя производительность и масштабируемость системы компонентов сущностей (ECS) .
ЗАДАЧА:
Моделирование взаимодействия десятков тысяч морских существ, собственный планировщик задач для ИИ и динамические кораллы — и все это без ограничения производительности процессора.
ПЛАТФОРМЫ:
PC (Steam)
РАСПОЛОЖЕНИЕ:
Осло, Норвегия
РАЗМЕР КОМАНДЫ:
14 штатных сотрудников, 3 внештатных работника
Как такой игре, как Life Below, удаётся имитировать плотную, живую океанскую экосистему, не перегружая при этом PC игрока?
В новой игре Megapop , посвященной созданию рифов, игрокам предстоит восстановить умирающую океаническую среду. Вместо того чтобы строить бетонные здания по сетке, игроки выступают в роли самой природы, органически выращивая кораллы и управляя хрупкой экосистемой, чтобы привлечь более 55 реальных видов морских обитателей, от рыбок-клоунов и крабов до дельфинов и морских выдр.
Для создания яркой эстетики и игрового процесса Life Below потребовалось всестороннее применение подхода, ориентированного на данные. Рассматривая эту сеть рыб, диких животных и NPC-персонажей как чистые данные — числа в непрерывной памяти, а не как сложные игровые объекты, — команда решила сложные задачи, связанные с поведением змей, масштабированием рендеринга, пространственным звуком и моделированием экосистемы, чтобы обеспечить высокую производительность на PC.

Результаты:
- В ходе ранних стресс-тестов имитировались стаи до 250 000 рыб одного вида.
- Поддерживает 60 кадров в секунду на RTX 3060 при наличии тысяч активных существ на поздних этапах игры.
- Поддерживает взаимодействие более 1300 животных со скоростью 30 кадров в секунду даже на компьютерах более низкого уровня.
- Получено 97,2% одобрения от профессиональных бета-тестеров.
- Обрабатывает более 15 000 объектов и более 450 систем в 14-часовом сохранении на поздней стадии игры — и работает без сбоев.
- Почетная грамота в рамках гранта «Unity во имя человечества» 2025 года.

Приверженность подходу, ориентированному на данные.
В ходе подготовки к записи группа Megapop приняла решение полностью создать альбом Life Below на платформе ECS. «ECS позволяет нам структурировать игру как множество небольших систем, работающих вместе, вместо того, чтобы полагаться на большие иерархии классов», — говорит Йорген Таральдсен, основатель и генеральный директор студии. «Это упрощает создание сложных симуляций за счет компоновки поведения из более мелких элементов».
Переход от объектно-ориентированной к дата-ориентированной парадигме разработки стал важным изменением для команды Megapop. Чтобы восполнить пробел в знаниях, ITR — технический руководитель проекта Life Below и первоначальный сторонник ECS в этом проекте — использовал различные ресурсы, от официальной документации Unity по ECS и примеров ECS до практических советов от сообщества Unity в Discord и YouTube. « Шоу Hot Path Show, организованное компанией Turbo Makes Games, также оказалось особенно полезным для получения более узкоспециализированной информации о DOTS и ECS», — говорит ITR.
Когда программист Симен Вииг присоединился к Megapop примерно за 18 месяцев до запуска Life Below , изучение ECS было включено в программу его адаптации. «Главное было разобраться в подходе, ориентированном на данные, вместо привычного объектно-ориентированного мышления», — говорит он. «Когда я это понял, мне очень понравилось, как компоненты и сущности помогли мне лучше структурировать свой код».
ITR определяет принцип, который оказал наибольшее влияние на процесс внедрения ECS: «Вместо того чтобы пытаться смешивать слишком много разных архитектур, следует придерживаться подхода, ориентированного на данные». Создание небольших и узкоспециализированных систем упрощает масштабирование проекта по мере добавления новых функций.

Жизнь внизу | Megapop | Kasedo Games
Создание планировщика задач для NPC
В игре Life Below игроки не отдают прямых приказов своим NPC-работникам — команде водяных духов, которые поддерживают риф в порядке. Вместо этого игрок ставит цели (посадить коралл здесь, собрать эти ресурсы), а настраиваемый планировщик задач автоматически назначает оптимального работника для каждой задачи.
Планировщик работает в системе , скомпилированной с помощью Burst , и функционирует в три этапа: сначала он использует ECS для сбора общей информации о доступности рабочих процессов, местоположении ресурсов и ожидающих задачах; затем алгоритм выбирает задачи с высоким приоритетом, сохраняя при этом сбалансированное распределение по типам задач; наконец, он получает подробную информацию с помощью ECS, чтобы найти наиболее подходящего рабочего процесса и спланировать каждый шаг. «Мы используем иерархическое функциональное программирование, чтобы упростить добавление новых задач и предотвратить повреждение игры», — объясняет ITR.
В пиковый период поздней стадии игры одновременно работают около 100 человек. Система однопоточная — не из-за технических ограничений, а потому что назначение каждой задачи зависит от результата предыдущей. «Это похоже на планировщик задач операционной системы, — говорит ITR, — за исключением того, что мы знаем приблизительное время выполнения задачи до того, как запланируем ее, а не после».

Жизнь внизу | Megapop | Kasedo Games
Моделирование сложного поведения боидов
Во многих играх поведение стаи реализуется с помощью простых решений на GPU или Burst . Для игры Life Below компании Megapop требовалось, чтобы виды животных динамично охотились, убегали и взаимодействовали друг с другом, в том числе и в сценах крупным планом, снятых камерой, направленной на игрока.
«Для простых симуляций поведения быков легко запустить программу, используя Burst или вычисления на графическом процессоре», — говорит Йорген. «Но нам хотелось увидеть более сложные модели поведения, где взаимодействуют разные виды, и даже когда вы взаимодействуете с дикими животными при съемке крупным планом».
Используя систему заданий , команда отделила параллелизуемые части логики боида — базовые обновления положения и вычисления расстояния — от сложных разветвленных взаимодействий, таких как преследование хищника. Не все виды одинаково требовательны к производительности: донных обитателей, таких как крабы, относительно легко имитировать, в то время как хищники, такие как крылатки, оценивают множество условий в каждом кадре, чтобы охотиться, преследовать и атаковать другие виды.
Управление пространственным звуком в масштабе
Одной из самых сложных задач в проекте стало обеспечение работы динамического пространственного звука совместно с тысячами активных объектов. Решение, разработанное программистом Фингаром Бёеном, заключалось в том, чтобы группировать находящихся поблизости существ в кластеры и управлять звуком на основе поведения группы, а не отдельных рыб.
«Такие факторы, как вид животного, размер группы, передвижение и время воспроизведения звуков, помогают определить, когда именно следует включать звуки», — объясняет Фингар. «Это позволяет нам отображать тысячи существ, сохраняя при этом естественность звукового ландшафта и приемлемую нагрузку на процессор».
ECS Jobs и Burst обрабатывают этап сбора данных — сбор позиций объектов и их эффективную параллельную группировку, — в то время как управляемый код, запускающий аудиособытия, сводится к минимуму. Команда также работает над заменой строковых идентификаторов событий FMOD на GUID, что позволит сократить выделение мусора и сделать более эффективным использование аудиоконвейера в режиме Burstable.
Создание живого рифа
Для визуализации тысяч объектов требуется высокооптимизированный конвейер рендеринга. В Megapop для сложных движений животных, таких как циклы плавания, используются текстуры вершинной анимации (VAT), а для мелких стайных рыб — процедурная анимация. Окружающая среда также реагирует на состояние экосистемы: кораллы динамически демонстрируют рост водорослей, стресс и повреждения в зависимости от параметров, передаваемых непосредственно из системы экологического мониторинга.
Объекты, графика и инстансинг графического процессора
Команда с самого начала разработки использовала инстансинг на графическом процессоре, первоначально посредством пользовательских вызовов Graphics API, а затем перешла на официальный пакет Entities Graphics от Unity. Переход не был обусловлен повышением производительности — оба подхода основаны на одной и той же базовой технологии — но Entities Graphics значительно упростила работу с системой и существенно улучшила интеграцию с ECS. «С ним было намного проще работать, и он значительно улучшил взаимодействие с ECS», — говорит Адам Хоув, технический художник и программист компании Megapop.
Entities Graphics поддерживает пользовательские компоненты ECS, которые автоматически загружают свои данные в графический процессор в виде значений для каждой сущности в каждом кадре — но только тогда, когда эти значения фактически изменились. Это означает, что сотни стабильных объектов не загружают данные из буфера повторно без необходимости. Использование экземпляров графических процессоров само по себе гарантирует, что наличие сотен кораллов и декоративных элементов на экране не приведет к увеличению количества вызовов отрисовки: «Благодаря использованию GPU-инстансинга можно отрисовать тысячи кораллов за один вызов отрисовки», — поясняет ITR. «Таким образом, независимо от того, отображается ли на экране пять кораллов одного вида или пять тысяч, скорость рендеринга будет одинаковой».

Жизнь внизу | Megapop | Kasedo Games
Динамические кораллы с помощью Shader Graph
Каждый коралловый организм содержит компоненты эндоканнабиноидной системы, необходимые для здоровья, роста водорослей и стрессового состояния. Используя атрибут MaterialProperty из Entity Graphics, эти данные автоматически загружаются в графический процессор и управляют параметрами Shader Graph , что приводит к видимым изменениям, таким как обесцвечивание, изменение цвета под воздействием стресса и распространение водорослей, без какого-либо ручного управления материалами. Shader Graph также открыл возможности для художников, которые не пишут код на HLSL, позволив им напрямую работать над визуальными результатами и видеть эффект изменений в реальном времени.
Отладка кода, ориентированного на данные.
Отладка кода, ориентированного на данные, — это совсем другая дисциплина, чем отладка стандартных проектов Unity , и опыт Megapop с Unity 6 отражает, насколько зрелыми стали инструменты для её разработки. «В версии 6.0 были добавлены окно поиска, маркеры профилирования и график рендеринга, и все это оказалось очень полезным для оптимизации», — говорит ITR.
Перед релизом команда обновилась до Unity 6.3 и отметила, что такие инструменты, как окно иерархии сущностей и встроенный отладчик, стали значительно стабильнее в последней поддерживаемой LTS-версии.
Иерархия сущностей была необходима для проверки состояния сущностей во время выполнения, а специфические для ECS функции JetBrains Rider, включая возможность просмотра информации о компонентах для конкретных сущностей при пошаговом выполнении кода, значительно повысили полезность встроенного отладчика. Журналирование ECS помогло выявить, какая система неожиданно изменила компонент, и отметило ненужные операции записи во время оптимизации.
Для обработки графики отладчик кадров и RenderDoc были объединены с системой графов рендеринга Unity 6, чтобы точно отслеживать, где используются ресурсы графического процессора.
Повышение производительности с помощью Burst
В отчете об ошибке, отправленном игроку, содержалось 14 часов игрового сохранения, включавшего 15 000 объектов и более 450 активных систем, и при этом игра работала плавно со скоростью 60 кадров в секунду. Полное моделирование экосистемы занимает примерно 0,5 мс процессорного времени на кадр в типичном сценарии поздней стадии игры, что важно, поскольку игра поддерживает ускорение времени, которое запускает исправленное обновление несколько раз за кадр рендеринга.
Burst имеет решающее значение для достижения этих показателей: его отключение приводит к тому, что время выполнения симуляции на кадр увеличивается более чем в три раза. «Для многих систем мы обнаружили, что Burst достаточно для их оптимизации, — объясняет ITR, — а Jobs лучше подходит для конкретных распараллеливаемых частей кода, которые итерируют по множеству сущностей».
В стресс-тестах с участием одного вида: 3500 крабов со скоростью 60 кадров в секунду на восьмилетнем персональном компьютере ITR и 7000 крабов или 5500 рыбок-клоунов со скоростью 50 кадров в секунду на высокопроизводительном рабочем ноутбуке с активным взаимодействием с другими организмами. Встроенные в DOTS средства сбора и распределения памяти также значительно сократили выделение мусора для каждого кадра по сравнению с предыдущими проектами команды.
Учимся на собственном опыте.
Сочетая подлинную морскую биологию со сложными инженерными системами, Life Below занимает уникальное место в жанре градостроительных симуляторов. В последней версии от Megapop демонстрируется масштабируемость ECS для Unity при обработке игр с большим количеством симуляций, а также выявляются структурные преимущества, выходящие далеко за рамки чистой производительности. Команда отмечает, что возможность четкого разделения сборок на данные и логику, например, позволила Life Below компилироваться гораздо быстрее, чем другие проекты аналогичного размера.
Для разработчиков, рассматривающих возможность создания игры с использованием ECS для Unity, опыт команды подтверждает: освоение технологии требует времени, но вложения окупаются. Адам, который возглавляет техническую часть следующего проекта Megapop, уже планирует использовать ECS. «Когда все уже налажено, легко развивать и расширять систему», — говорит он.
Создавайте более качественные проекты с помощью Unity.
Разрабатывайте масштабируемые игры с большим количеством симуляций. ECS for Unity предоставляет вам инструменты повышения производительности и архитектурные решения, позволяющие воплощать в жизнь сложные, живые миры.