Налаштування процедурної генерації рівнів в іграх

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

Від імерсивних застосунків до ігрових світів і 3D-сцен

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

Відвідати персоналізований сайт
Показано 1 з 1 послугУсі 242 послуг
Налаштування процедурної генерації рівнів в іграх
Складна
~10 робочих днів
Часті питання

Наші компетенції

Які етапи розробки гри?

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    683
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    862
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    491
  • 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-генерації в burst-компільований 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 тижнів

Вартість визначається після аналізу жанру, платформи та вимог до різноманіття рівнів.