Animation Engines
The animation engine is a part of Rukhanka Animation that reads, processes and blends animation tracks for the animated rigs.
Rukhanka Animation has two animation engine implementations:
- One that is completely implemented on parallel jobs and
Burst-compatible C# code. In the documentation, this engine is referred to asCPU Animator. - Another with the core routines implemented using compute shaders. In the documentation, this engine is referred to as
GPU Animator.
The CPU Animator is the reference implementation. The GPU Animator implements the same supported clip sampling and blending behavior, but CPU/GPU floating-point results can differ. Because its bone poses stay in GPU memory, it cannot provide every feature that needs same-frame CPU access to the pose.
Both engines use GPU mesh deformation. Selecting the CPU Animator does not move skinning to the CPU. In-place skinning is a separate deformation setting.
Animators Feature Support Table
The following table shows available animator features and their support status.
| Feature Name | CPU Animator Support Status | GPU Animator Support Status |
|---|---|---|
| Legacy animations | ❌ | ❌ |
| Generic animations and avatars | ✅ | ✅ |
| Humanoid animations and avatars | ✅ | ✅ |
| Weighted animation blending | ✅ | ✅ |
| Avatar mask application | ✅ | ✅ |
| Loop pose calculation | ✅ | ✅ |
| Animation Events | ✅ | ✅ |
| Altering animation results | ✅ | ❌ |
| Inverse Kinematics | ✅ | ❌ |
| Procedural animation | ✅ | ❌ |
| Root motion | ✅ | ❌ |
| User animation curves | ✅ | ❌ |
| Blend shapes | ✅ | ❌ |
| Bone position writeback | ✅ | ❌ |
| Working with physics | ✅ | ❌ |
| Working with Netcode | ✅ | ✅ |
| Animation frustum culling | ✅ | ✅ |
| Render bounding box update | ✅ | ❌ |
| Bone attachments | ✅ | ✅ (GPU attachment shader required) |
Animation Engine Selection
Rig Definition Authoring has the Animation Engine dropdown, where you can choose animator for a baked entity:

Animation Engine Runtime Switching
Rukhanka Animation can switch between CPU and GPU animators at runtime. The switch will be performed seamlessly and can be made at any time (even during animation playback). Use GPUAnimationEngineTag enableable component state to switch between animators:
- If the component is enabled, Rukhanka Animation will use
GPUAnimatorfor that entity. - If the component is disabled, Rukhanka Animation will use
CPUAnimatorfor that entity.
Only change the enabled state on entities that contain GPUAnimationEngineTag. CPU frame offsets are transient and must not be cached across an engine switch. Keep rigs on the CPU Animator when gameplay needs IK, root motion, physics bone transforms, or other CPU-only features.