Создание анимированных 3D-моделей для AR
Статичная модель в AR — это витрина. Анимированная — взаимодействие. Персонаж машет рукой, двигатель вращает поршни, молекула демонстрирует колебания связей. Для AR анимация накладывает ограничения, которых нет в обычной 3D-анимации: вес скелета, количество ключевых кадров, совместимость с форматом USDZ.
Типы анимации и их реализация
Skeletal animation (риггинг). Персонажи, животные, роботы. Скелет из костей управляет деформацией меша. Для AR-персонажей — максимум 60–80 костей. Больше — вес скиннинга (skin weights) перегружает GPU на мобильных устройствах.
Блендер-пайплайн для AR-персонажа:
- Моделирование low-poly меша
- Риггинг через Armature (автоматический Rigify или ручной для стилизованных персонажей)
- Скиннинг:
Weight Paint Mode— критично выставить веса корректно, иначе при анимации меш рвётся в суставах - Анимация в
Action Editor: idle, walk, run, interaction (каждый Action = отдельный клип) - Запекание анимации в keyframes (важно для USDZ — не все кривые поддерживаются)
Morph target animation (blend shapes). Лица, мимика, деформации без скелета. Face AR фильтры используют 52 ARKit blend shape коэффициента — под них создаём соответствующие morph targets в Blender:
jawOpen → ARKit blendShapeLocation.jawOpen
eyeBlinkLeft → ARKit blendShapeLocation.eyeBlinkLeft
Совместимость 1:1 с ARKit именами даёт автоматическое управление мимикой через ARFaceAnchor.blendShapes.
Procedural animation. Вращение шестерёнок, колыхание листьев, пульсация. В USDZ через UsdGeom.Xformable с анимированными xformOpOrder. В RealityKit — через AnimationResource с FromToByAnimation. Не требует скелета, минимальный вес.
Ключевые проблемы при создании AR-анимации
USDZ и ограничения анимации. USDZ поддерживает только определённые типы анимационных кривых. Blender экспортирует в USD через стандартный экспортёр, но Driver-анимации, нелинейный редактор и некоторые модификаторы — игнорируются. Нужно запекать (Bake Action) в keyframes перед экспортом:
Object → Animation → Bake Action
→ Only Selected Bones, Visual Keying, Clear Constraints
После запекания — проверяем в Reality Composer или Quick Look на iOS. Что выглядит нормально в Blender, может не воспроизводиться в ARKit.
Размер анимированного USDZ. Анимация добавляет данные ключевых кадров. 10-секундный walk cycle на персонаже из 60 костей при 24 fps = 240 ключевых кадров × 60 костей × transform data. Оптимизация: снижаем частоту кадров анимации до 12–15 fps для вторичных движений (одежда, волосы), основные кости — 24 fps. Difference: 20–40% по весу файла.
Loop и переходы между клипами. В RealityKit переключение между анимациями:
entity.stopAllAnimations()
entity.playAnimation(walkAnimation, transitionDuration: 0.3, startsPaused: false)
transitionDuration обеспечивает плавный переход. Но для корректного перехода idle→walk→run позиции костей в конечном кадре одного клипа должны быть близки к начальному кадру следующего — иначе персонаж «телепортируется».
Форматы и экспорт
USDZ с анимацией — для iOS. Reality Composer Pro (Xcode 15+) поддерживает предпросмотр и базовое редактирование анимации. reality-converter CLI для конвертации из Alembic или FBX с анимацией:
xcrun reality-converter -i character_animated.fbx -o character.usdz
GLB с анимацией — для Android и WebAR. Blender → Export → glTF 2.0 → Format: GLB. Анимации экспортируются как animations[] массив в glTF-структуре. Draco-сжатие для геометрии, но не для анимационных данных (они не сжимаются Draco).
Кейс
AR-маскот для маркетинговой кампании: пингвин с 5 анимациями (idle, wave, dance, point, celebrate). Модель — 8000 полигонов, 42 кости. Blur AR на iOS, ARCore на Android. Главная сложность: один и тот же GLB работал корректно в Chrome WebAR, но dance анимация «ломалась» на Android ARCore — вращение бёдер выходило за пределы [-π, π] и GLB-парсер ARCore обрабатывал это иначе. Решение: нормализовать все euler rotation curves в Blender перед экспортом через Python script.
Сроки
| Тип анимации | Сроки |
|---|---|
| Простая процедурная (вращение, пульсация) | 1–3 дня |
| Персонаж с 3–5 анимациями (риг + скиннинг) | 1–3 недели |
| Лицевая анимация с ARKit blend shapes | 1–2 недели |
| Сложный персонаж с 10+ анимациями и LOD | 3–6 недель |
Стоимость рассчитывается индивидуально. Базовые 3D-модели без анимации — отдельно.







