Контроль над хаосом процедурной генерации — как создавались локации в Children of Morta

Описание главных принципов алгоритма.

Ведущий программист в Dead Mage Реза Хушенги в тексте 2018 года для блога Unity рассказал, какие принципы лежат в основе алгоритма генерации локаций для Children of Morta. Разработчик подробно описал, как организован процесс компоновки помещений и разного игрового контента. Мы выбрали из текста главное.

По словам Хушенги, для создания процедурной системы важно определить правила и ограничения того, что возможно в вашей игре. В Children of Morta каждый уровень состоит из нескольких помещений, соединённых между собой. Есть много видов комнат, содержащих разный контент — где-то враги, где-то таинственные игры, а где-то NPC, рассказывающие кусочки истории.

У каждого уровня в Children of Morta есть собственные параметры, заданные разработчиками. В основе каждой локации лежит базовая структура, определяющая, как комнаты связаны между собой.

Пример упрощённой структуры уровня
Пример упрощённой структуры уровня

На каждом уровне есть главный путь, который ведёт от стартовой комнаты к финальному помещению. На схеме главный путь представлен в виде цепочки: 0 — 1 — 2 — 3 — 4. Также есть ответвления, приводящие в тупик: 1 — 6 — 7 и 2 — 5.

Следующий шаг — определить конкретные правила, которые влияют на условия расстановки комнат. В следующем примере условие такое — комната с наградой (5) должна соединяться с основным путём, но при этом она должна находиться во второй половине уровня. А ответвление с тупиком (6 — 7) всегда связано с комнатой 1.

Так выглядит один из вариантов структуры уровня, построенного по указанным правилам
Так выглядит один из вариантов структуры уровня, построенного по указанным правилам

На показанных схемах изображена лишь последовательность комнат, но не их реальное расположение. На самом деле компоновка помещений может быть очень разной. Вот несколько примеров:

Контроль над хаосом процедурной генерации — как создавались локации в Children of Morta
Контроль над хаосом процедурной генерации — как создавались локации в Children of Morta
Контроль над хаосом процедурной генерации — как создавались локации в Children of Morta

Одна из главных особенностей Children of Morta — ориентация на повествование, поэтому нарративный аспект играет большую роль в процессе генерации локаций. Если на уровне должно произойти какое-то сюжетное событие, то обычно на нём появляются дополнительные комнаты.

R1 и R2 — комнаты с нарративным контентом
R1 и R2 — комнаты с нарративным контентом

В комнате R1 находится NPC, который просит игрока принести какой-то объект в обмен на вознаграждение. Этот предмет находится в комнате R2: игрок должен добраться до него, забрать и вернуться к персонажу.

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

Как только комнаты расставлены по местам, наступает этап наполнения контентом. В Children of Morta есть несколько подсистем для генерации и управления разными типами контента. Хушенги поклонник трилогии «Матрица», поэтому он назвал эти подсистемы именами персонажей из фильмов:

  • Key Maker: ответственна за все двери и переходы между комнатами;
  • Oracle and Persephone: размещают ассеты окружения, повествовательные объекты, кат-сцены и многое другое;
  • Tank: генерирует и управляет графами поиска пути;
  • Smith: спаунит врагов;
  • Merovingian: размещает лут.

У каждой подсистемы есть собственный набор параметров, определяющих точное поведение алгоритма для определённого уровня.

В Children of Morta есть линейный сюжет, поэтому разработчикам было важно научиться правильно балансировать подачу нарративных элементов, чтобы их было не слишком много и не слишком мало.

Команда специально создала в Unity инструмент под названием Train Man, который позволяет согласовать между собой кусочки повествования. Эта система следит за событиями в игре и, отталкиваясь от ситуации, меняет параметры генерации уровня.

К примеру, если вы спасёте волчонка, то система запомнит это и добавит соответствующий эпизод в одном из следующих уровней
К примеру, если вы спасёте волчонка, то система запомнит это и добавит соответствующий эпизод в одном из следующих уровней
Train Man следит одновременно за множеством линий
Train Man следит одновременно за множеством линий

Эта система позволила разработчикам свободно сопоставлять сгенерированный уровень с текущим состоянием всех активных событий. У Train Man есть ещё несколько применений:

  • настройка динамической сложности;
  • добавление ранее недоступного контента;
  • аналитика поведения игрока.

В результате игра генерирует множество самых разных уровней.

Контроль над хаосом процедурной генерации — как создавались локации в Children of Morta
9494
14 комментариев

В конце ничего не понятно .–.

3
Ответить
24
Ответить

Лучше оригинал почитать. В переводе много вырезано.

1
Ответить

В генерации всегда проблема баланса, либо однообразно будет потому что правила тяп ляп собирают уровни на один лад, либо крупных заготовок недостаточно много. В Dead Cells, например, крупные блоки заготовлены и между ними только проходы дорисовывает.
В нашем проекте, например, тоже долго размышлял тоже как сделать генерацию, но при этом чтобы сами локации были из готовых блоков, в итоге блоки сделал одного размера, но на них фиксированны только точки входа-выхода, а содержимое может быть произвольным. Где то бой, где то головоломка. Потом из набора блоков собираем уровень. 

 https://youtu.be/HA3HufCaFwA

10
Ответить

А я тогда не понял, что представляет готовый блок, если содержимое произвольное. И насколько эти блоки большие? И что представляют из себя головоломки?

1
Ответить

Очень приятная игра. Жду полноценного онлайн-коопа, не понимаю почему его ещё не добавили, особенно на фоне концепции про семью, дружбу, жвачку и обоюдное развитие персонажей.

Ответить

вы сейчас как в неё играете?

Ответить