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

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

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

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

Посетить персонализированный сайт
Показано 1 из 1Все 242 услуг
Настройка процедурной генерации уровней: от BSP до WFC
Сложный
~10 дней
Часто задаваемые вопросы

Наши компетенции

Какие этапы разработки игры?

Последние работы

  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    1457
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    979
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    605
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    674
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Обучающая викторина для детей «Покупки в магазине»
    29

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

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% сокращения времени генерации.

Этапы работы

  1. Анализ требований — тип генерации под жанр и механики.
  2. Прототип алгоритма — быстрая проверка подхода без финального арта.
  3. Контроль качества — валидатор уровней, итерация правил.
  4. Интеграция контента — тайлсеты, шаблоны якорных комнат.
  5. Производительность — профилирование, async, Job System.
  6. Параметризация — конфиги для геймдизайнера (сложность, размер, плотность).

Что входит в работу

  • Анализ вашего проекта и геймдизайн-документации
  • Разработка и настройка алгоритма генерации
  • Интеграция в ваш движок (Unity, Unreal)
  • Валидация качества уровней
  • Документация и обучение команды
  • Поддержка после запуска

Ориентировочные сроки

Масштаб Срок
Базовый BSP dungeon-генератор (2D) 2–4 недели
WFC-генератор с контролем качества 4–8 недель
Noise-based открытый мир с биомами 6–12 недель

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

Синематика и видео для игр

Катсцена, которая в редакторе выглядит отлично, в продакшен-сборке может превратиться в слайд-шоу: персонажи застывают, камера дёргается, освещение не совпадает с геймплеем. Мы сталкивались с этим десятки раз на проектах под PC и мобильные платформы. Нормальный pipeline для создания игровых кинематиков строится с самого начала, а не на финальной неделе. Ниже — как мы выстраиваем этот процесс.

Что входит в услугу

  • Сторибординг и превиз — аниматик с таймингом, раскадровка, согласование с нарративом до начала производства
  • In-engine синематика — Timeline, Cinemachine (Unity), Sequencer (Unreal)
  • Рендеренные катсцены — pre-rendered video с интеграцией в движок
  • Процедурная генерация окружения и анимации — для проектов с контентом большого объёма
  • Технический арт для синематики — rig для камер, кастомные треки Timeline

Почему in-engine катсцены выгоднее pre-rendered?

In-engine катсцены используют актуальные ассеты, реагируют на состояние игрока (кастомизация персонажа, динамическое освещение) и не требуют отдельного хранения видеофайлов. За это приходится платить сложностью production-pipeline. Но для 70% современных проектов этот путь оправдан: экономия места на диске (до 90% для многокатсценных игр) и возможность адаптации под разные разрешения без перерендера.

Архитектура 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.

Для синематики наиболее интересны:

  • 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.

Lip sync — для диалоговых сцен с озвучкой используем Salsa LipSync (Unity) или нативный Audio2Face (Unreal + MetaHuman). Базовый уровень — viseme-driven анимация через AnimationTrack с ключевыми кадрами под каждую реплику.

Как Sequencer в Unreal Engine упрощает рабочий процесс?

Unreal's Sequencer — функциональный аналог 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 или билд

Сроки ориентировочные и зависят от сложности сцены (количество персонажей, длина, платформа). Стоимость рассчитывается индивидуально — оценим ваш проект бесплатно при обращении.

Процедурная генерация: Wave Function Collapse для ассетов и анимации

Для проектов с большим количеством контента (roguelike, open world) ручное создание каждого уровня нецелесообразно. Wave Function Collapse (WFC) — алгоритм тайловой генерации, основанный на принципе энтропии (название метафорическое, алгоритм детерминированный). Суть: каждая ячейка сетки может быть одним из N тайлов; алгоритм итеративно «коллапсирует» ячейки, выбирая тайл по правилам совместимости с соседями.

Практическое применение в Unity: библиотека mxgmn/WaveFunctionCollapse или кастомная реализация под конкретную игру. Правила совместимости задаются либо вручную (JSON с описанием, какие тайлы могут соседствовать), либо обучаются на примерных уровнях.

BSP (Binary Space Partitioning) — классический алгоритм для dungeon-уровней. Проще в реализации, но менее гибок в результате. Для roguelike — хороший выбор.

Для синематики процедурная генерация применяется и в другом контексте: процедурная анимация камеры (handheld camera shake, breathing idle) через Cinemachine Noise или кастомные Perlin noise-based контроллеры — добавляет кинематографическую живость без ручного keyframing каждого движения.

Типичные ошибки при создании катсцен
  • Игнорирование производительности: катсцена с 20+ активными виртуальными камерами может съесть весь FPS. Решение — использовать Priority и отключать неактивные камеры.
  • Отсутствие fallback для мобильных платформ: pre-rendered видео должно иметь H.264 fallback, иначе на старых устройствах — чёрный экран.
  • Перегрузка Timeline: треки без organization превращают проект в кашу. Правило — группировать по типу (Animation, Audio, Control) и использовать Sub-Timeline для длинных сцен.

Почему стоит доверить создание кинематиков нам?

За 10+ лет работы в геймдеве мы реализовали кинематики для более чем 50 проектов — от мобильных платформ до PC и консолей. Сертифицированные специалисты Unity (Unity Certified Developer) и Unreal Engine (Unreal Authorized Training Partner). Гарантируем стабильную работу катсцен на всех целевых устройствах.

Свяжитесь с нами для оценки вашего сценария. Закажите разработку кинематика под ключ — от раскадровки до финального билда.

Ссылки: Wikipedia — Computer animation, Wikipedia — Wave function collapse