Skip to main content

AI animation

Buril's animation pipeline ships in three layers, from purely local OSS to fully cloud-driven. You pick the layer per task — there's no lock-in.

The three layers

LayerCostQualityLatencyBest for
L1. Local OSS$0Decent for stylized / NPCSecondsBackground animation, NPC reactions, prototypes
L2. Cascadeur bridgeCascadeur subscriptionHand-author + AI assistMinutesHero animation, exact timing control
L3. Cloud (DeepMotion / Move.ai)Per-clip creditsBest mocap-qualityMinutes-hoursPhotoreal characters, action set-pieces

You compose freely. A common production pattern is L3 for the main hero arc, L2 for facial/idle refinements, L1 for background NPC chatter.

L1 — Local OSS pipeline

The local pipeline strings together absorbed OSS components into a deterministic animation generator. Tool family: animation_ai_local_*.

Components:

  • Motion priors — small (~50 MB) priors trained on locomotion data, packaged as ONNX models that run via Unity Sentis.
  • Mixamo-style retarget — bone-mapping shim that retargets generic clips onto an arbitrary Humanoid rig.
  • Procedural overlays — breathing, weight shift, gaze follow. Composable on top of any base clip.

A typical call:

Generate a 2-second idle for the Player avatar, with a slight head-turn toward the camera.

The animation-author specialist runs:

  1. animation_ai_local_pick_prior --motion idle
  2. animation_ai_local_sample --duration 2.0 --seed 42
  3. animation_ai_local_overlay_gaze --target camera
  4. animation_ai_local_retarget --target_rig Player.HumanoidAvatar
  5. animation_clip_save --path Assets/Animations/Player_Idle_001.anim

Total time: 5-15 seconds. Cost: $0.

The local priors live at Library/BurilCache/animation_priors/ and download on first use (~200 MB total).

L2 — Cascadeur bridge

When you need exact control plus AI fill, use the Cascadeur bridge. See Cascadeur bridge for the full setup; the relevant headline:

Push the Player rig to Cascadeur, set the running cycle preset, run AI keyframes,
and bring back a 1-second clip into Assets/Animations/Player_Run.anim.

Requires a Cascadeur Indie+ subscription for the cascadeur_keyframe_run step.

L3 — Cloud providers

Two cloud providers are wired in 1.0:

DeepMotion (text-to-mocap)

animation_cloud_deepmotion_generate
prompt: "Character performs a running dive forward and rolls to a kneel"
duration: 2.5
rig: Humanoid

Returns an FBX clip. Pay-per-credit. You wire your DeepMotion key in Settings → Providers → DeepMotion.

Move.ai (video → mocap)

animation_cloud_move_ai_from_video
video_path: /tmp/reference.mp4
output_format: humanoid_fbx

Returns an FBX clip retargeted onto a Humanoid rig. Useful for ingesting reference performances into the engine. Pay-per-credit.

Combining layers

The studio handles cross-layer composition. Example:

Generate a 5-second action clip: cloud-driven body motion (DeepMotion), AI-keyframed
arm flourishes (Cascadeur), local procedural breathing overlay throughout.

The animation-author specialist plans:

  1. L3 → DeepMotion call for the body trunk.
  2. L2 → Cascadeur for arm keyframes layered on top.
  3. L1 → procedural breathing overlay across the full 5 seconds.
  4. Merge via Unity's Animator layer system.

Lipsync

Lipsync is a separate concern from body animation — see Voice & lipsync for the dedicated pipeline (ElevenLabs + Audio2Face + uLipSync).

Quality tips

  • Always retarget to your specific rig before saving. Generic Humanoid retargets work but lose subtle proportions. The animation_clip_validate tool will warn if a clip looks generic.
  • Use Animator layers, not Mecanim Blend Trees, for combining sources. Layers preserve each source's intent; blend trees mix everything into mush.
  • Cache cloud outputs. animation_cloud_* tools deduplicate identical prompts via Library/BurilCache/animation_cloud/. Same prompt + same seed → cached result returned instantly, no API charge.

Common issues

SymptomFix
Clip plays at the wrong speedFrame rate mismatch. Set target_fps explicitly in the tool call.
Hands clip through bodyRetarget bone offset issue. Run animation_clip_validate --auto-fix-hand-ik.
Facial doesn't driveL1 doesn't include facial AI. Use the lipsync pipeline or hand-author.
DeepMotion auth errorKey not set, or quota exhausted. Check your DeepMotion dashboard.