Настройка процедурной генерации уровней в играх

Наша компания по разработке видеоигр ведет независимые проекты, совместно с клиентом создает игры и оказывает дополнительные операционные услуги. Опыт нашей команды позволяет нам охватить все игровые платформы и разработать потрясающий продукт, соответствующий видению клиента и предпочтениям игроков.

От иммерсивных приложений до игровых миров и 3D-сцен

Наша выделенная команда для VR/AR/MR-разработки, Unity-продакшна и 3D-моделирования и анимации с собственными кейсами и презентациями.

Посетить персонализированный сайт
Показано 1 из 1 услугВсе 242 услуг
Настройка процедурной генерации уровней в играх
Сложная
~10 рабочих дней
Часто задаваемые вопросы
Наши компетенции
Какие этапы разработки игры?
Последние работы
  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    671
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    860
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    490
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    533

Настройка процедурной генерации уровней в играх

Roguelite без процедурной генерации — не roguelite. Survival-sandbox с фиксированными картами — теряет реиграбельность после первых часов. Процедурная генерация — не модный термин, это архитектурное решение, которое требует серьёзного проектирования. Сделанная небрежно, она генерирует «мусорные» уровни: непроходимые коридоры, изолированные комнаты, скучную равномерность вместо интересного разнообразия.

Ключевые подходы к генерации

BSP (Binary Space Partitioning). Рекурсивное деление пространства на прямоугольные секции, в каждой — комната, между комнатами — коридоры. Классика dungeon crawler: Rogue, NetHack. Плюс — гарантированная проходимость. Минус — прямоугольная монотонность без дополнительного post-processing.

Wave Function Collapse (WFC). Алгоритм, использующий ограничения совместимости между тайлами. Каждая ячейка имеет набор допустимых состояний; при выборе состояния соседние ячейки получают ограничения. Результат — органичные структуры с высоким контроль качества через набор правил. Работает с 2D-тайлами и 3D-воксельными структурами. В Unity — готовые реализации на GitHub (mxgmn/WaveFunctionCollapse), есть поддержка в движке через TilemapRule.

Noise-based terrain. Для открытых миров — Perlin Noise, Simplex Noise или более современный Domain-Warped FBM (Fractional Brownian Motion). Unity Terrain с TerrainData.SetHeights() принимает 2D float array — генерация высот через шум делается за 30 строк кода. Сложность начинается с биомов: переходы между биомами, размещение объектов по биому, контроль плотности.

Grammar-based генерация. Для нарративных уровней с обязательными событиями: граф прохождения описывается через правила (start → combat → loot → boss → exit), генератор строит уровень, обеспечивающий этот граф. Применяется в action-roguelite, где важна драматургия прохождения, а не только разнообразие.

Самая сложная часть — контроль качества

Генерация работает, но не каждый сгенерированный уровень «хороший». Три проблемы, которые возникают всегда:

Гарантия проходимости. Flood fill или pathfinding (A*) от точки входа ко всем ключевым точкам (выход, обязательные предметы, боссы). Если pathfinding не находит путь — перегенерация. Важно: перегенерация должна быть быстрой (< 16ms на мобильном), иначе игрок видит задержку при загрузке.

Избыточная равномерность. WFC и BSP без дополнительных правил дают «пресный» результат — нет акцентов, нет интересных мест. Решение: явные «якорные» точки (anchor rooms): стартовая комната, босс-комната, секретная комната — генерируются по фиксированным шаблонам и размещаются в обязательных позициях. Остальное — процедурное.

Слишком пустые или слишком заполненные уровни. Размещение объектов (врагов, предметов, ловушек) нельзя делать pure random — получается или пустыня, или непроходимое скопление. Работающий подход: Poisson Disk Sampling для равномерного распределения с минимальным расстоянием между объектами + весовые коэффициенты по типу комнаты и расстоянию от старта.

Пример реализации на Unity

Типичная архитектура для 2D dungeon-генератора:

LevelGenerator
├── RoomGenerator        — BSP / шаблоны
├── CorridorConnector    — соединение комнат
├── ValidityChecker      — flood fill проходимости
├── PopulationSystem     — расстановка объектов
└── TilemapPainter       — запись в Tilemap

LevelGenerator принимает LevelConfig (ScriptableObject с seed, размерами, параметрами) и возвращает LevelData — граф комнат с метаданными. TilemapPainter рендерит LevelData в Tilemap с нужным набором тайлов. Разделение генерации и рендеринга позволяет использовать один генератор для разных визуальных тем (dungeon, cave, ship).

Seed для воспроизводимости. Random.InitState(seed) перед генерацией — и тот же seed всегда даёт тот же уровень. Это нужно для: шеринга уровней между игроками (Daily Run в roguelite), дебаггинга конкретного уровня, серверной валидации прохождения.

Производительность генерации

На мобильных устройствах генерация должна укладываться в загрузочный экран. Ориентиры:

  • 50×50 тайловый уровень (BSP + population) — 5–20ms на среднем Android
  • 200×200 тайловый уровень — уже требует разбивки на chunks с async генерацией
  • Terrain 512×512 через Perlin Noise — 50–200ms, обязательно в async/Thread

Unity Job System позволяет вынести вычисления noise-генерации в бурст-компилированный job — ускорение в 5–10 раз по сравнению с managed кодом.

Этапы работы

  1. Анализ требований — тип генерации под жанр и механики.
  2. Прототип алгоритма — быстрая проверка подхода без финального арта.
  3. Контроль качества — валидатор уровней, итерация правил.
  4. Интеграция контента — тайлсеты, шаблоны якорных комнат.
  5. Производительность — профилирование, async, Job System.
  6. Параметризация — конфиги для геймдизайнера (сложность, размер, плотность).
Масштаб Срок
Базовый BSP dungeon-генератор (2D) 2–4 недели
WFC-генератор с контролем качества 4–8 недель
Noise-based открытый мир с биомами 6–12 недель

Стоимость определяется после анализа жанра, платформы и требований к разнообразию уровней.