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

Коротко о проекте
Уже 18 частей с 2022 года я веду дневник разработки авторитарного сервера для 2D MMO RPG — игры с открытым бесшовным миром, где сотни игроков и существ живут в реальном времени. В прошлой части ИИ впервые получил «руки»: начал собирать игровую механику из одного текстового описания. Оставалась витрина, которую я обещал, — как в эту игру попадают анимированные персонажи. Об этом — восемнадцатая часть.
Анимация — это не картинка, а скелет
Первое, что я решил: персонаж в игре — не заранее нарисованный «мультик», а скелет. Плоская картинка режется на части (голова, торс, руки, ноги), части сажаются на кости, а движение задаётся поворотами костей — походка, атака, ожидание.
Кости нужны не ради красоты. Они дают главное — экипировку. Меч висит на кости руки, броня — на торсе, и когда персонаж двигается, снаряжение едет за костью само.
Это и есть ключевое преимущество скелета: броню и предметы я накладываю поверх аватара, а не перерисовываю персонажа под каждый комплект. Предметы разложены по сторонам и надеваются на скелет в нужном направлении — так игрок кастомизирует внешний вид, а не выбирает из десятка готовых картинок.

Действия, стороны и типы существ
Скелет — половина дела. Вторая половина — как игра понимает, какую анимацию и когда проигрывать. Для этого у существа есть набор действий: ходьба, атака, ожидание. Действие запускает свою анимацию. Сами действия я задаю в кабинете — там же справочник, по которому анимации сопоставляются с игрой.

У каждой привязки я отдельно указываю сторону, в которую смотрит анимация. Так на одно действие вешается сразу несколько направлений — персонаж идёт влево, вправо, вверх и вниз своими кадрами, а действие остаётся одно.
Тип существа — это префаб. В нём я закладываю базовые характеристики: кто это, какие у него параметры. Справочник префабов работает сразу как бестиарий игры и как техническое задание для ИИ — по нему он и связывает, и создаёт анимации.

Дальше две стороны сходятся. В анимации клип — это наше действие, а сущность — наш префаб. Мелочь, о которую спотыкаешься на практике: в Spriter один файл может нести несколько сущностей, в Spine — только одну. Знать это нужно, чтобы связка не разъехалась при импорте.
Конвейер: картинка → скелет → игра
Дальше — конвейер, в котором ручной работы почти нет.
На входе — картинка персонажа. Её по строгим правилам генерирует внешний ИИ-сервис арта (например, PixelLab или ChatGPT): строго фронтально, симметрично, части тела не перекрывают друг друга. Правила не случайны — если руки закрывают торс, автоматическая нарезка на скелет разваливается. Эти рамки задаю я; сервис рисует внутри них.
Дальше картинка режется на части, из них собирается скелет и расставляются ключевые кадры — ожидание, ходьба. Весь этот конвейер — генерация арта, нарезка, риг, импорт — ИИ водит удалённо через MCP-сервер, о котором была прошлая часть: готовую анимацию он одним файлом ставит прямо в игру, через веб-кабинет, без правки кода.

И вот тут срабатывает решение из ранних частей: обновление контента доходит до игроков, не требуя переустановки клиента. Новый анимированный персонаж появляется в живой игре как обычное обновление данных — тем же путём, что новые карты и баланс.

Пример: гигант, который пошёл
Как это выглядит на деле. Беру картинку гиганта, прогоняю через конвейер — на выходе скелетная анимация: гигант идёт, части тела двигаются по костям. Импортирую одним файлом — и в игре появляется новый анимированный персонаж. Правок клиента — ноль.
Анимации оживают на карте
И вот где анимации замыкаются на остальную игру. Тех же существ я расставляю по картам через редактор баланса — и теперь на карте они не статичные метки, а живые, с нашими анимациями.

Где и каких монстров ставить, определяет сама карта. Открытый бесшовный мир, о котором я писал раньше, собирается из импортированных карт — по ним и раскладываются существа.

Сами карты собраны из открытых ассетов The Mana World и правятся в редакторе Tiled. Старые карты я ещё и улучшаю с помощью ИИ и держу под контролем версий.

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

А в следующей части — как над этим каталогом работать вдвоём и не мешать друг другу. Человек правит механики и контент через админ-панель, ИИ — через тот же MCP-сервер, а git хранит историю и бэкап. Контент разложен на отдельные элементы, у каждого может быть свой репозиторий; каждый участник дорабатывает игру в своей песочнице, и правки собираются вместе через git — с проверкой перед выходом в игру.
Где ИИ пасует
Не хочу создавать впечатление, что тут всё само. ИИ отлично делает рутину — режет, ригует, расставляет кадры. Но он не держит цельность.
Стиль всего ростера — что новый персонаж выглядит из той же игры, что и остальные, — держу я: одна камера, одни пропорции, одна толщина контура. Уберите эту рамку — и ИИ выдаст десять хороших, но разных по духу спрайтов, которые не склеиваются в один мир.
И честно про ограничение: автоматическая нарезка отдаёт цельные руки и ноги — кости получаются односегментными, мах от плеча, без сгиба локтя. Настоящий сгиб требует большего. Пока это компромисс, а не магия.
Пару лет назад такой конвейер означал бы аниматора и риггера в штате. Сейчас внешние ИИ-сервисы арта плюс автоматический риг дают анимированного, экипируемого персонажа силами одного человека — а то, что конвейер свой и не завязан на зарубежные ассет-магазины, для проекта здесь и сейчас скорее плюс.
Бонус - сервисы для работы с анимациями
Сервис |
Арт |
Нарезка |
Риг |
Анимация |
Итог |
⭐⭐⭐⭐⭐ |
— |
— |
⭐⭐ |
Основной генератор арта |
|
⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐⭐ |
Универсальный |
|
— |
⭐⭐⭐⭐⭐ |
— |
— |
Лучший для нарезки скелета |
|
— |
⭐⭐⭐⭐⭐ |
— |
— |
Лучший для создание spritesheet из картинки |
Вопрос к вам
И вопрос к вам. Во-первых: какими ИИ-сервисами и рабочими схемами для создания и оптимизации анимаций пользуетесь вы — что посоветуете кроме тех, что я назвал? Во-вторых: какие игры с открытым исходным кодом вы знаете — из них мы с ИИ могли бы брать и знания для обучения, и готовый контент. Поделитесь в комментариях — из этого соберётся следующая часть.
История
FPS, Ping, паузы между командами, интерполяция и экстраполяция
Event-driven паттерн, JSON-RPC и почему не сервисная архитектура
Конвейер контента для MMO: импорт анимации, экипировка и обновление игры без патчей
Bardakan
я пробовал Retro Diffusion. Плюсы - куча готовых пресетов, позволяющих генерить не просто картинки в определенном стиле, а еще и определенной формы (в моем случае spritesheet). Минусы - платный, а бесплатные кредиты закончились очень быстро.
А вы можете рассказать подробнее, как генерите в chatgpt и pixellab спрайты?
webrobot Автор
Я даю образец картинки и прошу сделать мне аналог что бы смотрел на меня, что бы конечности не заслоняли друг друга и пока он лучшие варианты выдавал (многие постеры какие то рисуют). Потом отдаю его на создание spritesheet в GodMode (он заточен делеть именно спрайтшиты , там выбираете позу и действие)
Пиксельлаб похоже, но это чисто для пиксельных график
webrobot Автор
Я смотрю там вроде карты и тайлсеты можно генерить...интересно а может ли этот сервис сгенерить тайловую карту для игр (то бывает для dnd генерит или постер или...ну не для нарезки вообщем на тайлы), не в курсе?
Тогда я мог бы попробовать скормить своему ии графику (может даже тайлсет и образец карты) , вероятно он собрал бы для игры все (со слоями, непроходимимы областями и тп)
Bardakan
тайлы скорее всего можно - пресеты есть. В моем случае просто можно было обойтись без них.
А у God Mode AI получается вы покупаете подписку, в которую включено 200 приватных генераций и неограниченное количество публичных генераций?
webrobot Автор
Я еще не пробовал подписку, на бесплатном попробовал. Но результат меня поразил. Он заточен под то что бы делать spritesheet. И не по промту, а выбираешь направление и вид анимации (хотьба, прыжок , атака и тп)
Но надо придумать как скелетную анимацию собирать , возможно через совмещение GodMode и Komiko (странная азиатская ии, но спосоьна нарезать качественно части тел) и еще какого ИИ что соберет все...