JCA от NVIDIA: видео и 3D-движение для любого скелета
Видеомодель рисует обезьяну, которая перепрыгивает через планку, и выглядит это правдоподобно. Взять это движение и проиграть его на собственной 3D-модели обезьяны в собственной сцене не получится: на выходе только пиксели, без трёхмерных координат и без камеры. Именно этот разрыв закрывает работа NVIDIA Research под названием Joints, Camera, Action! (сокращённо JCA).
Что такое JCA
JCA это генеративная модель, которая одновременно создаёт видео и трёхмерное движение суставов для любого скелета, который ей подали. Заодно она подбирает камеру, проецирующую это движение в нарисованную сцену. Ригом может быть человек, животное, мультяшный персонаж или шасси робота: архитектура не привязана к конкретной топологии.
Исследователи формулируют задачу через бытовой пример. Есть 3D-ассет обезьяны, есть сцена с планкой. Нужно попросить модель текстом, чтобы обезьяна прыгнула, и получить не только ролик, но и траектории суставов, которые можно воспроизвести в этой сцене на любом движке. Прежние работы умели либо то, либо другое.
Почему поднять движение из пикселей недостаточно
Самый очевидный путь выглядит так: сгенерировать видео, а потом восстановить движение постфактум, прогнав кадры через трекер или оценщик позы. Так работают Puppeteer и ActionMesh, которые авторы взяли в качестве baseline. Схема рабочая, но у неё есть системная слабость: ошибка восстановления накапливается, и анимация постепенно уезжает от того, что происходит в кадре. Ноги скользят, стопы отрываются от земли, персонаж проваливается в геометрию сцены.
Второй путь, генерация видео и движения одной моделью, тоже известен. Но существующие совместные модели умеют только человеческие скелеты, а некоторые дополнительно триангулируют 3D из двумерных карт позы, обученных на многовидовом видео. Для произвольного рига, скажем, для пингвина или манипулятора, это не работает.
Авторы выбирают третий вариант: держать трёхмерное движение в отдельной модели, которая ничего не знает про пиксели, и соединить её с видеомоделью тонким мостом.
Архитектура: два лагеря и мост между ними
Модель движения это flow-matching трансформер, который зашумляет траектории суставов и восстанавливает их обратно. Каждый сустав в каждом кадре кодируется 18 числами: 6D-поворот, трёхмерная позиция и их изменения от кадра к кадру. Корень хранит мировые координаты и абсолютную позицию, остальные суставы живут в системе координат корня. Идея представления заимствована у AnyTop.
Чтобы модель работала с разными скелетами, риг подаётся как граф: суставы это узлы, кости это рёбра. Каждый сустав получает дескриптор из своего имени (эмбеддинг замороженного текстового энкодера), геометрии в rest-позе, двумерной координаты на референсном кадре и метки «корень, цепь или лист». Дальше четыре слоя GATv2 распространяют информацию вдоль костей, а финальный трансформерный блок даёт всем суставам возможность переговариваться напрямую, минуя иерархию. На выходе дескрипторы размерности 384 на сустав.
Видеоветка взята готовой: Wan2.2 I2V-A14B, около 14 миллиардов параметров. Мост между ветками это двунаправленные cross-attention слои, разложенные примерно равномерно по 40 блокам видеомодели. Их выходные проекции инициализированы нулями, поэтому в начале совместного обучения обе pretrained-ветки ведут себя точно так же, как по отдельности, а связь нарабатывается постепенно.
Здесь спрятан главный инженерный аргумент работы. Похожий гибридный подход из EchoMotion, где видеотрансформер расширяют блоками под движение, добавил бы около 7 миллиардов параметров, если применить его к половине видеобэкбона. Вся надстройка JCA, включая денойзер движения, кодировщик рига, голову локализации и мосты, весит 178 миллионов. Разница почти в сорок раз.
Bridge guidance: усилить то, что даёт связь
Обычный classifier-free guidance управляет тем, насколько модель слушает текст. Авторы добавляют второй, независимый регулятор, который управляет тем, насколько видео и движение слушают друг друга. На инференсе модель считает предсказание дважды: с отключёнными мостами и с включёнными. Разница между этими предсказаниями масштабируется коэффициентом и прибавляется к варианту без мостов.
Формула простая, цена высокая: четыре прохода на каждый шаг денойзинга вместо двух. При коэффициенте 2 синхронизация движения с видео заметно улучшается, и это видно в абляции.
Как движение попадает в сцену
Сгенерировать движение и видео вместе ещё не значит поставить движение туда, где оно происходит на картинке. Мосты связывают признаки, но не дают явных соответствий между суставом в 3D и точкой на кадре.
Для этого обучается отдельная голова локализации. Каждый сустав на движенческом кадре 4f смотрит только на патчи видеокадра f, а веса внимания усредняют центры патчей в двумерную координату. Сравнивая предсказанные 2D-точки с известными 3D-позициями суставов, модель подгоняет одну статическую перспективную камеру на клип: вращение, сдвиг и фокусное расстояние, при фиксированной главной точке в центре изображения.
Без этого шага, как показано в статье на примере пингвина, сгенерированное движение уходит под поверхность снега в поздних кадрах. После выравнивания пингвин скользит ровно по склону.
Откуда 200 тысяч пар видео и движения
Готовая пара «натуральное видео плюс трёхмерное движение» это редкость, а пара для сотен разных скелетов не существует вовсе. Авторы собирают корпус из трёх источников.
Человеческое видео даёт богатые сцены и сложные действия, но один единственный скелет. Анимированные ассеты из Objaverse и Objaverse-XL дают разнообразие ригов и точные метки, зато простые действия и стерильный рендер. Роботизированное видео добавляет третий класс объектов.
Чтобы ассеты не выглядели висящими в пустоте, авторы придумали конвейер, который в статье называют OiV. Ассет рендерится в простой временной обстановке, Vision-Language модель описывает действие и предлагает подходящее окружение, а генеративный видеоредактор вписывает это окружение в клип. Редактирование может сдвинуть объект или камеру и тем самым испортить 3D-метки, поэтому результаты проверяются, а неудачные правки перегенерируются. В сумме получается около 200 тысяч пар видео и движения.
Цифры: анимация ригов из текста
Основной бенчмарк это 20 ассетов из тестового набора Puppeteer, по пять текстовых промптов на каждый (промпты генерировала GPT-5.6 Sol), итого 100 пар «ассет и промпт». Судья GPT-6 Astra оценивает соответствие анимации тексту по шкале от 0 до 100, не зная, какой метод дал результат.
JCA набирает 58,4 против 43,4 у ActionMesh, 41,1 у Puppeteer и 20,6 у AnimateAnyMesh. Искажение геометрии меша у неё 0,20 процента против 7,07 у ActionMesh, то есть скелетная анимация сохраняет форму ассета, тогда как методы, двигающие вершины напрямую, её заметно деформируют. Плавность 0,983 при динамичности 0,83; у AnimateAnyMesh плавность выше (0,993), но динамичность всего 0,11, то есть движение почти отсутствует.
Цифры: сравнение с человеческой моделью
На человеческом скелете JCA можно сопоставить с EchoMotion, которая генерирует видео и SMPL-последовательность из текста. Тест: 250 промптов из HumanML3D.
Общая модель без дообучения проигрывает: PA-MPJPE 114,8 против 97,7 у EchoMotion. Это ожидаемо, ведь сеть не видела SMPL-разметки. После 10 тысяч шагов дообучения на человеческом подмножестве (вариант JCA SMPL-FT) картина меняется: 72,3 по PA-MPJPE, 91,0 по SA-MPJPE и 272,6 по SA-MPJVE против 97,7, 114,9 и 431,3 у EchoMotion. Разрыв по скорости суставов особенно велик, почти в полтора раза.
По качеству видео варианты близки: эстетика 0,573 против 0,533 в пользу JCA, анатомическая корректность 0,938 против 0,730. Зато по динамичности камеры EchoMotion заметно активнее (74 процента клипов с нестатичной камерой против 45,6). Авторы объясняют это тем, что их схема выравнивания предполагает статическую камеру на инференсе.
Абляции: сколько стоит каждый компонент
Абляция на SMPL-FT чекпоинте показывает вклад связи между ветками. Полная модель даёт 72,27 по PA-MPJPE. Отключить bridge guidance, оставив мосты включёнными, значит получить 84,78. Полностью разорвать cross-attention значит 140,71, то есть синхронизация падает почти вдвое. Иными словами, сама связь важнее её усиления, но и усиление даёт ощутимый выигрыш.
Отдельно проверено, зачем вообще нужна видеоветка. Модель, обученная только на движении, даёт соответствие промпту 51,6 и динамичность 0,72. Совместное обучение поднимает эти числа до 58,4 и 0,83 при почти неизменном искажении меша (0,14 против 0,20 процента). Видеопредобучение работает как источник моторных приоров, которых нет в motion-only данных.
Что ещё умеет модель
Один и тот же чекпоинт решает четыре задачи. Из текста и рига он делает анимацию. Из видео он восстанавливает движение для поданного скелета, причём топология ролика и топология рига могут не совпадать. Из последовательности движения и текста он делает видео. И наконец, по нескольким ключевым кадрам-изображениям он строит полную трёхмерную траекторию рига плюс соответствующее видео, то есть даёт покадровое управление анимацией через обычные картинки.
В демонстрациях есть робот Unitree G1: на вход идут его риг и меш, трёхмерная сцена, начальная поза и текст, на выходе видео и движение, которым этот меш проигрывается в сцене. Для обучения человекоподобных политик это ровно тот тип синтетических данных, которого не хватает: не ролик, а готовая траектория суставов.
Где метод ломается
Ограничения авторы перечисляют сами. Камера на инференсе считается статической, движущаяся камера пока не поддерживается. Обучающие риги смещены в сторону двуногих: большинство персонажей Objaverse человекоподобны, а дополнительные motion-only данные тоже взяты из человеческого движения, поэтому перенос на четырёхногих и манипуляторы слабее, чем хотелось бы.
Самое важное ограничение касается физики. Модель никогда не видит трёхмерную геометрию сцены, она знает о ней только через видео. Значит, ничто не гарантирует контакта с поверхностью и не запрещает проникновение сквозь неё. Сцена влияет на движение опосредованно, через визуальный контекст. Объекты, с которыми взаимодействует персонаж, двигаются в кадре, но в 3D не восстанавливаются, и на клип приходится ровно один риг.
Почему это важно
Год назад главным аргументом за видеомодели было то, что они учат физику из наблюдений. Практическая проблема оставалась нерешённой: знание есть, а извлечь его в форму, пригодную для игрового движка, симулятора или робота, было нельзя без отдельного хрупкого пайплайна.
JCA показывает, что разделение труда работает лучше склейки: движение живёт в своей модели, видео в своей, а связь стоит 178 миллионов параметров вместо семи миллиардов. Тот же приём, скорее всего, пригодится и в других модальностях, где нужно получить не пиксели, а управляемые величины: звук, физические параметры, траектории камеры.
Часто задаваемые вопросы
Можно ли использовать JCA для готовых игровых ассетов?
Да, если у ассета есть скелет. Модель принимает риг в rest-позе, рендер и координаты суставов на референсном кадре, а на выходе даёт повороты и позиции суставов, которые переносятся на стандартный скелет в движке. Для мешей без рига метод не подходит, там нужны vertex-based подходы вроде AnimateAnyMesh.
Почему нельзя просто прогнать сгенерированное видео через трекер позы?
Можно, так и работают Puppeteer и ActionMesh, но каждый шаг восстановления вносит ошибку. Движение дрейфует относительно кадра, а на длинных клипах появляется скольжение стоп. Прямая генерация движения в 3D, как в JCA, обходит этот этап: соответствие промпту 58,4 против 43,4 и искажение меша 0,20 процента против 7,07 у ActionMesh.
Работает ли это для роботов, а не только для персонажей?
Да, в статье показан Unitree G1 с его собственным ригом и мешем. Но качество зависит от обучающих данных: корпус смещён к двуногим, поэтому для манипуляторов и нестандартных шасси движение будет менее разнообразным. Контакт с поверхностью тоже не гарантирован, трёхмерную геометрию сцены модель не видит.
Итог
JCA это первый случай, когда видео и трёхмерное движение для произвольного скелета генерируются вместе, да ещё и с камерой, которая ставит движение на место в сцене. Схема с двумя раздельными моделями и нулевой инициализацией мостов даёт экономию почти в сорок раз по параметрам относительно гибридных подходов, а bridge guidance и голова локализации закрывают то, чего не хватало: согласованность модальностей и привязку к сцене.
Пока это исследование, а не продукт: статическая камера, перекос в сторону двуногих и полное отсутствие физических ограничений. Но направление понятное. Следующий шаг, который напрашивается сам, это подать в ветку движения настоящую геометрию сцены и добавить штрафы за контакт. Тогда из визуально согласованного движения получится физически согласованное, и это уже прямой путь к синтетическим данным для роботов.
Если вам интересно, как такие вещи доезжают до практики, посмотрите разборы других работ по видеогенерации в блоге: там же есть материалы про 3D-реконструкцию и world models, с которыми JCA логично стыкуется.