Я создал видеоигру с помощью нейросетей, но не смог опубликовать ее в 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.

РедакцияВы бы сыграли в видеоигру, которую создала нейросеть?
  • Sergey AveryanovКогда появятся проекты от больших издателей с процедурно сгенерированным контентом, тогда valve и зачешется и внесёт ясность в свои политики3
  • Олег СкуттеKlark, я ответил на вопросы которые мне были заданы. Про заработок меня не спрашивали. Игра, которую отклонили в Steam, сейчас доступна на моём Patreon. Мой доход на Patreon виден всем - $200-300 в месяц.3
  • SoledadЗуммеры придумали текстовые РПГ! Следующий шаг - прикрутить дайсомёт, чтобы делать проверки действий игрока или его окружения, а также задавать каждому игроку определённые параметры, бонусы и штрафы для прохождения этих проверок. Не благодарите)10
  • Александр КарасёвМне кажется ответ Стима достаточно ясен. Они понятия не имеют что сделать с авторскими правами, потому что законодательство толком в этой части до сих пор нет. Это проблема в целом генерируемого контента, но в вашем случае я так понимаю вообще требуется доступ к ChatGPT, чтобы происходила генерация на лету. Безусловно задумка АИ текстовой РПГ это довольно интересно, но тем кто размещает контент на своей площадке решать приходится проблемы другие. Их заботит в первую очередь не качество или интерес, а законность их действий. Конечно часть генерируемого контента в Стиме есть, но какая? Возможно, это просто отклонения от нормы и случайные ошибки, а не политика компании.7
  • Владислав ИжевскийSoledad, дорогой ты мой бумер, если ты не понимаешь, что такое текстовые РПГ, то лучше не пиши. Главная проблема всех старых ТРПГ (компьютерных) - угадать правильную команду так, чтобы компьютер мог ее запарсить, интерпретировать и выдать ответ. Нейронные сети избавляют от этого ограничения. Можно писать любым слогом, с опечатками, не пытаясь угадать, какой правильный ответ задумал гейдизайнер. Это действительно большой шаг вперед.3
  • Олег СкуттеВот более подробная информация https://dtf.ru/gameindustry/1921309-valve-nachala-otkazyvat-v-steam-relize-razrabotchikam-igr-sozdannyh-pri-pomoshchi-neyrosetey https://gameworldobserver.com/2023/06/30/valve-bans-games-ai-assets-on-steam-copyright0
  • Олег Скуттеhttps://twitter.com/AiRoguelite/status/1685070285240971266 Недавно автор игры AI Roguelite сообщил что его новую игру отклонили, хотя она использует те же нейросети что и AI Roguelite. Получается что их новая политика не распространяется на уже вышедшие игры0
  • Олег СкуттеKlark, было время когда эти игры приносили мне более десяти тысяч долларов в месяц. Суммарно за все эти годы счет близится к миллиону.1
  • Klark TeknikОлег, афигеть, дк у тя сейчас на счету лям баксов?0
  • Олег СкуттеKlark, так было бы если бы деньги не тратились.0
  • SoledadВладислав, дорогой, вы ведь даже не поняли, на что отвечаете. И зачем в повествовании нужен рандом. Без него любой квест скатывается в унылое говно, слог тут ни при чём. Человек добавил для ИИ инструкции, то есть ввёл рамки, а элемент случайности не добавил. В классической текстовой ролёвке это ок, поскольку его реализовать примерно никак. Но зачем тащить ограничения туда, где их можно спокойно убрать? Игра от того лишь выиграет0
  • Антон КовалёвСпасибо за статью! Очень классная идея! Сам тоже хотел попробовать создать что-то подобное. Продолжайте свои попытки и поиски. Использование ИИ в играх - это очень актуальная тема и со временем будет ещё более актуальной и востребованной! Насчёт решение вашей проблемы, можете попробовать связаться с представителями OpenAi, StabilityAi и создателями модели Stable Diffusion, которую используете для генерации. Возможно, они смогут оказать какую-либо поддержку, дать совет или разрешение на использование. В любом случае, не бросайте это дело. Постарайтесь обжаловать решение Steam. Если снова откажут, то обжалуйте через некоторое время снова. Конечно, представители Steam или других издательств хотят перестраховаться, так как нейросети пока что серая зона в законодательстве. И, конечно, они не хотят получать судебные иски. Но по мере распространения нейросетей, что происходит моментально, думаю, они ослабят свою политику. В любом случае, удачи.2
  • Дмитрий СтепановДочитал до: "Все изменилось в конце 2022 года. Я вынужденно уехал из России и за границей впервые получил доступ к ChatGPT и OpenAI API." Видимо и со стимом так же. "Вынужденно" отказались публиковать игру.0
  • Михаил ГородиловАвтор, Вы мой герой. Восхищаюсь Вашим талантом, стараниями и склонностью к новаторству. Вы человек будущего.2
  • Олег СкуттеДмитрий, не знаю что ты имеешь в виду, но на всякий случай поясню. Из-за огромных банковских комиссий за переводы в РФ и из-за укрепившегося на тот момент курса рубля я стремительно терял деньги и больше не мог поддерживать онлайн серверы для своих игр, поэтому был вынужден уехать. В начале 2023 долларовые платежи из США в большинстве своём вообще перестали доходить до РФ.0
  • RadrogАнтон, Габен решил что нет, значит нет. Он явно больше вас соображает.0
  • BuTeK asdasdКакая вообще разница какая игра, дешёвые игры покупают за упоротые иконки для профиля0
  • Данил НовожиловRadrog, Самое смешное что уже в Морровинде ввели процедурную генерацию, просто что-бы вы понимали насколько далеко вы в прошлом)0

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