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

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

3030

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

Ответить

Не просто текстовое описание. Движок предоставляет генератору данные об игровых механиках (действиях). Что игрок или NPC может сделать и при каких условиях. Само собой чем больше возможностей у персонажей реализовано в игре - тем разнообразнее будут квесты. Это не магическая кнопка "сгенерировать игру". Игре нужно адекватно добавлять данные в эту "базу данных". Генератор не даёт никаких "алгоритмов" которые можно распарсить в логику. Генератор возвращает последовательность целей для игрока с описанием контекста.

Условно ты говоришь с персонажем... Допустим с Геральдом. Вы говорите и он упоминает, что его меч затупился. Он это упоминает не просто так, а из-за того, что его экипировка содержит предмет "меч" с тегом "затупленный". Диалоговая система понимает, что это почва для квеста и заставляет его попросить игрока о помощи. Если игрок соглашается - игра обращается к генератору и передаёт инфу о мире игры и что в этом мире можно делать. Дальше генератор возвращает квест как набор действий, вроде "взять меч_геральда", "отправиться лавка_кузнеца", "убрать_тег затупленный с меч_геральда" и тд.
Помимо этого генератор возвращает читаемое описание квеста. Например "В таверне вы встретили загадочного седовласого война по имени Геральд. После недолгой беседы вы выяснили, что его оружие нуждается в срочном ремонте, но Геральда сковывает контракт, по условиям которого он не может покинуть таверну до заката. Почините меч Геральда у местного кузнеца и верните ему до наступления заката".

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

Это система, которая становится лучше от избытка информации и хуже от его недостатка. Если всё что в вашей игре можно делать - это лутать патроны, стрелять и говорить с NPC, то и квесты будут "залутай 1000 бычьих анусов и отнеси их голодным детям".

Так вот: реализовать логику на движке нужно заранее. Генератор за тебя это не сделает, он использует то что есть. Так задумано. Если бы было иначе и генератор мог бы вносить изменения в игру как таковую (представим себе что это возможно), то такой генератор было бы невозможно свести к какому-то желаемому геймплею. Условно делаете вы стелс-игру про киборга-убийцу, а генератор начинает выдавать задания из разряда "Посади 100 кустов помидоров".

2
Ответить