Я создал видеоигру с помощью нейросетей, но не смог опубликовать ее в Steam

История читателя

23
Я создал видеоигру с помощью нейросетей, но не смог опубликовать ее в Steam

Это история из Сообщества. Редакция задала вопросы, бережно отредактировала и оформила по стандартам журнала

Аватар автора

Олег Скутте

создал игру вместе с нейросетями

Страница автора

Более десяти лет я создаю видеоигры в одиночку.

Моим первым проектом стал простой 3D-файтинг, а последним — игра, которую в реальном времени создают сразу несколько нейросетей.

Расскажу, откуда у меня появилась такая идея и почему я не смог опубликовать игру в Steam.

Путь в разработке и выпущенные игры

Я с детства интересовался видеоиграми и их разработкой. Помню, что часто рисовал в тетрадях выдуманные уровни и записывал интересные идеи. Когда в 2010 году у меня появился компьютер и доступ в интернет, я редактировал файлы и создавал моды для различных игр. После этого изучал игровые конструкторы вроде Raycasting Game Maker.

В 2013 году начал самостоятельно изучать программирование и игровой движок Unity. Мне тогда было 16 лет, я учился в школе и целыми днями сидел за компьютером. Уже через несколько месяцев опубликовал в Steam первую игру — Drunken Wrestlers. Это был простой 3D-файтинг с ragdoll-физикой. Так называют анимацию «тряпичной куклы» — когда модели реалистично сгибаются при взаимодействии с окружающей средой.

Drunken Wrestlers была скачана более 10 миллионов раз. В игру даже сыграл известный ютуб-блогер PewDiePie — его ролик собрал 3,5 миллиона просмотров. Через несколько лет я выпустил ремейк игры для мобильных устройств в Google Play.

Отрывок из ролика. Источник: ютуб-канал PewDiePie
Отрывок из ролика. Источник: ютуб-канал PewDiePie

В 2016 году я начал разработку второй части. По сути, Drunken Wrestlers 2 стала моим первым серьезным проектом. Я в одиночку создавал онлайн-мультиплеер, редактор карт, несколько режимов и кастомизацию персонажей. У меня не было достаточно знаний для игры такого уровня, поэтому разработка растянулась.

Через три года игра вышла в Steam в раннем доступе, но я продолжал над ней активно работать еще столько же времени. Лишь летом 2022 года, спустя шесть лет разработки, Drunken Wrestlers 2 была закончена.

Моей третьей игрой стал платформер Locomotorica: Staggering Ragdoll — он тоже создан с помощью ragdoll-физики. В этот раз игроку нужно не драться, а учиться ходить и преодолевать препятствия.

Отрывок из трейлера игры. Источник: ютуб-канал Oleg Skutte
Отрывок из трейлера игры. Источник: ютуб-канал Oleg Skutte

Сделать это очень сложно: на геймпаде нужно использовать сразу несколько кнопок, чтобы передвигать ноги персонажа. Даже невысокий выступ или маленькая дыра становятся трудными испытаниями. Если не получится их пройти, 3D-модель забавно упадет.

Locomotorica: Staggering Ragdoll вышла в Steam в конце мая 2023 года. Параллельно я начал разрабатывать свою четвертую и самую необычную игру. Она создана с помощью нейросетей.

Увлечение нейросетями

Впервые я обратил внимание на нейросети в далеком 2015 году, когда они создавали смешные галлюциногенные картинки с собаками. Я подумал, что технология точно пригодится в создании видеоигр — особенно таким соло-разработчикам, как я. Но полноценно познакомился с нейросетями лишь в 2019 году: после релиза GPT-2 пытался создавать чат-ботов.

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

В 2015 году нейросети еще не умели создавать фотореалистичные картинки. Источник: fastcompany.com
В 2015 году нейросети еще не умели создавать фотореалистичные картинки. Источник: fastcompany.com

Все изменилось в конце 2022 года. Я вынужденно уехал из России и за границей впервые получил доступ к ChatGPT и OpenAI API. Тогда я понял, что процедурная генерация текстовых ассетов для игр — кода, диалогов, сценария — становится возможной.

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

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

Идея и разработка новой игры

Начало разработки. В конце января 2023 года я начал работу над новой игрой и назвал ее Dreamio: AI-Powered Adventures. Она создана во втором лице, то есть игрок не взаимодействует с миром напрямую, а читает и слушает рассказчика с искусственным интеллектом. Тот придумывает ситуации и спрашивает, что игрок будет делать дальше. Можно отвечать что угодно и задавать рассказчику уточняющие вопросы про окружение или персонажа.

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

Окно с выбором сеттинга. Источник: store.steampowered.com
Окно с выбором сеттинга. Источник: store.steampowered.com
Первое сообщение от рассказчика, если выбрать сеттинг «киберпанк». Оно никогда не меняется. Источник: store.steampowered.com
Первое сообщение от рассказчика, если выбрать сеттинг «киберпанк». Оно никогда не меняется. Источник: store.steampowered.com

Генерация ответов. В тот момент ChatGPT еще не имела API, то есть сторонние разработчики не могли работать с сервисом напрямую. Поэтому я использовал GPT-3 — эта версия нейросети просто генерирует продолжение текста пользователя. Так что у меня была полная свобода при составлении запроса. Когда OpenAI сделала ChatGPT API публичным, оказалось, что ChatGPT тоже может продолжать текст, поэтому переход с GPT-3 был простым.

Основной запрос для генерации сюжета с помощью GPT-3 выглядит примерно так:

  • Рассказчик: *описывает стартовый сеттинг*
    Игрок: *совершает действие*
    Рассказчик:

После каждого ответа игрока диалог отправляется в нейросеть. Так как переписка оканчивается на пустой реплике рассказчика, GPT-3 анализирует контекст и генерирует продолжение. После каждого действия игрока процесс повторяется.

Обход лимита символов. У GPT-3 есть ограничение на длину запроса. После определенного количества реплик он становится слишком длинным — нейросеть отказывается с ним работать. Чтобы обойти ограничение, я решил генерировать краткое содержание игровой сессии.

Запрос для генерации краткого содержания истории выглядит следующим образом:

  • Рассказчик: *стартовый сеттинг*
    Игрок: *действие*
    Рассказчик: *продолжение*
    Игрок: *действие*
    Рассказчик: *продолжение*
    Игрок: *действие*
    Рассказчик: *продолжение*
  • Краткое содержание событий и важных деталей

Нейросеть анализирует сессию и заменяет историю кратким содержанием. Последующие запросы выглядят так:

  • Предыдущие события: *краткое содержание*
    Рассказчик: *продолжение*
    Игрок: *действие*
    Рассказчик: *продолжение*

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

Когда игрок нажимает кнопку «What are my choices?», GPT-3 генерирует пронумерованный список возможных действий.

Так выглядит выбор ответа в игре. Источник: store.steampowered.com
Так выглядит выбор ответа в игре. Источник: store.steampowered.com

Озвучка. Реплики рассказчика озвучиваются синтезом речи. Я пробовал озвучивать их с помощью ElevenLabs. Рассказчик звучал как живой, но стоимость озвучки оказалось запредельно высокой. Я остановился на Neural2 от Google. Игрок тоже может отвечать рассказчику голосом. Речь распознает нейросеть Whisper от OpenAI.

Генерация иллюстраций. Мне пришлось придумать запрос для GPT-3, который в ответ создавал запрос для Stable Diffusion. Упрощенно он выглядит так:

  • Рассказчик: *стартовый сеттинг*
    Игрок: *действие*
    Рассказчик: *продолжение*
  • Создай визуальное описание текущей сцены

В ответ на запрос GPT-3 вынуждена визуально описать текущую сцену. Полученный ответ автоматически отправляется в формате запроса в Stable Diffusion. Сгенерированное изображение подгружается в игру и отображается рядом с диалоговым окном как иллюстрация.

Диалоговое окно и иллюстрация сцены. Источник: store.steampowered.com
Диалоговое окно и иллюстрация сцены. Источник: store.steampowered.com

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

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

Эффект глубины на иллюстрации
Эффект глубины на иллюстрации

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

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

Я решил проблему таким образом: добавил инструкции к запросам для рассказчика и дал игроку возможность настраивать эти инструкции. Запросы к GPT-3 со стандартными инструкциями теперь выглядели так:

  • Инструкция рассказчику: когда игрок умирает, напиши Game over. Если игрок попробует сделать что-то сверхъестественное, напиши, что он не может это совершить.
  • Рассказчик: *стартовый сеттинг*
    Игрок: *действие*
    Рассказчик:
Пример концовки игры. Игрок пытался сбежать от зомби на машине, но угодил в канаву. Источник: store.steampowered.com
Пример концовки игры. Игрок пытался сбежать от зомби на машине, но угодил в канаву. Источник: store.steampowered.com

GPT-3 берет во внимание инструкции. Если игрок умирает, рассказчик выводит на экране надпись Game over, а если игрок пытается сделать что⁠-⁠то сверхъестественное, рассказчик отказывает ему. Игра распознает надпись Game over в диалоговом окне и заканчивает игру, но предлагает загрузить последнее сохранение.

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

Попытка опубликовать игру в Steam

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

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

Письмо поддержки с отказом публиковать игру в Steam
Письмо поддержки с отказом публиковать игру в Steam

Не могу понять логику Valve, ведь в Steam уже есть игры, в которых используют ассеты, сгенерированные в нейросетях. Станет ли компания удалять уже выпущенные игры? Видимо, нет.

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

Итоги и планы

У Dreamio: AI-Powered Adventures до сих пор есть страница в Steam. Но сейчас игра доступна только на моем сайте. В нее можно сыграть бесплатно — для этого нужен аккаунт на Patreon.

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

Думаю, с помощью Function calling API в ChatGPT со временем можно будет создавать улучшенных игровых NPC. Они будут взаимодействовать с окружением, а не просто вести себя как чат-боты с лицом. Да и процедурная генерация целых 3D-миров с помощью нейросетей, кажется, тоже не за горами.

В общем, идей у меня всегда много — на какой-то конкретной пока не остановился. Но ясно одно: с нейросетями я буду осторожнее. Наверное, вернусь к ним, только когда получу доступ к API безопасных для коммерческого использования нейросетей вроде Adobe Firefly или Llama 2.

Редакция
Вы бы сыграли в видеоигру, которую создала нейросеть?
Комментарии проходят модерацию по правилам журнала
Загрузка

Вот что еще мы писали по этой теме

Сообщество