При попытке воспроизвести анимацию в ARKit персонаж «телепортируется» между клипами? Или анимация в GLB работает на iOS, но ломается на Android? Такие проблемы — следствие неоптимизированного пайплайна анимации для AR. В отличие от обычной 3D-анимации, здесь каждый кадр рендерится на мобильном GPU в реальном времени. Ограничения: до 60–80 костей для скелетной анимации, 52 blend shapes для лицевой, частота кадров 12–24 fps для вторичных движений. Наш опыт — 7+ лет и 30+ реализованных проектов для iOS и Android. Мы оптимизируем пайплайн, чтобы сохранить качество при минимальном весе. Обращайтесь — поможем с вашим проектом.
Почему анимация в AR отличается от обычной?
В AR нет готовой среды с постобработкой. Мобильный GPU обязан обрабатывать анимацию в реальном времени — отсюда жёсткие ограничения. Зато открываются новые возможности: взаимодействие с реальным миром, встройка в окружение, тактильный отклик. Чтобы этим воспользоваться, нужно правильно выбрать тип анимации и подготовить модель.
Какие типы анимации используются в AR?
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. Не требует скелета, минимальный вес.
Сравнение типов анимации
| Тип | Преимущества | Недостатки | Применение |
|---|---|---|---|
| Skeletal | Гибкость, реалистичность | Большой вес, ограничение по костям | Персонажи, животные |
| Morph target | Плавная мимика, малый вес | Высокое потребление памяти при большом числе shapes | Лица, деформации |
| Procedural | Минимальный вес, не требует скелета | Ограниченный набор движений | Вращение, волны, технические объекты |
Skeletal animation даёт больше контроля, но morph target эффективнее для мимики с весом в два раза меньше. Выбор зависит от задачи.
Ключевые проблемы при создании 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. Официальная документация Apple рекомендует этот подход (см. Loading Animations from USDZ Files in RealityKit).
Размер анимированного USDZ. Анимация добавляет данные ключевых кадров. 10-секундный walk cycle на персонаже из 60 костей при 24 fps = 240 ключевых кадров × 60 костей × transform data. Оптимизация: снижаем частоту кадров анимации до 12–15 fps для вторичных движений (одежда, волосы), основные кости — 24 fps. Разница — 20–40% по весу файла.
Loop и переходы между клипами. В RealityKit переключение между анимациями:
entity.stopAllAnimations()
entity.playAnimation(walkAnimation, transitionDuration: 0.3, startsPaused: false)
transitionDuration обеспечивает плавный переход. Но для корректного перехода idle→walk→run позиции костей в конечном кадре одного клипа должны быть близки к начальному кадру следующего — иначе персонаж «телепортируется». Мы гарантируем seamless loops за счёт точной настройки ключевых кадров.
Как правильно экспортировать анимацию в USDZ?
Используйте запечённые keyframes, избегайте Driver-анимаций и модификаторов. В Reality Composer Pro (Xcode 15+) доступен предпросмотр. Для конвертации из FBX с анимацией используйте reality-converter CLI:
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. После фикса анимация заработала на обеих платформах. Свяжитесь с нами, чтобы мы помогли с похожей задачей.
Что входит в работу
- Low-poly модель с риггингом и скиннингом
- Набор анимаций (как минимум idle + 2-4 базовых)
- Экспорт в USDZ и GLB с проверкой в ARKit/ARCore
- Документация по управлению анимациями
- Тестирование на реальных устройствах
- Поддержка в течение 2 недель после сдачи
Сроки и стоимость
| Тип анимации | Сроки |
|---|---|
| Простая процедурная (вращение, пульсация) | 1–3 дня |
| Персонаж с 3–5 анимациями (риг + скиннинг) | 1–3 недели |
| Лицевая анимация с ARKit blend shapes | 1–2 недели |
| Сложный персонаж с 10+ анимациями и LOD | 3–6 недель |
Стоимость рассчитывается индивидуально. Базовые 3D-модели без анимации — отдельно. Закажите оценку вашего проекта — мы предложим оптимальное решение.







