Рубрика развивается при поддержке

От наброска к детальному уровню: поэтапная генерация локаций в Unexplored 2 Материал редакции

Описание строгого алгоритма, который влияет на создание игрового мира.

В закладки

Йорис Дорманс в блоге студии Ludomotion рассказал о том, как в Unexplored 2: The Wayfarer's Legacy генерируются отдельные локации. Он описал подробный алгоритм, с помощью которого сперва планируется набросок уровня, а затем происходит несколько этапов детализации с учётом геймплейных особенностей. Мы выбрали из текста главное.

По признанию разработчика, студии не нужно было изобретать велосипед, потому что для первой части уже были подготовлены почти все ключевые методы. Можно сказать, что ядро технологии имеет двоякую природу: она используют многоступенчатый процесс, который почти эмулирует подход реального левелдизайнера, а также использует то, что называется «циклической генерацией подземелий». Но в этом тексте будет раскрыт только первый аспект.

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

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

Первый шаг создания уровня относительно прост. Используется растровое изображение с низким разрешением, чтобы заложить основы уровня. В приведённом ниже примере уровень начинается очень просто: он состоит из входа (e — entrance) слева, входа справа и прямого пути, соединяющего их. Большинство других тайлов остаются неопределёнными (u — undefined) или заблокированными (B — blocked), потому что они находятся на границе уровня.

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

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

На диаграмме некоторые узлы включают в себя подузлы — в этом случае большинство переходов помечены как опасные (H — hazardous), а некоторые — как открытые (O — open).

На основе довольно простого анализа в диаграмму добавляются разные функции и особенности. Например, цель (G — goal) располагается в месте, которое находится относительно далеко от входа. А незначительные опасности добавляются на диаграмму, чтобы сделать уровень более сложным.

Тем временем карта тайлов низкого разрешения преобразуется в более детализированную версию, используя несколько noise functions, чтобы придать новой карте более естественный вид.

Далее информация на графике используется для оформления временной карты и добавления дополнительных функций.

Белые тайлы указывают на открытые пространства, а другие указывают на геймплейные особенности — секретный проход через заросли (зелёные круги), «ворота зарослей» (зелёные квадраты и пурпурные полосы) и так далее. На этом этапе большая часть уровня всё ещё не доделана, а генератор предполагает, что эти области должны быть заполнены таким образом, чтобы блокировать движение игроков.

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

Типы грунта (трава, грязь и камни)
Вода
Растительность и декорации

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

Итоговый уровень

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

Далее представлен пример более классической карты — пещеры. Базовая диаграмма уровня имеет только один вход и ещё пару типов переходов. Несколько из них заблокированы (L — locked), одна закрывает игрока (T), а тёмно-зелёная — это «клапан»: своего рода ворота, которые позволяют игроку проходить только в одном направлении.

Базовая диаграмма пещеры

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

Ключ от выхода находится за опасностью в левом верхнем углу, а цель — за воротами, которые поймают игрока в ловушку. Примером таких ворот может быть проход, который обрушивается за спиной игрока. В целом это создаёт пещеру, которую уже довольно интересно исследовать. Кроме того, в Unexplored 2 также есть возможность добавлять разнообразных существ и другие элементы.

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

Генерация уровней в Unexplored 2 — это сложный многоступенчатый процесс, который имеет множество интересных аспектов и подводных камней. Это не последний текст из подобной серии — в дальнейшем будет опубликован материал с особенностями наполнения уровня контентом.

Обозреватель подсайта Gamedev.Если вы хотите предложить тему для текста, рассказать о разработке своей игры или просто попросить совета по поводу собственного материала, можете написать мне в личные сообщения.
{ "author_name": "Владимир Семыкин", "author_type": "editor", "tags": ["\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f","\u0433\u0435\u0439\u043c\u0434\u0438\u0437\u0430\u0439\u043d"], "comments": 4, "likes": 38, "favorites": 135, "is_advertisement": false, "subsite_label": "gamedev", "id": 60651, "is_wide": false, "is_ugc": false, "date": "Wed, 24 Jul 2019 16:48:40 +0300", "is_special": false }
Разработка игр для PC, консолей
и мобильных платформ
Я готов!
0
4 комментария
Популярные
По порядку
2

В первой части как раз таки внятные уровни очень понравились - порой генератор создаёт подземелья так, что его вполне можно выдать за ручной труд геймдизайнера. Исследовать весьма интересно.

Ответить
1

Ручной труд левелдизайнера (левел+энваримент дизайнера(ов) попрошу!

Ответить
2

Зависит от команды. Иногда дизайнер занимается всем, иногда дизайнер просто знает/изучил как работает процедурная генерация. По крайней мере, знаю такие кейсы. Так что попрошу!

Ответить
0

Тоже согласен)

Ответить

Прямой эфир

{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }