что такое процедурная генерация

Процедурная генерация, её история, проблемы и невероятные креативные возможности

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

В 2013 году во время церемонии Spike Video Game Awards показали игру от которой у каждого из миллиона зрителей шоу одновременно перехватило дыхание. Космическое приключение под названием No Man’s Sky от маленькой почти неизвестной студии за пару часов стало сенсацией о которой писали и говорили все, кто хоть как-то связан с интерактивными развлечениями.

No Man’s Sky должна была стать игрой дающей шанс с джойстиком в руках пережить опыт, к которому человечество стремится в своих фантазиях уже не одну тысячу лет. Представьте себе возбуждение от первого шага по новому миру или найденных на песке следов невиданных существ. Взбудораженный этими картинами мозг рождает закономерный вопрос: «как кому-то удалось создать целую виртуальную вселенную немыслимых размеров?». Ответом будет термин «процедурная генерация» за которым скрывается вечный тренд игровой индустрии, её прошлое, настоящее и невероятный креативный инструмент, который должен стать её будущим.

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Разработчики начали использовать эту технологию в конце семидесятых годов. Малая мощность компьютеров того времени не позволяла хранить в памяти большие объемы данных, необходимые для воплощения самых смелых фантазий геймдизайнеров. Процедурная генерация позволила обойти эти ограничения, воссоздавая объекты «на ходу». Одной из первых была «Rogue», игра про поиск сокровищ, в которой подземелья создавались по-новой после каждого старта. В дальнейшем она породила популярный жанр «Roguelike RPG», главная особенность которого «случайно» генерируемые уровни.

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерацияRogue

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

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерацияCivilization V

При всех плюсах процедурной генерации у неё есть свои проблемы. Упомянутая во вступлении No Man’s Sky вышла месяц назад и неожиданно для всех вместо сокровенной мечты каждого игрока, она превратилась в Серсею Ланнистер из той сцены «Игры Престолов», где она голая идет по площади, а толпа кричит ей вслед «позор». Страница игры в витрине Steam пестрит красным из-за подавляющего количества негативных отзывов покупателей, большинство из которых ссылаются на то что в No Man’s Sky «нечего делать». Космос оказался пустым и холодным в самом плохом смысле слова. Это отличная иллюстрация для главной проблемы случайной генерации, так называемого «Negative possibility space». Этот термин уходит корнями в особенность психологии, которая заключается в том что человека постоянно нужно стимулировать, иначе деятельность покажется ему бессмысленной и он быстро потеряет к ней интерес.

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерацияDiablo II

Несмотря на то, что обычно процедурная генерация используется для создания большого объема контента в короткие сроки, у нее есть множество креативных применений. Космический артхаус RymdResa создает с помощью алгоритма бескрайние космические просторы только для того, чтобы подчеркнуть одиночество главного героя. Пошаговая стратегия Crusader Kings II перед началом каждой партии просчитывает линии родословных и истории столкновения средневековых монархов. Самая «глубокая» игра в мире, Dwarf Fortress, таит в себе бесконечные возможности жонглируя алгоритмами, объединяя их в одну комплексную систему.

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерацияDwarf Fortress

Одна из самых интересных перспектив применения процедурной генерации это её совмещение с нейросетями, для того чтобы создавать «самообучающиеся» игры, которые будут меняться в зависимости от действий игрока. Что-то вроде системы «AI Director» из Left 4 Dead, подкидывающей вам толпы зомби в самые напряженные моменты, только в разы более продвинутой. Игра станет собственным геймдизайнером, подгоняя под каждого игрока условия, создавая новые механики и меняя на ходу собственный сюжет. Это звучит футуристично, но не более странно чем современные игры выглядели бы для кого-то из восьмидесятых.

Представьте себе эльфа в партии вашей RPG, который посреди выполнения квеста сходит с ума насмотревшись на ужасы войны и самостоятельно отправляется на поиски самого могущественного артефакта чтобы уничтожить весь мир, становясь главным злодеем только в вашей уникальной игре и только в этот раз. Или мафиозного босса в очередной GTA, который решает что вокруг слишком много преступников и начинает по ночам бегать в костюме супергероя, восстаналвливая социальную справедливость, что приводит к новой цепочке заданий. Первые предпосылки к этому есть в Толкиеновской ролевой игре Shadow Of Mordor, которая создает орков комбинируя разные черты характера и сталкивает их в постоянных междоусобицах, приводящих к непредсказуемым результатам. Создатель культового Bioshock Кен Левин назвал её «первой игрой с открытым повествованием», отметив что это будущее, к которому рано или поздно должны придти видеоигры.

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерацияShadow of Mordor

Занимаясь творчеством, люди склонны копировать других и даже самих себя. Стоит одной свежей идее «сорвать банк», как все начинают повторять ее в бесконечном количестве вариаций, создавая продолжения и «клоны», пока она окончательно не исчерпает себя и даже после этого. Случайная генерация наоборот, часто дает непредсказуемый результат, ведущий разработчиков к новым открытиям. «Спросите» об этом у искусственного интеллекта ANGELINA, который создает целые игры по нескольким вводным словам. Создатель «Ангелины», Майкл Кук, ежегодного организует форум Procedural Generation Jam, на котором разработчики со всего мира с помощью алгоритмов создают необычные игры вроде генератора историй Infini-Quest или симулятора мага расследующего убийства The Inquisition.

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерацияThe Inquisition

Источник

Процедурная генерация уровней

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

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

Думая, как бы упростить себе жизнь, в голову пришла идея о процедурной генерации. Ясное дело, её тоже надо будет писать, но как говорилось в одном известном произведении, «лучше день потерять, потом за пять минут долететь».

Внимание! Под катом много текста и «жирных» гифок.

Вводная

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

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

Я просмотрел свою базу знаний по геймдеву, и выписал в отдельный документ ссылки на статьи по процедурной генерации. Большинство, конечно, про генерацию классических лабиринтов или про генерацию рельефа (кстати, результаты очень впечатляющие), что не подходит для 3D-шутера. Но некоторые были близки к тому, что мне нужно (звёздочкой я отметил те, которые мне показались наиболее подходящими):

Я решил начать с последних двух — они просто реализуются, и дают хорошие результаты.

Структура генератора

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

Есть ещё где-то 12 пунктов, но они пока не доделаны (когда доделаю, напишу про них отдельный пост).

Генерация изначальной геометрии: «BSP»

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

За основу был взят вот этот перевод. Я не уверен насколько то, что происходит в этом алгоритме близко к настоящему BSP, поэтому пишу «BSP» в кавычках.

Алгоритм достаточно прост. Изначально создаём прямоугольник, размером со всё игровое поле:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Затем делим его на рандомно на две части — либо горизонтально, либо вертикально. Где будет проходить линия разделения тоже выбираем случайным образом:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Рекурсивно проделываем тоже самое для новых прямоугольников:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

И ещё раз и ещё раз, до некоторого предела:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

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

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Потом комнаты соединяются коридорами. Но не каждая с каждой, а несколько хитро, из-за того они хранятся в «BSP»-подобной структуре (для более подробных деталей смотрите оригинальный алгоритм).

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация
Коридор, соединяющий фиолетовую и белую секции.

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

Кроме того, если комната (на рисунке — бирюзовая) пересекает коридор, то она должна делить его на две разные секции (поэтому один и тот же коридор может отрисовываться разными цветами):

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

И вот что получается в итоге:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Дальше начинается фаза пометки мусорных клеток:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Как я уже писал, никакой сектор не может быть меньше, чем 3×3 клетки. Это из-за того, что сектор обязательно должен быть окружен стенами (как минимум по 1 клетке с каждой стороны), и в нём как минимум должна быть одна клетка свободного пространства:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

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

Вместо этого, для каждой помеченной клетки ищется тот сектор, к которому она может примкнуть (соблюдая правило 3×3):

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация
Если клетку так и не удаётся отнести к какому-либо сектору, она удалятся (но не в этом случае — тут всё хорошо).

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

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Генерация изначальной геометрии: планировка помещений

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

За основу была взята другая статья. Этот алгоритм несколько сложнее предыдущего, но тоже не rocket science.

Для начала игровое поле заполняется неким стоп-значением, а затем случайным образом на нём очищается прямоугольная область:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Этап очистки случайного прямоугольника проводится ещё некоторое (тоже случайное) количество раз, и в результате получаются внешние контуры уровня:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

В свободном пространстве случайно раскидываются точки роста комнат (минимальный размер комнаты — 3×3):

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

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

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Затем комнаты преобразовываются в полибоксы:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

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

В результате получается полностью заполненное пространство:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Далее полибоксы отрисовываются в виде растра, и (как и в случае «BSP»-генератора) начинается этап пометки «мусорных» клеток:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

И присоединения их к существующим секторам:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация
Тут не удалось присоединить все клетки — лишние были удалены.

Результат обратно превращается в полибоксы:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Очистка от мусорных секций

Иногда возникают такие секции, внутри которых не соблюдается правило 3×3:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Можно попытаться такие секции «восстановить», но я пошёл по более простому пути, и просто их удаляю:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Построение соединений

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Для каждой секции ищутся её соседи, и в местах соприкосновения таких секций создаются соединения. Соединения создаются с обеих сторон — если секция A соприкасается с секцией B, то будет соединение из A в B и из B в A. В результате получается двунаправленный граф.

Очистка от мусорных подграфов

Иногда, в результате очистки от мусорных секций, получается не один граф, а несколько независимых, как в этом примере:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

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

Очистка от излишних соединений

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

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

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

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

Рандомизация соединений

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

Но уровень, в котором нет ни одного лишнего соединения тоже не выглядит очень человечным, поэтому вносится некий хаос:

Дальше те секции, между которыми образовались проходы, «сливаются» в одну:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация
Если вам показалось, что на этой иллюстрации вновь появились удалённые на предыдущем шаге соединения — вам показалось :). Когда я вычитывал текст, мне тоже так показалось, но внимательно присмотревшись к предыдущей иллюстрации становится понятно, что всё ок.

Генерация секретных комнат

На графе выбираются такие сектора, у которых есть только одно соединение:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Если таких секторов будет несколько, то они все собираются в массив, и сортируются по «площади». Затем этот массив обрезается случайным образом (но так, чтоб в нём остался хоть один элемент). Эти сектора и станут секретными комнатами:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Генерация «сценария»

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Вначале выбираются сектора, с минимальным количеством свободных соединений (т.е. такие, которые ближе к «краю» графа):

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация
На этой иллюстрации выбран один сектор, но, если бы их было больше — всё равно был бы выбран какой-то один (случайным образом).

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

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

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

NB. Во время вычитки статьи, мне показалось, что условие наличия только одного соединения — слишком строгое, достаточно было бы того же, что и на прошлом шаге — чтоб после удаления этого сектора, граф бы не распался.

Далее этому списку секторов назначается номер сценария (просто число, на этом этапе оно ничего конкретного не значит), а соединения на границах этого списка секторов помечаются как закрытые этим сценарием.

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

Дальше выбирается очередной сектор, составляется список, и этот список помечается новым сценарием:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Обратите внимание на маленькие синенькие точечки внутри красных квадратиков — так отрисовывается scenario opener — т.е. где-то внутри секции с красным сценарием будет находиться ключ или переключатель, который откроет проход к секторам с синим сценарием.

Так продолжается до тех пор, пока не останется свободных секторов:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Самому последнему сектору не присваивается сценарий, а только scenario opener. Этот сектор будет тем сектором, в котором игрок начнёт игру.

Схематически это можно показать так:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

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

Оптимизация соединений

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

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

Создание дверей и окон

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Для каждого сектора просматриваются все его соединения (которые после предыдущего шага смотрят только в одну сторону), и на каждом просмотренном соединении размещаются двери и окна.

Чтоб уровень выглядел более интересно, на разных шагах разная вероятность размещения двери или окна:

Выбор действия

Хоть это и не имеет отношения к генерации, но на этом шаге меняется визуализация — теперь окантовка сектора красится в цвет сценария:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация
Стартовый сектор — светло-серый, конечный — синий. Так же заметьте, что вместо двери у секретной комнаты (тёмно-серая слева) нарисована стенка — всё правильно, это секретная стенка.

Далее выбираются те сектора, в которых можно разместить ключи:

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Выбираются они достаточно просто:

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

Источник

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

Процедурно-генерируемый контент «правильных» игр — Diablo, Rogue, Spelunky, Daggerfall, Elite, Spore и даже аналогов Football Manager — не перестает удивлять. Он позволяет иначе взглянуть на дизайн и подчеркивает элегантность основных показателей системы. С его помощью вы экономите время и можете зарабатывать. Именно благодаря ему Skyrim и Minecraft привлекают огромное количество игроков, которые не изменяют своему выбору даже через несколько лет после выхода этих продуктов. Процедурная генерация – надежное основание, на котором построена концепция столь ожидаемой «No Man’s Sky» от Hello Games.

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

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

1.Crusader Kings II: Сложные родственные связи становятся динамичными благодаря генерируемым персонажам

В своем электронном письме креативный директор Kitfox Games Таня Шорт отмечает, что рост популярности игры и непрекращающиеся обсуждения на форуме указывают на готовность игроков пропускать через себя все эти цифры и реакции персонажей (которые, как правило, очень просты, но в комплексе могут казаться сложными). «Так как Crusader Kings II попадает в категорию хардкорных игр с высоким порогом вхождения, игру можно в определенной степени сравнить с The Sims», — поясняет Таня. «Игроки любят придумывать истории, в которых объясняют внутренние переживания героев, их политику и т.д., особенно когда в вашем распоряжении такой интересный контекст, как реалии средневековой Европы. Именно поэтому то и дело на форуме Crusader Kings II возникают горячие дискуссии «не по теме»».

ИТОГО: Игроки дополняют образы процедурно-генерируемых персонажей и систему их взаимоотношений собственными переживаниями, если герои ведут себя так, как того требуют определенные черты характера. В случае же, когда цифры, заложенные в основу линии поведения, общедоступны, процесс взаимодействия оказывается даже активнее.

2. Более колоритные враги в Shadow of Mordor

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Shadow of Mordor, экшн RPG по мотивам произведений Толкиена, также выходит за рамки привычного представления об уровнях и картах процедурно-генерируемого контента. Игра закладывает концепцию налаживания личных отношений пользователей с орками. Если вкратце, каждый орк уникален — они создаются по алгоритму Nemesis System: учитывается всё от имени и внешности до манеры говорить и отношений с другими орками. Игра позволяет создавать всё новые и новые комбинации характеристик, используя их по принципу конструкторов Lego.

Более того, если орк убивает персонажа игрока, он получает новое звание в армии Саурона. Причем события сохраняются в памяти на случай очередного столкновения. И если орка убивают или ранят, он возвращается снова – практикуя другие навыки и пытаясь продемонстрировать свое превосходство. На этот раз у него появляется процедурно-генерируемый шрам (например, тарелка над глазом, если его выкололи, или мешок над головой, если орк был обезглавлен).

Так возникает конкуренция и вражда, что позволяет игроку использовать социальные связи орков во всевозможных личных целях (например, чтобы настроить кого-то против командира); вы испытываете определенные чувства по отношению к плохим ребятам, что странно, ведь убивать врагов – главная задача большинства видеоигр. По мнению директора BioShock Кена Левайна, Shadow of Mordor – «первая игра открытого типа взаимодействия». Это важный шаг на пути создания традиционных игровых сюжетов, которые адаптируются под решения игрока, а не просто существуют параллельно, как, скажем, при выборе новой книги о приключениях.

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

3. Непредсказуемые уровни и удивительная механика в Spelunky

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Пожалуй, только Rogue и Diablo превосходят Spelunky Дерека Ю (Derek Yu) по степени интеграции принципов процедурной генерации. Гениальность данного проекта заключается в том, что он мастерски детализирует механику и системы, лежащие в основе игры, а не обращаются к различным уровням запоминания (последний прием и вовсе не работает, так как каждый уровень генерируется буквально за несколько секунд до начала сессии). Доцент Нью-Йоркского университета Джулиан Тогелиус (исследователь вышеупомянутых тенденций) считает, что такой фундаментальный сдвиг в акцентах — от модификации уровня к изменению правил игры – демонстрирует наиболее эффективный способ применения процедурной генерации. «Невероятно важно, что игрок даже не предполагает, какие задачи ему придется решать в дальнейшем, именно поэтому генерация уровней (довольно простой, но чрезвычайно эффективный механизм) столь важна», — уверяет он.

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

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

После первого релиза Spelunky в 2008 году появилось множество имитаций, но ни одна из них не сумела воплотить в себе ту же идеальную комбинацию авторской идеи, рандомизации и элегантности.

ИТОГО: Генерируя уровни прямо во время игры по простой формуле, Spelunky заставляет игрока вникать в правила и анализировать возникающие системы, а не просто изучать геометрию очередного видеопродукта.

4. Смежные алгоритмические системы Dwarf Fortress

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

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

По мнению Тани Шорт, больше всего этот эпический симулятор мира гномов, созданный Тарном и Заком Адамс, поражает простотой десятков взаимосвязанных алгоритмических систем. «Большинство воспринимает Dwarf Fortress как результат креативной работы гениального инженера, а продукт в большей степени похож на слоеное пирожное, чем на двигатель внутреннего сгорания», — поясняет она. «У каждого элемента собственные правила, хотя он и подчиняется закономерностям, характерным для других компонентов. Только вот связь между частями целого едва уловима, а вышеупомянутая сложность понимания – прямое следствие различных типов взаимодействия – почти, как в нашей Вселенной. Не все заметно, а Эволюция идет».

ИТОГО: Dwarf Fortress отличается от других продуктов своего класса не сложностью концепции, а тем, как отдельные простые элементы игры наслаиваются друг на друга, что способствует процедурной генерации опыта игрока – благодаря этому каждая сессия открывает для него новый, уникальный, многомерный и совершенно непредсказуемый мир гномов.

5. RymdResa: Впечатляющее величие, таящееся во враждебной чужой вселенной

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

В современном мире инди-«рогалик» — явление более чем распространенное, но лишь немногие из игр этого жанра сочетают процедурную генерацию с тематикой продукта так же удачно, как это получилось у создателей RymdResa. Подобно Elite и долгожданной No Man’s Sky в данной игре процедурно генерируется необъятная Вселенная, в которой планет и всевозможного космического мусора столько, что их вряд ли когда-либо можно было бы посетить. Цель такого подхода одна: игрок должен ощутить одиночество.

Он путешествует во враждебном, мрачном небытии, изредка сталкиваясь с различными проплывающими мимо предметами, космическими кораблями, небесными телами или переживая катастрофы, которые почти не оставляют надежды на спасение. Красота RymdResa заключается в том, что сама по себе поэтика жизни космонавта на борту корабля игрока, общая атмосфера и стиль — опасность, одиночество, покой, необъятность просторов – возникает благодаря генерируемым алгоритмам, формирующим целый мир. В данном случае эти эстетические элементы — как правило, упускаются при ручной разработке дизайна уровней – усиливаются за счет ощущения отчужденности и грандиозных алгоритмов процедурной генерации, которые в каждой новой сессии предлагают исследовать уникальную вселенную.

ИТОГО: С помощью загадочных тенденций процедурной генерации удается задать нужную тональность и подчеркнуть соответствующие тематические характеристики, что влияет на настроение игрока, вызывает чувство отчужденности или опасности в зависимости от дизайна уровней.

6. Новинки заставляют исследовать миры Civilization тщательнее

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Если играть в Civilization, используя лишь статичные карты, созданные вручную, надолго вас не хватит. Слишком скучно. Основную идею этой серии компьютерных игр прекрасно описывает высказывание Сида Мейера, согласно которому хороший дизайн различных ситуативных вариантов перестает впечатлять, как только становится ясно, где искать те или иные предметы (персонажей). Тогелиус полагает, что «в игре очень важно каждый раз иметь дело с новыми картами, ведь так первую половину сессии вы изучаете предложенные условия, не понимая устройства мира и не зная, с какими цивилизациями столкнетесь».

Главное понять, почему в игре вроде Civilization или Age of Empires, если мы говорим о стратегии реального времени, необходима процедурная генерация, в то время как многие другие продукты с аналогичными системами взаимодействия работают только с картами, созданными вручную. Процедурно-генерируемые карты подстегивают дух исследователя, но их очень сложно адаптировать под различные стратегии и стили игры. Тогелиус был членом команды разработчиков, в 2013 году тестировавших процедурно-генерируемые карты многосерийной Blizzard RTS StarCraft, рассчитанной на нескольких игроков. «Члены сообщества едва не подняли нас на смех: подготовленные карты не были на 100% симметричными», — вспоминает он.

ИТОГО: Процедурная генерация позволяет создавать новые карты в каждой сессии, а, значит, игрок исследует и экспериментирует, хотя нескольким игрокам будет удобнее без подобной функции, если только открытия не главная цель игры.

7. Экспериментальные процедурно-генерируемые игры предлагают творческие, эффективные решения сложных задач

что такое процедурная генерация. Смотреть фото что такое процедурная генерация. Смотреть картинку что такое процедурная генерация. Картинка про что такое процедурная генерация. Фото что такое процедурная генерация

Некоторые из наиболее дальновидных и инновационных инициатив в сфере создания процедурно-генерируемого контента – результат научных исследований, а не некоммерческой разработки игр. В ходе недавнего проекта Georgia Tech был представлен автоматический генератор уровней для Super Mario Bros, основанный на алгоритме, описанном в одном из видеороликов с YouTube. Другой проект Georgia Tech позволяет генерировать простые интерактивные сюжетные линии.

AI, известный широкой общественности, как ANGELINA, специализируется на процедурной генерации целых игр – включая не только отдельные элементы, но и механику — используя речевые команды (в качестве тематических рубрик). Дизайнер технологии Майкл Кук также руководит Procedural Generation Jam, специалистами которого, среди прочего, в 2014 году была создана игра, предлагавшая раскрыть таинственное убийство.

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

Не просто конвейер контента

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

И не забывайте о том, что разнообразие не всегда синоним высокого качества игры.

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

Процедурно-генерируемый контент может выполнять различные функции — адаптации анимационных систем, как в случае со Spore; подготовки макетов подземельных владений, как в Diablo или Rogue; создания многочисленных уровней, развивающихся городов, незнакомых ландшафтов, бесконечных комбинаций геймплея, более подходящих систем, удачного музыкального сопровождения и не только.

И, наконец, использование процедурной генерации всегда сводится к ответу на один простой вопрос: С какими элементами игры четкий алгоритм или набор алгоритмов справится лучше, чем вы?

Немного ненавязчивой рекламы в подвале. В честь того, что общая емкость сети нидерландского дата-центра, в котором мы предоставляем услуги, достигла значения 5 Тбит / с (58 точек присутствия, включения в 36 точек обмена, более, чем в 20 странах и 4213 пиринговых включений), мы предлагаем выделенные серверы в аренду по невероятно низким ценам.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *