- ИИ вместо артистов: cartoon персонажи - предыдущая часть пайплайна.
Попробовал добить пайплайн генерации анимаций персонажей с ИИ.
Протестировал на более сложных для отделения частей персонажах, типа такого:
Здесь SAM3 хорошо отделяет хвост, лапы, голову и ошейник, но не может выделить тело. Поэтому прикрутил возможность настраивать маски как пересечение логических операций.тело = собака - (голова+ошейник+лапы+хвост)

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

Также нашел пару проблем с распознаванием фич на анимации мага (было пропущено распознавание посоха в нескольких кадрах), которые также решились детализацией промта (“деревянный посох волшебника с синим шаром на конце”). Подход с ИИ — вместо фикса просто выбросить прошлый результат и сгенерировать заново (“Take it or throw it”).
Cutout анимация#
Следующим шагом решил проверить программы, в которых можно настроить саму анимацию более точно.
Cutout анимация похожа на скелетную, но всё же отличается, и в этом пайплайне речь именно о cutout. Точнее даже, о сочетании cutout и покадровой.
Примерно, как делают Vanillaware:
- Анимации в Unicorn Overlord - нет скелетов, но есть анимация отдельных частей тела (каких-то покадрово, каких-то просто аффинными трансформациями)
Так получается потому, что саму анимацию генерирует ИИ покадрово — для отдельных частей действительно уникальные кадры (лица, плащи, мягкие части тела), для других — просто повороты/перемещения. Также прорисовываются отдельные кадры для частей, которые требуют разворота на 45/90/180 градусов. Здесь не нужен риг/скелет, и нет смысла его генерировать вообще.
То есть шаги для скелетной анимации — определение позы, авториг и генерация анимаций по скелету здесь просто не нужны (Есть отдельные программы и ИИ-модели, для этого я не буду разбирать их здесь).
Преимущества скелетной анимации перед cutout:
📍 Дешевле делать (проще анимировать скелет, чем части). Полностью убирается с приходом ИИ. Генерация секунды анимации с частотой 24 fps стоит примерно 5 центов.
📍 Возможность управлять скелетом программно в рантайме. Актуально только для игр, в которых это действительно делают (я не знаю ни одного примера, кто бы реально это использовал в рантайме, только демки из шоурилов программ анимации — IK анимация ног на наклонной поверхности, или какой-нибудь гусеницы танка).
📍 Блендинг двух анимаций. Для cutout-анимаций требуются ручные анимации связки или разметка кадров, из которых возможен переход, чтобы можно было управлять переходами через контроллер. Генерация связок (walk-to-idle, idle-to-walk и т.п.) также упрощается с помощью ИИ.
📍 Потребление памяти под атлас. Скелетная анимация сильно экономит на размере атласа текстуры (местами за счет потери качества анимации). Но тут нужен отдельный ресёрч. Здесь есть две возможности сэкономить. Во-первых, можно натравить SAM или подобную модель на то, чтобы она нарезала фичи достаточно мелко, чтобы упаковать их в атлас (не на уровне “рука/голова/нога”, а на уровень “бровь/веко/ступня/фаланга пальца”) — если фичи уже анимированы, то нет смысла экономить на их количестве, и можно шинковать максимально мелко для упаковки. Во-вторых, можно вообще натренировать модель для максимально мелкой паковки, скорее всего есть ресёрч в этом направлении. По сути, обучении модели это и есть компрессия.
Так что большая часть преимуществ теряется с переходом на генерации с ИИ.
Программы для выгрузки#
Есть много программ для 2d-анимации. Для скелетной анимации часто используется Spine. Она является стандартом в не-инди разработке, но имеет пачку минусов:
📍 Цена. Неурезанная версия стоит больше $300, что дорого для инди. Их программа на кикстартере стартовала с того, чтобы сделать доступной 2d скелетную анимацию для инди, поэтому это еще и отказ от собственных планов.
📍 Закрытый формат хранения, с периодическими поломками обратной совместимости (для сравнения — scml, в котором разработчики осознанно отказываются от прав на формат). Для одного из проектов приходилось писать и поддерживать большое количество скриптов парса и генерации проектов, это неприятно, и не хочется сталкиваться с подобным для пет-проджектов.
📍 Тормознутый рантайм. Снова же — в реальных проектах с сотнями скелетов на сцене приходилось поддерживать хаки в рантайме для ускорения. Вот пример open-source альтернативного рантайма, переписанного нормально sokol_spine, но маньяков, готовых это писать и поддерживать — единицы. Отдельные фичи рантайма не готовы к продакшену вообще, в каждой компании есть истории о какой-нибудь бомбочке или рыбке, которая после вставки в игру роняла fps на 10-15 кадров.
📍 отсутствие нормальной системы скриптинга. Программа максимально закрыта, даже интерфейс командной строки стучится в интернет на каждый экспорт (скрипты перепаковки стабильно падают несколько раз на тысячу запусков по таймауту от сервера лицензии, особенно весело после 5-10 минутной паковки атласов).
📍 завязка именно на скелетную анимацию. Возможность работать с cutout/покадровой есть, но не как first-class, так что требует дополнительных правил.
Есть много других программ 2d анимации:
📍 Dragon Bones — сильно урезана по фичам, поддержки нет, вместо этого занимаются разработкой платной версии LoongBones, с ИИ пайплайном. Нет смысла импортировать туда свой ии-пайплайн, если уже покупаешь их.
📍 Creature, Rive, Moho — класс программ с разным набор фич, но в целом бизнес-модель схожа со Spine, дешёвая супер-урезанная версия, дорогая нормальная версия с годовой подпиской за несколько сотен долларов, и супер-дорогая версия для бизнеса. Не вариант для инди. Также нужно проверять качество рантаймов (не всё ориентировано на геймдев)
📍 Более дешёвые программы разного качества и полезности. Spriter Pro лучший вариант из тех, что видел. Другие по большей части негодные.
📍 OpenToonz — открытая, но с достаточно большим порогом вхождения.
📍 Blender+Grease Pencil — бесплатная, открытая, мощная связка. Скорее всего лучший выбор, если преодолеть порог вхождения. (Create a Full 2D Rig in Blender… In About 10 Minutes - пример).
📍 Godot — система анимации в движке. Удобна тем, что в отличие, от Unity, бесплатная, достаточно простая, открытая для импорта/экспорта, а также с возможностью итеративного улучшения. Так что остановился на ней.
В Godot есть разделение на cutout и скелетную анимацию (Cutout animation), причём системы анимации легко совместимы между собой. Я сначала не нашел отдельных примеров для этого, но потом понял, что это просто работает автоматически — в иерархию cutout-анимации можно просто добавить SpriteAnimation2D для простого случае, и конвертировать его в AnimationLibrary для более хитрого управления.

Также прелесть подхода Godot в том, что можно итеративно улучшать результат:
📍 быстро залить целые кадры анимации в SpriteAnimation2d и проверить качество/настроить кадры. Несколько строк кода и драг-н-дроп серии изображений.
📍 заменить целые кадры на отдельные анимированные фичи после выделения их нейронкой + сверить их покадрово по качеству
📍 трансформировать покадровую анимацию отдельной фичи в cutout как описано выше — заменить кадры на Animation, с которым можно работать в редакторе продвинутом редакторе анимаций.
Еще одна мега-полезная возможность для быстрого прототипирования анимации — интеграция с движком:
Save Countless Lines of Code With Animations in Godot - пример с демонстрацией описания серии эффектов и вызова функций в движке как одной анимации.
Godot 4: 8-Direction Character Animation with AnimationTree - также можно сразу настраивать граф анимаций и систему переходов.
Вообщем Godot — лучший вариант для такого пайплайна.
Резюме#
- Можно достаточно быстро сгенерировать пак анимаций персонажа (генерация картинки по референсу и текстовому описанию, анимация по видео, отделение фона)
- Можно быстро проверить анимацию в Godot инструментарием движка (определение лишних кадров, генерация loop-последовательности, определение необходимых промежуточных связок, генерация типов переходов)
- Можно быстро отделить от анимации отдельные фичи (промтами, примерными геометрическими описаниями, и их логической комбинацией) и отделить в движке от кадра эти части (как по одной, так и все сразу)
- Можно инструментарием Godot заменить покадровую cutout анимацию на keyframe cutout анимацию (для выбрасывания повторяющихся кадров). Пока средне по удобству/надёжности. Нужен ресёрч по альтернативным методам сжатия атласов, не обязательно подвязываться на разбиение по крупным фичам кадра.
- Из Godot относительно легко экспортировать полученную анимацию и атлас для использования в других движках, форматы открытые и несложные. Т.е. Godot тут скорее как хороший инструмент, а не обязательный движок. Сложность генерации рантайма для стороннего движка — средняя (вайбкодится, если есть нормальное понимание, как работает анимация).
- Если ИИ серьёзно ускоряет и делает дешевле производство покадровой анимацию, то она может конкурировать со скелетной (если её хорошо пожать).