Animation Engines
The animation engine is a part of Rukhanka that reads, processes and blends animation tracks for the animated rigs.
Rukhanka 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 reference Rukhanka animation engine is the CPU Animator
. The GPU Animator
is closely followed by the CPU Animator
and produces exactly the same animation results, but due to the CPU-GPU interprocess communication aspects, cannot provide all functionality available from the CPU Animator
.
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 | ✅ | ✅ |
Altering animation results | ✅ | ❌ |
Inverse Kinematics | ✅ | ❌ |
Root motion | ✅ | ❌ |
User animation curves | ✅ | ❌ |
Blend shapes | ✅ | ❌ |
Bone position writeback | ✅ | ❌ |
Working with physics | ✅ | ❌ |
Working with Netcode | ✅ | ✅ |
Animation frustum culling | ✅ | ✅ |
Render bounding box update | ✅ | ❌ |
Bone attachements | ✅ | ✅ |
Works with Rukhanka Deformation System | ✅ | ✅ |
Works with Entities.Graphics Deformation System | ✅ | ❌ |
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 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 will use
GPUAnimator
for that entity. - If the component is disabled, Rukhanka will use
CPUAnimator
for that entity.