Cities Skylines II: Технический вызов симуляции городов с Unity ECS

28.05.2026 Опубликовано | Переведено с испанского

Запуск Cities: Skylines II переопределил стандарты производительности в градостроительных симуляторах. За способностью управлять тысячами отдельных граждан с уникальным поведением стоит сильно модифицированная архитектура Unity, основанная на системе ECS (Entity Component System). Этот подход позволяет одновременно обрабатывать логику трафика, экономики и жизненного цикла каждой сущности, не перегружая процессор, что является ключевым достижением для поддержания стабильной частоты кадров в плотных городах.

Скриншот Cities Skylines II, показывающий плотный город с трафиком и детализированными зданиями в реальном времени

Поток ассетов и геометрическая оптимизация с Maya и Houdini 🏗️

Экстремальный уровень детализации зданий и инфраструктуры был бы невозможен без автоматизированного рабочего процесса между Autodesk Maya и Houdini. В Maya моделируются базовые ассеты, в то время как Houdini генерирует процедурные вариации (окна, крыши, текстуры износа), которые экспортируются как оптимизированные для Unity LOD-сетки (Level of Detail). Технический трюк заключается в интеграции этих вариантов с системой ECS: каждая сущность гражданина или транспортного средства ссылается на динамическую LOD-сетку, которая упрощается в зависимости от расстояния до камеры, освобождая память GPU. Для цикла день/ночь используются кастомные шейдеры, интерполирующие между альбедо- и эмиссивными текстурами, в то время как динамическая погода использует ECS-частицы для дождя и снега, избегая накладных расходов традиционных систем частиц.

Уроки для разработчиков массовых симуляций 🎯

Если вы планируете реализовать подобную архитектуру, с самого начала уделите приоритет разделению данных рендеринга и логики. Самая распространенная ошибка — рассматривать каждого гражданина как GameObject, что приводит к краху движка. Вместо этого используйте ECS-сущности с легковесными компонентами (позиция, состояние, пункт назначения) и систему пулинга для повторного использования неактивных сущностей. Кроме того, программируйте погодные переходы как интерполяции в глобальной временной системе, а не как дискретные события; это позволяет избежать вычислительных пиков. Наконец, автоматизируйте генерацию LOD в Houdini с помощью узлов уменьшения полигонов, так как экстремальная геометрическая детализация видна только на близком расстоянии.

Как команда Colossal Order справляется с задачей синхронизации данных между системами Unity ECS и отдельными агентами для поддержания стабильной производительности в городах с высокой плотностью населения в Cities: Skylines II?

(PS: разработчик игр — это человек, который тратит 1000 часов на создание игры, которую люди проходят за 2)