Эссе о разработке игр, мышлении и книгах

Write Your Own Adventure

Я уже публиковал концепт документы игр. В этот раз будет не концепт, a скорее white paper игр нового поджанра. Несколько его представителей уже есть, со временем их будет становиться больше.

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

Write Your Own Adventure — WYOA — по аналогии с Choose Your Own Adventure — CYOA.

В WYOA игрок не ограничен небольшим количеством предопределённых вариантов действий, как приходится делать в CYOA из-за сложности поддержки дерева сюжета. Количество выборов будет либо очень большим либо бесконечным. Благодаря нейронным сетям, конечно, но о них позже.

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

Текущие представители:

  • AI Dungeon - первая ласточка, появилась в 2019 как прототип и с тех пор постепенно развивается.
  • Gamio AI - русскоязычная поделка, может быть разовьётся во что-то интересное.

Думаю, на гитхабе найдётся ещё десяток прототипов.

Ключевой геймплей WYOA можно описать следующим образом:

  1. Игра описывает игроку текущую ситуацию в более-менее художественном стиле: текстом, картинками.
  2. Игрок выбирает действие из списка предложенных или вводит своё описание.
  3. Игра применяет выбор игрока к состоянию мира и делает шаг моделирования игровой ситуации.
  4. go to пункт 1.

Пункт 3 является ещё одним отличием от CYOA. В CYOA обычно моделирования нет или оно условное. В основном игрок передвигается по предопределённому дереву или DAG-у истории. В случае же WYOA скорее всего будет использоваться именно моделирование.

Текущие реализации

С появлением нейронных сетей для генерации текста, естественным стало попробовать их в качестве помощников писателей или, что интереснее, в качестве Automatic Dungeon Master — ADM. ADM, в теории, мог бы подстраиваться под игрока и создавать описания игровых сцен налету.

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

Но как минимум один из экспериментов — AI Dungeon — завершился относительно удачно и продемонстрировал принципиальную возможность создания ADM. Соответственно, сейчас дело за временем и технологиями.

Насколько я вижу по внешним признакам и понимаю предметную область, текущие попытки создания ADM используют максимально прямолиненый подход:

  • (до)обучается сеть, которая умеет продолжать введённый текст;
  • игрок вводит текст руками;
  • сеть его продолжает;
  • ???
  • профит.

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

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

Перевод вместо продолжения

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

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

Чем точнее и уже очерчена область задач, тем лучше сеть можно обучить.

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

С одной стороны будет красивый естественный язык, с другой — машинный DSL, с которым можно работать классическими алгоритмами.

В качестве DSL может выступать:

  • Описание состояния игры на очень упрощённом английском, как в большинстве текстовых рогаликов.
  • Техническое описание с использованием языка логического программирования вроде Prolog.
  • Язык математической логики: предикаты, etc.
  • Что либо ещё — поле для экспериментов велико.

DSL

Описанием ситуации на DSL мы можем манипулировать с помощью классических алгоритмов. Это задача не элементарная, но и не rocket science.

Под манипулированием я предполагаю:

  • трансляция текущей игровой ситуации из внутреннего представления в DSL.
  • трансляция из DSL команд во внутреннее представление игровой ситуации.

В некотором роде, таким занимаются все разработчики игр. Особенно разработчики roguelike — у них часто DSL представлен в наиболее классическом варианте — текстовом.

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

Контроль над описанием и изменением состояния даёт много преимуществ:

  • Генерация логически непротиворечивых состояний и вариантов развития событий с учётом историчности. А это самая значимая проблема текущих реализаций WYOA.
  • Формальная верификация состояния мира.
  • Точное, краткое, ортогональное, описание контекста для каждой ситуации. Важно для всех моделей ML.
  • Возможность внедрять игровые механики классическими способами, независимо от сложности механик.
  • Быстрая скорость моделирования: как промотки времени, так и генерации вариантов действий для игрока.

Возможная реализация

Разделим игровой движок на два слоя:

  • Ядро движка оперирует классической игровой логикой: NPC, правила перемещения, боя, etc.
  • Нейронный слой преобразует данные между техническим представлением для ядра и художественным для игрока.

Тогда:

  • Ядро описывает текущую игровую ситуацию на DSL.
  • Ядро генерирует несколько вариантов действий для ситуации и описывает их на том же DSL.
  • Нейронный слой переводит DSL в художественное описание ситуации и художественное же описание вариантов действий.
  • Игрок выбирает один из вариантов.
  • Ядро знает какие конкретно изменения надо произвести для выбранного варианта и корректно их применяет.
  • Возвращаемся к пункту 1.

С ядром, я думаю, всё ясно. По крайней мере для разработчиков игр :-)

Нейронный слой

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

Путь от DSL к красивому тексту может выглядеть так:

  • Классические алгоритмы формируют описание ситуации на DSL. Например, в виде предикатов сломано(герой, правая рука) или в виде очень сухого английского.
  • Сеть А по DSL строит текст на очень простом сухом языке.
  • Сеть Б насыщает сухой текст эпитетами.
  • Сеть В стилизует текст под конкретного автора. Например, под Толкина или Сюзанну Кларк.
  • Сеть Г правит текст, чтобы он согласовывался с предыдущим.

Каждая из сетей занимается переводом/трансформацией текста между соседними доменами, а значит их будет проще (до)обучать.

Структура нейронного слоя может быть сложнее:

  • Иметь больше промежуточных или специализированных сетей. Например, отдельную сеть для генерации диалогов или сеть для фильтрации контента (сексуального, оскорбительного, etc).
  • Поддерживать обратное преобразование: из текста в команды на DSL, которые будут применяться движком игры к текущей ситуации.
  • По DSL можно генерировать не только текст, но и иллюстрации. Из корпораций это умеют уже все по-моему, вот гугл недавно подтянулся. Nvidia умеет даже генерировать изображения по грубому наброску. А сгенерировать грубый технический эскиз исходя из конкретной игровой ситуации не составляет принципиальных проблем.

Риски

Без рисков, конечно, никуда. Иначе ниша уже была бы занята.

  1. Разработка технологии всё ещё может оказаться слишком дорогим удовольствием.
  2. Может потребоваться слишком много времени на эксперименты: 2.1. Для выбора оптимального DSL. 2.2. Для выбора оптимального уровня абстракций описания игровой ситуации. 2.3. Для формирования оптимального набора сетей. 2.4. Геймдизайн ещё под всё это надо подогнать.
  3. Текст, скорее всего, в первых версиях сможет быть только англоязычным и несерьёзным. Соответственно, другие рынки будут либо закрыты либо на них уйдёт менее качественный продукт — придётся добавить ещё одну сеть для перевода на сторонние языки.
  4. Аппаратное обеспечение всё ещё может быть не готово, чтобы быстро и дёшево гонять цепочку сетей для достаточно качественной и быстрой генерации.

Купировать часть рисков можно сократив фронт работ:

  • Вместо разработки DSL и игровой логики выбрать готовую roguelike игру, например, Dwarf Fortress и заниматься только нейронными сетями.
  • Сосредоточиться на разработке ядра движка, заточенного под детальное описание состояния мира в DSL, и ждать, пока в соседних областях появятся необходимые технологии.