Как мы создали нейросеть для генерации квестов в ARPG

Всем привет! Многие из вас слышали о том, что кто-то опять добавил в свою игру/мод к игре какую-то нейросеть. Сейчас я вам расскажу как это сделали мы.

Как мы создали нейросеть для генерации квестов в ARPG

Модов на Skyrim с интеграцией ChatGPT выходит всё больше и больше, но они не очень сильно погружают в игру. Проблема в том, что знания NPC не ограничены миром игры и вот ты уже можешь пообщаться с Толфдиром о Гендальфе.

Мы решили использовать нейросети иначе. Мы вдохновились проектом AI Dungeon, который использует ChatGPT для создания приключений в стиле Dungeons & Dragons. Это очень круто, но интегрировать подобную технологию в игровой движок вроде Unreal Engine не так-то просто. AI Dungeon может использовать огромное количество различных действий с помощью текста, но в игре все эти возможности должны быть визуально отображены, что представляет собой серьезную проблему. В текстовой игре отображение всего, что выдает нейронная сеть, ложится на наше воображение, в игровом движке - нет. Помимо этого, языковые модели могут выдумывать новые факты и предметы, которые вообще не соответствуют состоянию мира.

Как мы создали нейросеть для генерации квестов в ARPG

Мы пошли другим путём. Что если мы организуем состояние мира: все игровые объекты, их связи и состояния, в виде одной базы данных, а после представим их в виде графов, то есть множества соединенных между собой сущностей. Давайте объясню на пальцах: Допустим, у нас есть несколько игровых сущностей: Геральт, Каэр-морхен. Сначала зададим типы этих сущностей: персонаж, локация. После создадим несколько видов связей: тип, находится_в. И теперь соединим всё воедино, мы получаем следующие пары: Геральт -тип- персонаж, Каэр-морхен -тип- локация, Геральт -находится_в- Каэр-морхен.

Мы можем уточнять каждый вид связи, добавлять условия, например, -находится_в- может соединять только персонажа и локацию или предмет и локацию.

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

Как мы создали нейросеть для генерации квестов в ARPG

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

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

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

Также мы планируем после окончания разработки системы генерации квестов, оформить её в виде плагинов для популярных игровых движков, таких как UE или GODOT.

3232
20 комментариев

прописанные квесты > лучше сгенерированных.

любой контент, который не редактировался рукой человека - сводит смысловой вес данного контента в ноль.

мало кому на самом деле было бы интересно (как в фильме HER) болтать с ИИ не по приколу (даже если это продвинутый ИИ)

потому что: человек > машина

6

1. Ты ахуеешь как много людей тратят время на "HER с деменцией". Тут персонажи ведут себя более адекватно за счёт связи с миром игры. Персонажи могут заменить "записки" и "логи", т.к. у них можно спросить о мире и они на их ответ можно положиться (как диалоги Морровинда, но лучше). О том что в Stardew Valley романсить персонажей очень любят я вообще молчу.

2. Если то к чему не прикасался человек - это ничто, то и истории из RImworld тоже ничто. А еще все эти впечатления из майна тоже ничто. Крч, если что-то не режиссировалось, а получилось само собой по правилам игры - это тоже контент. Единственная разница, что ты не можешь с таким контентом сделать претенциозное эссе на тему "Что хотел сказать автор вот этой репликой NPC".

4

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

2

человек > машинаскажешь это еще раз через 10 лет, кожаный мешок!
слава роботам!)

А что в итоге для игрока? Это просто дженерик квесты принеси-подай только с измененными локациями/персонажами/обьектом? Просто упрощение захламления мира для разработчика.

2

ну будет дженерик принеси-подай только если задать только это действие, но мы довольно долго собирали набор действий и, опираясь на кучу игр. В итоге с помощью этой схемы возможно было описать около 80% квестов из Skyrim, Oblivion, Witcher 2 и 3, Dragon Age: Origins. Именно на квестах из этих игр мы валидировались.

1

В итоге нейросеть просто генерирует текстовое описание действий и событий квеста которое не привязано напрямую к игровой логике реализованной на конкретном движке(о интеграции с движком написано но мне не совсем понятен этот момент)? Или всё же генерируется какая либо внутренняя логика(как вариант какая нибудь таблица с полным описанием алгоритма которую можно "распарсить" и на основе этого реализовать итоговую логику в нужном движке) для дальнейшего упрощения реализации квеста по полученному алгоритму? Ещё с генерацией квестов есть один момент - если квест является процедурным то и почти все задействованные им элементы должны создаваться тоже процедурно, иначе придётся прописывать группы используемых элементов(заранее созданных) и квест получится не таким уж и процедурным. В общем генерация игровой логики процедурных квестов относительно выбранного фреймворка как мне кажется(занимаюсь разработкой на Unreal Engine 4, в том числе реализовал простую систему процедурных квестов) является проблемной так как требует для работы так же функционал генератора контента наполнения мира, а без интеграции с ним будет требовать кучу ручной работы по реализации логики квеста. Но в принципе даже если нейросеть генерирует простое описание алгоритма квеста это уже хороший результат, поздравляю!