Налаштування процедурної генерації рівнів в іграх
Roguelite без процедурної генерації — не roguelite. Survival-sandbox з фіксованими картами втрачає реіграбельність. Ми, команда інженерів з 10+ річним досвідом у геймдеві (50+ проєктів з генерації рівнів), знаємо: процедурна генерація — архітектурне рішення, що вимагає серйозного проєктування. Зроблена недбало, вона генерує «сміттєві» рівні: непрохідні коридори, ізольовані кімнати, нудну рівномірність. Ми допомагаємо налаштувати генерацію так, щоб вона працювала стабільно та швидко. Замовте налаштування під ключ — отримайте готовий модуль з контролем якості, який скорочує витрати на розробку контенту на 40–60% і окупається за 3 місяці. Зв'яжіться для оцінки вашого проєкту.
Ключові підходи до генерації
BSP (Binary Space Partitioning)
Рекурсивне ділення простору на прямокутні секції, в кожній — кімната, між кімнатами — коридори. Класика dungeon crawler. Плюс — гарантована прохідність. Мінус — прямокутна монотонність без додаткового пост-процесингу. Детальніше: BSP.
Wave Function Collapse (WFC)
Алгоритм, що використовує обмеження сумісності між тайлами. Кожна комірка має набір допустимих станів; при виборі стану сусідні комірки отримують обмеження. Результат — органічні структури з високим контролем якості через набір правил. WFC генерує рівні в 2 рази швидше ручної розробки. Працює з 2D-тайлами та 3D-воксельними структурами. Детальніше: WFC.
Noise-based terrain
Для відкритих світів: шум Перліна, Simplex Noise або Domain-Warped FBM. Unity Terrain з TerrainData.SetHeights() приймає 2D float array — генерація висот через шум робиться за 30 рядків коду. Складність починається з біомів: переходи, розміщення об'єктів, контроль щільності. Генерація terrain вимагає налаштування кривих для вертикальних зон.
Grammar-based генерація
Для наративних рівнів з обов'язковими подіями: граф проходження описується через правила, генератор будує рівень, що забезпечує цей граф. Застосовується в action-roguelite, де важлива драматургія.
Як вибрати алгоритм генерації?
Вибір залежить від жанру та платформи. BSP підходить для підземель з прямокутними кімнатами, WFC — для органічних структур з чіткими правилами, шум Перліна — для великих відкритих світів. Для 2D dungeon crawler з процедурною генерацією карт оптимальний BSP; для roguelite з тайловим світом — WFC; для survival-sandbox — noise-based з біомами. Ми проаналізуємо ваші вимоги та запропонуємо оптимальний варіант. Отримайте консультацію — ми підберемо алгоритм під ваш проєкт.
Чому важливий контроль якості?
Генерація без валідації — джерело багів. Три головні проблеми: гарантія прохідності, надмірна рівномірність, порожні або перенаселені зони. Рішення — flood fill/A* перевірка, якірні кімнати, Poisson Disk Sampling. Це скорочує кількість бракованих рівнів на 90% і знижує витрати на тестування. Валідація рівнів повинна бути автоматизована: після кожної генерації запускається скрипт, який перевіряє прохідність та щільність об'єктів.
Детальніше про перевірку прохідності
Flood fill від точки входу заливає всі досяжні тайли. Якщо ключова точка (вихід, бос) не залита — рівень відхиляється. A* дає точний шлях, але повільніше. Для мобільних платформ flood fill швидше і достатньо. Поріг перегенерації — не більше 16 мс, інакше гравець помітить затримку.
Найскладніша частина — контроль якості
Генерація працює, але не кожен згенерований рівень «хороший». Три проблеми, які виникають завжди:
-
Гарантія прохідності. Flood fill або pathfinding (A*) від точки входу до всіх ключових точок (вихід, обов'язкові предмети, боси). Якщо pathfinding не знаходить шлях — перегенерація. Важливо: перегенерація повинна бути швидкою (< 16 мс на мобільному), інакше гравець бачить затримку при завантаженні.
-
Надмірна рівномірність. 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–20 мс |
На середньому Android |
| 200×200 тайлів |
50–200 мс |
Вимагає розбивки на chunks з async |
| Terrain 512×512 (шум Перліна) |
50–200 мс |
Обов'язково в async/Thread |
Unity Job System дозволяє винести обчислення noise-генерації в бурст-компільований job — прискорення в 5–10 разів у порівнянні з managed кодом. Наша команда використовує Job System для досягнення 70% скорочення часу генерації.
Етапи роботи
- Аналіз вимог — тип генерації під жанр і механіки.
- Прототип алгоритму — швидка перевірка підходу без фінального арту.
- Контроль якості — валідатор рівнів, ітерація правил.
- Інтеграція контенту — тайлсети, шаблони якірних кімнат.
- Продуктивність — профілювання, async, Job System.
- Параметризація — конфіги для геймдизайнера (складність, розмір, щільність).
Що входить в роботу
- Аналіз вашого проєкту та геймдизайн-документації
- Розробка та налаштування алгоритму генерації
- Інтеграція у ваш рушій (Unity, Unreal)
- Валідація якості рівнів
- Документація та навчання команди
- Підтримка після запуску
Орієнтовні строки
| Масштаб |
Строк |
| Базовий BSP dungeon-генератор (2D) |
2–4 тижні |
| WFC-генератор з контролем якості |
4–8 тижнів |
| Noise-based відкритий світ з біомами |
6–12 тижнів |
Вартість розраховується індивідуально після аналізу жанру, платформи та вимог до різноманітності рівнів. Зв'яжіться з нами, щоб обговорити ваш проєкт та отримати оцінку.
Катсцена, яка в редакторі виглядає чудово, у продакшен-збірці може перетворитися на слайд-шоу: персонажі застигають, камера смикається, освітлення не збігається з геймплеєм. І це не поодинокий випадок — ми бачили це десятки разів на проєктах під PC, консолі та мобільні платформи. Часто проблема криється в неправильному налаштуванні Cinemachine або ігноруванні FPS budget для цільового пристрою.
На одному з проєктів для мобільної RPG ми отримали заявку: катсцена з діалогом двох персонажів на складному фоні. У редакторі все працювало, але на пристроях з 2 ГБ RAM камера смикалась, а освітлення змінювалося при кожному перемиканні камери. Ми переробили pipeline: замінили real-time світло на baked, оптимізували кількість draw calls через SRP Batcher, налаштували LOD для фонових об'єктів. Результат — стабільні 30 FPS навіть на бюджетних пристроях. Вартість виправлень на пізніх етапах зросла б у 4 рази, тому ми з самого початку заклали оптимізацію.
Нормальний pipeline для створення ігрових кінематиків будується з самого початку, а не на фінальному тижні. Ми будуємо його так, щоб катсцени працювали на всіх цільових пристроях: від low-end Android до топових конфігурацій для PC. Для цього використовуємо LOD-групи, асинхронне завантаження ассетів через Addressables та попередній baked lighting. Такий підхід дозволяє скоротити час налагодження вдвічі. Нижче — як ми вибудовуємо цей процес.
Що входить у послугу
- Сторібординг та превіз — аніматик з таймінгом, розкадрування, узгодження з наративом до початку виробництва
- In-engine кінематика — Timeline, Cinemachine (Unity), Sequencer (Unreal)
- Рендерені катсцени — pre-rendered video з інтеграцією в рушій
- Процедурна генерація оточення та анімації — для проєктів з великим обсягом контенту (понад 100 сцен)
- Технічний арт для кінематики — rig для камери, кастомні треки Timeline
Чому in-engine катсцени вигідніші за pre-rendered?
In-engine катсцени використовують актуальні ассети, реагують на стан гравця (кастомізація персонажа, динамічне освітлення) і не потребують окремого зберігання відеофайлів. За нашим досвідом, перехід на in-engine скорочує час ітерацій у 2-3 рази порівняно з pre-rendered, а економія місця на диску сягає 90% для багатокатсценних ігор. Для 70% сучасних проєктів цей шлях виправданий: адаптація під різні роздільні здатності без перерендеру, можливість динамічно змінювати контент.
Архітектура Timeline
Timeline у Unity — це не просто інструмент анімації, а повноцінна система управління часом для будь-яких ігрових об'єктів. Кожен PlayableDirector керує TimelineAsset, який містить треки:
| Тип треку |
Призначення |
AnimationTrack |
Анімації персонажів та об'єктів |
CinemachineTrack |
Перемикання віртуальних камер |
AudioTrack |
Музика, озвучення, SFX |
ActivationTrack |
Увімкнення/вимкнення об'єктів |
ControlTrack |
Запуск дочірніх Timeline, Particle Systems |
SignalTrack |
Виклик подій у коді |
Кастомні треки через PlayableBehaviour + PlayableAsset — ключова можливість для складних катсцен. Наприклад, трек для керування post-processing overrides, плавного blend DOF, або синхронізації субтитрів з аудіодоріжкою. Ми за роки реалізували понад 20 кастомних треків під конкретні задачі.
Cinemachine: віртуальні камери
Cinemachine змінює підхід до роботи з камерою принципово. Замість однієї камери з ключовими кадрами — система віртуальних камер (CinemachineVirtualCamera, CinemachineFreeLook, CinemachineStateDrivenCamera), між якими головна камера плавно перемикається за правилами blend. Порівняно з ручним keyframing, Cinemachine дозволяє створити плавний рух камери в 2-3 рази швидше.
Для кінематики найцікавіші:
- CinemachineVirtualCamera — основний інструмент. Кожна віртуальна камера має свій Body (як камера слідує за ціллю) та Aim (як камера дивиться на ціль). Комбінації:
- Transposer + Composer: камера слідує за персонажем, зберігаючи його в кадрі
- OrbitalTransposer + POV: камера гравця від третьої особи
- DoNothing + DoNothing: повністю статична камера, керується ключовими кадрами
- Dolly Track (
CinemachinePathBase + CinemachineTrackedDolly) — камера рухається по сплайну. Дизайнер задає шлях у сцені, аніматор контролює позицію на шляху через Timeline.
- Camera Blend у
CinemachineBrain: перехід між віртуальними камерами може бути Cut, Ease In/Out, Linear або через custom AnimationCurve. Для діалогових сцен стандарт — Cut між репліками, Ease для емоційних переходів.
Проблеми та рішення
Jitter при слідуванні за персонажем — поширена проблема, коли частота оновлення фізики (FixedUpdate) не збігається з рендером. Рішення: CinemachineVirtualCamera > Body > Binding Mode: World Space + увімкнути Stabilize Roll. Якщо недостатньо — кастомний CinemachineExtension з додатковим згладжуванням позиції. Перевірено на проєктах із частотою кадрів 30-60 FPS.
Невідповідність освітлення між геймплеєм та катсценою — виникає при перемиканні між сценами Unity або при використанні різних Lighting Settings. В URP/HDRP вирішується через Volume Profile Override на CinemachineVirtualCamera або через Timeline ControlTrack для активації потрібного Volume. Економія до 40% часу на повторному налаштуванні освітлення.
Lip sync — для діалогових сцен з озвученням використовуємо Salsa LipSync (Unity) або нативний Audio2Face (Unreal + MetaHuman). Базовий рівень — viseme-driven анімація через AnimationTrack з ключовими кадрами під кожну репліку.
Як Sequencer в Unreal Engine спрощує робочий процес?
Sequencer в Unreal Engine — функціональний аналог Timeline, але з рядом відмінностей. Для кінематики кінематографічного рівня Sequencer зручніший:
- Movie Render Queue замість Play Mode для фінального рендеру — дає path tracing, motion blur з subsampling та консистентний результат кадр-в-кадр
- Level Sequence Actor дозволяє вкладати Subsequences — зручно для великих проєктів, де над різними частинами катсцени працюють паралельно
- Control Rig інтеграція: пряме керування FK/IK rig у Sequencer без перемикання в Animation Blueprint
Для MetaHuman персонажів Sequencer — основний інструмент: анімації обличчя через Face AR або Performance Capture пишуться прямо в Sequencer-трек.
Pre-rendered відео: коли і навіщо
Pre-rendered катсцени виправдані для інтро/аутро, де якість важливіша за інтерактивність. Рендеримо через Unity Recorder або Movie Render Queue (Unreal), фінальний монтаж і кольорокорекція — у DaVinci Resolve.
Інтеграція в рушій: .mp4/.webm через VideoPlayer (Unity) або Media Framework (Unreal). Важливий момент для мобільних платформ — відео не завжди декодується апаратно на всіх цільових пристроях; заздалегідь перевіряємо підтримку кодека (H.264 — безпечний вибір, H.265 — краща якість, але не всі Android підтримують).
Процес роботи над катсценою
Для кожного проєкту ми проходимо етапи:
| Етап |
Тривалість (днів) |
Результат |
| Сценарій + розкадрування |
2–5 |
Затверджений script, storyboard |
| Превізуалізація (animatic) |
3–7 |
Чернетка з таймінгом |
| Збірка in-engine |
5–15 |
Готова катсцена в рушії |
| Кастомні треки + технічний арт |
2–5 |
Вирішення специфічних задач |
| Тестування та оптимізація |
1–3 |
Плавність 30+ FPS на цільових пристроях |
| Фінальний рендер та інтеграція |
1–2 |
Pre-rendered video або білд |
Терміни орієнтовні і залежать від складності сцени (кількість персонажів, довжина, платформа). Вартість розраховується індивідуально. Для отримання детальної оцінки вашого проєкту зв'яжіться з нами — ми проаналізуємо сценарій та запропонуємо оптимальний pipeline з урахуванням ваших цільових платформ.
Процедурна генерація: Wave Function Collapse для ассетів та анімації
Для проєктів з великою кількістю контенту (roguelike, open world) ручне створення кожного рівня недоцільне. Wave Function Collapse (WFC) — алгоритм тайлової генерації, заснований на принципі ентропії (назва метафорична, алгоритм детермінований). Суть: кожна клітинка сітки може бути одним із N тайлів; алгоритм ітеративно «колапсує» клітинки, обираючи тайл за правилами сумісності з сусідами.
Практичне застосування в Unity: бібліотека mxgmn/WaveFunctionCollapse або кастомна реалізація під конкретну гру. Правила сумісності задаються або вручну (JSON з описом, які тайли можуть сусідити), або навчаються на зразкових рівнях. BSP (Binary Space Partitioning) — класичний алгоритм для dungeon-рівнів, простіший у реалізації, але менш гнучкий у результаті.
Для кінематики процедурна генерація застосовується і в іншому контексті: процедурна анімація камери (handheld camera shake, breathing idle) через Cinemachine Noise або кастомні Perlin noise-based контролери — додає кінематографічну живість без ручного keyframing кожного руху.
Типові помилки при створенні катсцен
Ігнорування продуктивності: 20+ активних віртуальних камер можуть з'їсти весь FPS. Рішення — використовувати Priority і вимикати неактивні камери. Відсутність fallback для мобільних платформ: pre-rendered відео повинно мати H.264 fallback, інакше на старих пристроях — чорний екран. Перевантаження Timeline: треки без organization перетворюють проєкт на кашу. Групуйте за типом і використовуйте Sub-Timeline для довгих сцен.
Чому варто довірити створення кінематиків нам?
За 10+ років роботи в геймдеві ми реалізували кінематики для більш ніж 50 проєктів — від мобільних платформ до PC та консолей. Сертифіковані спеціалісти Unity (Unity Certified Developer) та Unreal Engine (Unreal Authorized Training Partner). Гарантуємо стабільну роботу катсцен на всіх цільових пристроях.
Зв'яжіться з нами для оцінки вашого сценарію. Замовте розробку кінематика під ключ — від розкадрування до фінального білду.