Skip to content

Animation Validation

In Maya or Blender, animation is like a reference you can peek at:

  • You scrub the timeline → see the pose at that frame.
  • You tweak a slider → your change applies immediately.
  • Both work simultaneously, no conflict.

In RealityKit, animation is like a DJ who won’t give up the mic:

  • The AnimationPlaybackController takes exclusive control of animated properties.
  • While it’s active, your manual changes get overwritten every frame.
  • You must stop the controller completely to edit manually.

What you expect (Maya/Blender):

  1. Scrub to frame 60.
  2. See the blend shape at that frame.
  3. Tweak the slider to test a different value.
  4. Scrub to frame 80 to see another pose.

What happens in RealityKit:

  1. Scrub to frame 60 → ✅ Works (if controller is paused).
  2. See the blend shape → ✅ Works.
  3. Tweak the slider → ❌ Controller overwrites your edit instantly.
  4. You must stop the animation first → then slider works.
  5. But now scrubbing doesn’t show preview → you lost the controller.
ModeScrub PreviewManual Sliders
Animation Paused✅ See any frame❌ Locked
Animation Stopped❌ Shows base pose✅ Full Control

You can’t have both at once. This is a RealityKit design decision, not a bug.


RealityKit is designed for runtime apps, not animation editing:

  • Performance: The runtime assumes playback is authoritative.
  • Blending: Multiple animations can layer (e.g., walk + facial expression).
  • Continuous Time: There is no concept of “current frame”, only continuous seconds.

We implemented a hybrid approach to mitigate this:

  1. Pause: Controller stays alive, scrubbing shows preview.
  2. Touch a slider: Automatically Stops controller, releases control.
  3. Press Play: New controller starts, scrubbing works again.

It’s not seamless like Maya, but it gives you both features with one extra click.