Двухдневный соло-хакатон по созданию игр на Fable 5 и Nano Banana 2
Редактор с запущенной игрой
Оценить игру в действии можно по ссылке: https://games.zenkovich.space/TokenDelivery/
Исходный код и игровые ассеты доступны в репозитории: https://github.com/o2-engine/o2-Template/pull/1
С давних пор я питаю страсть к созданию собственных велосипедов. В этот раз я решил не просто разработать игру с нуля, но и задействовать исключительно собственные инструменты:
-
фирменный игровой движок o2 — https://github.com/o2-engine/o2
-
визуальный онлайн-генератор ассетов на нодах — https://assetsline.zenkovich.space/
Одно дело — прогонять абстрактные синтетические тесты, и совсем другое — довести до релизного состояния полноценную, пусть и компактную игру. Начнем с фундаментального компонента — движка.
o2 game engine
Это мой давний пет-проект, который на протяжении десятилетия дорабатывался до состояния, когда в нем действительно комфортно создавать игры. Набор возможностей включает все необходимое для мобильного и веб-сегмента: поддержку 2D и 3D, полноценную сцену и редактор, гибкий интерфейс, системы частиц и анимации, скрипты, аудиоподсистему и физику. Получился этакий аналог Unity3D, но избавленный от его ключевых недостатков.
В ходе разработки я преследовал две главные цели:
-
проверить, насколько o2 пригоден для продуктивной разработки игр, а не бесконечного латания дыр в самом движке;
-
оценить потенциал искусственного интеллекта: сможет ли он эффективно писать код, генерировать под него контент и самостоятельно разбираться в архитектуре.
Первый эксперимент можно считать успешным. Мелкие правки, конечно, требовались, но они происходили на лету и ничуть не замедляли процесс.
Второй пункт превзошел ожидания — абсолютно весь кодовая база игры написана ИИ. Разумеется, под моим чутким руководством, но нейросеть продемонстрировала отличное понимание внутренней логики движка.
Этому во многом способствовала детальная документация в формате markdown, находящаяся прямо в репозитории o2. Там подробно расписана архитектура движка и все его подсистемы. Кроме того, в инструкциях для ИИ было строго прописано: прежде чем изобретать собственный костыль, проверь документацию на наличие готового решения. Например, в прошлом опыте с другой игрой нейросеть пыталась реализовать анимацию через процедурные изинги в коде. Хотя всё работало, нативный формат движка справляется с этим элегантнее, позволяя гибко настраивать параметры прямо в редакторе.
Не последнюю роль сыграл и компактный размер o2 — исходный код исчисляется всего несколькими мегабайтами. Для сравнения: кодовая база нашей рабочей мобильной игры весит около 70 МБ.
Ну и, конечно, нельзя не отметить возможности актуальных моделей вроде Claude Fable 5. На фоне их прогресса поневоле задумываешься о своем профессиональном будущем в эпоху робототехники.
Код
Технический стек проекта объединяет C++ и JavaScript. Игра предельно проста, поэтому можно было обойтись и одним JS, однако мне было любопытно испытать синергию C++ и скриптов в рамках собственного движка.
Весь код сгенерирован с помощью Claude Fable 5. Я выполнял исключительно функции код-ревьюера, не прибегая к ручному написанию кода.
Подобная автономность стала возможной благодаря качественному покрытию тестами. Золотой век автоматического тестирования наступил! Если раньше мы пренебрегали тестами из-за лени, дефицита времени или банального упрямства, то сегодня писать их проще простого — грех этим не воспользоваться.
В итоге и сама игра, и ядро движка покрыты юнит-тестами. Также задействованы интеграционные сценарии для проверки игровой механики: движок располагает встроенными средствами для создания скриншотов, симуляции тиков, кликов и прочих действий через специальный тестовый драйвер, который ИИ задействует для самоконтроля.
Главный принцип, заложенный в основу проекта: любая задача сопровождается тестами и подробным отчетом.
Это заставляет нейросеть двигаться строго по техническому заданию, исключая слепые догадки и хаотичные правки. В результате роль разработчика смещается в плоскость гейм-дизайна: вместо того чтобы диктовать порядок строк кода, ты формулируешь творческую задачу вроде «сделай так, чтобы машинка забавно пружинила после поворота».
Далее запускается автоматический конвейер ИИ: написание кода — тестирование — демонстрация результата. За время работы у меня накопилось свыше 50 графических отчетов, по которым наглядно прослеживается эволюция игры.
Генерация арта

Одной лишь программной логикой игру не наполнишь. Хотя, судя по феномену демосцены, чистый код способен творить чудеса…
Тем не менее, графика для проекта создавалась заблаговременно, а не в реальном времени. В качестве генератора изображений выступила популярная нейросеть Nano Banana 2. Она отличается демократичной стоимостью, хорошо улавливает стилистику и поддается хоть какому-то управлению. Забегая вперед, отмечу, что именно тотальный контроль над генерацией графики стал самым сложным испытанием.
Весь визуальный пайплайн можно разделить на три этапа:
-
проработка концептов, элементов интерфейса и базовых объектов;
-
создание карты, строений и уличного окружения (скамеек, кустарников и т.д.);
-
генерация звуковых эффектов, музыкального сопровождения и видеоматериалов.
Главная сложность при создании игрового арта с помощью ИИ — выдержать единый визуальный стиль и технические требования.
Нейросеть с легкостью нарисует иконку, кнопку, домик или любой другой объект. Но попытайтесь объединить их в целостный интерфейс или игровую локацию — результат, мягко говоря, рассыпется. Каждая новая генерация воспринимается моделью с чистого листа, и она выдает то, что считает нужным, а не то, что требуется по задумке.
Чтобы решить эту проблему, я собрал мини-инструмент, позволяющий настраивать графические пайплайны с помощью нод. Они наследуют заданный стиль и описание, а также оптимизированы под игровую специфику — умеют делать прозрачный фон, нарезать спрайты и т. д.
Ниже представлен пример подобного конвейера, применявшегося для хакатонной игры,
https://assetsline.zenkovich.space/#/s/FkxYrwbE-EIam4-tVhR7R6V6UnyvkAuGl5WuOAYdr_U?p=the%20loop
Принцип работы:
-
с помощью текстовых узлов задается общая концепция и сеттинг;
-
на их основе формируется базовый визуальный концепт проекта (либо загружается собственный вариант);
-
из концепта выводятся интерфейсные экраны и игровые объекты. Все они ссылаются на исходный арт-референс, что гарантирует строгое наследование стиля;
-
из полученных заготовок извлекаются отдельные компоненты: элементы HUD (иконки валюты, меню настроек, шкалы топлива), тайлы ландшафта и т.д.;
-
элементы дорабатываются путем текстовых правок или добавления грубых рукописных набросков;
-
финальные спрайты экспортируются в движок.
Если внимательно изучить скриншот выше, можно увидеть этот процесс в действии: слева расположен сгенерированный концепт-арт. В верхней части извлечены элементы интерфейса, а снизу вырезана машина игрока, которая послужила основой для генерации трафика.
Впрочем, далеко не весь контент удалось получить через этот инструмент: для зданий и тайлов карты потребовалось задействовать дополнительные скрипты.
Скрипты-генераторы для зданий и пропсов

Специфика изометрического города накладывает жесткие технические ограничения на графику:
-
все элементы окружения должны строго выравниваться по сетке;
-
необходимо безукоризненно выдерживать углы изометрии.
Здесь вновь напомнила о себе проблема предсказуемости нейросетей. Хотя домики успешно извлекались из концептов, у них постоянно «плыли» наклоны, перспектива или всё вместе. Попытка собрать из этого полноценный город приводила к удручающим результатам — сплошная кривизна и стилистический хаос.
Потребовался более детерминированный алгоритмический подход.
Текстуры зданий и объектов по-прежнему создавались через Nano Banana 2, но процесс обзавелся дополнительными шагами валидации:
-
Концепты строений генерировались поверх каркасных лайн-артов, созданных скриптом. Программа готовила примитивные силуэты зданий с четкими изометрическими параметрами и размерами сетки (серые коробки с базовыми окнами и красным основанием на скриншоте выше).
-
Полученный лайн-арт вместе с концептом и жесткими промптами передавался в Nano Banana 2.
-
Сгенерированный результат анализировался скриптом и отправлялся на доработку. Под изображение подкладывался исходный каркас, а нейросети ставилась задача исправить искажения перспективы и удалить артефакты.
-
Отретушированный вариант проходил автоматическую проверку: если алгоритм фиксировал пиксели в неположенных местах, актив уходил на перегенерацию.
-
Финальным этапом выступал ручной контроль. Я просматривал отчеты и отбирал удачные варианты.

Тайлы дороги
Дорожные тайлы потребовали особого внимания, поскольку от их точности зависит бесшовность стыков на игровом поле.
Многочисленные попытки сгенерировать готовый тайлсет целиком провалились. Нейросеть выдавала симпатичные варианты, но они упорно не хотели стыковаться друг с другом, выбивались из общей стилистики или обрастали мусорными артефактами разметки.
Решение оказалось схожим с методом для зданий, но с усложненным пайплайном:

-
векторная генерация дорожных сегментов в обычном 2D виде;
-
программный перевод в изометрическую проекцию;
-
наложение текстур асфальта, бордюров и разметки скриптами;
-
финальная полировка в Nano Banana 2 с инструкцией «улучшить качество, не нарушая границ».
Результат превзошел ожидания: графика попала в нужный стиль, а главное — дорога собиралась в единую сетку без малейших зазоров.
Генерация города

Финальная застройка города происходит процедурно в коде на основе базовых правил и весовых коэффициентов для объектов. Глубокой градостроительной логики здесь искать не стоит, поэтому при желании можно заметить немало абсурдных архитектурных решений. Формат хакатона диктует жесткие временные рамки, хотя потенциально этот генератор можно развивать бесконечно.
Любопытный эксперимент ставился с попыткой генерировать целые кварталы через Nano Banana 2. Задумка была привлекательной: вместо ручной сборки кварталов из отдельных объектов доверить нейросети создание цельных локаций с живыми деталями — аккуратными лавочками в скверах, естественным расположением киосков и прочей мелочевкой.
Однако довести эту идею до ума не удалось. Даже самый строгий пайплайн выдавал удачный результат лишь в 5% случаев, из-за чего от подхода пришлось отказаться. Проблема крылась в нестабильности: плыли тени, нарушалась изометрия, а квартал мог внезапно уйти ввысь просто потому, что алгоритм счел уместным продолжить пешеходную зону…
Звуки и музыка

Здесь всё оказалось значительно проще. Нодовый инструмент был интегрирован с ElevenLabs, через который создавались все звуковые эффекты и фоновые треки. Пара удачных экспериментов с текстовыми промптами — и нужный звуковой ряд готов.
Бонус — видеоанимации

Еще одна интересная находка — интеграция видеороликов вместо традиционных покадровых анимаций. Идея не нова, но раньше трансляция видео в мобильных проектах считалась слишком ресурсоемкой. Современные гаджеты легко справляются с этой задачей, а подготовка ролика занимает считанные минуты.
Технология элементарна: видео генерируется с хромакеем, который в реальном времени вырезается внутриигровым шейдером. На превью выбран не самый удачный оттенок зеленого, из-за чего вокруг синего чипа заметны артефакты, но на реализацию ушло ровно 10 минут, что для пет-проекта более чем приемлемо.
Итоги и выводы
Хорошо это или плохо, когда игра полностью создана при поддержке ИИ? Кто-то наверняка назовет это «нейрошлаком», и в чем-то будет прав: игровую индустрию ожидает волна примитивных поделок, штампуемых за считанные дни.
Тем не менее, я вижу здесь огромные перспективы. Во-первых, для разработчиков-одиночек открываются колоссальные возможности: теперь можно воплощать масштабные идеи в одиночку, не собирая дорогостоящие команды художников, QA-инженеров и программистов.
Во-вторых, со снижением порога входа конкуренция сместится из плоскости «кто смог технически осилить разработку» в область чистого гейм-дизайна и оригинальных идей. Выигрывать будут те проекты, которые предлагают увлекательный игровой опыт. Убежден, что в конечном итоге такой подход приведет нас к появлению новых жанровых шедевров.
Больше заметок о разработке движка, создании игр и околотехнических экспериментах я публикую в своем Telegram-канале: https://t.me/o2engine
Почему после курсов по нейросетям люди всё равно не умеют ими пользоваться?
Главные игры 2001 года, изменившие индустрию навсегда: 5 легендарных проектов 25-летней давности
Genshin Impact 7.0 откроет Снежную 12 августа
Компьютер или консоль: вечный спор, который не смогла разрешить даже Steam Machine
Как радикальное упрощение геймплея принесло миллионы создателям нестандартного шутера
Топ дьяблоидов 2026 года в ожидании релиза Path of Exile 2
Если ссылки схлопываются, значит, это кому-то нужно
Сборка ПК для GTA 6 в 2026 году: мощно и недорого