Skip to main content
Euca’s animation system (euca-animation) evaluates skeletal poses every tick from glTF clips. The evaluation pipeline is: state machine → clip sample → crossfade → montage overlay → root motion → events → bone matrices. All of it is transform math, so it runs on the headless server; the resulting bone matrices are what a GPU host consumes to skin a mesh.
Headless logic, GPU display. Loading clips, driving state machines, blending, IK, and root-motion extraction all run on the :3917 server with no GPU. Only the final skinned, on-screen mesh needs a render host.

What it does

  • Clips & playback — load glTF animations into an AnimationLibrary; play/stop per entity with speed and looping (euca_animation::animation_evaluate_system).
  • State machinesAnimStateMachine with named states and parametric transitions (float/bool compare conditions), crossfaded.
  • Blend spacesBlendSpace1D / BlendSpace2D for parametric clip interpolation (e.g. a locomotion blend by speed/direction).
  • Montages — one-shot overlays with blend-in/out ramps and bone masks (MontagePlayer).
  • Root motion — drive entity translation from the root bone (extract_root_motion).
  • IK — analytical two_bone_ik, iterative fabrik_solve for N-bone chains, and a LookAtConstraint.
  • Events — fire animation events at keyframes (AnimationEventLibrary).

Endpoints

MethodPathDescription
POST/animation/loadLoad a glTF file with animations
POST/animation/playStart an animation on an entity
POST/animation/stopStop animation on an entity
GET/animation/listList loaded clips (duration, channels)
POST/animation/state-machineAttach a state machine with states + transitions
POST/animation/montagePlay a blended montage overlay

Example

# Load clips from a rigged glTF, then play a looping "walk" on entity 0
curl -s -X POST http://localhost:3917/animation/load \
  -H 'Content-Type: application/json' -d '{"path":"assets/characters/hero.glb"}'

curl -s -X POST http://localhost:3917/animation/play \
  -H 'Content-Type: application/json' \
  -d '{"entity_id":0,"clip":"walk","speed":1.0,"loop":true}'

curl -s http://localhost:3917/animation/list

Status

  • ✅ State machines, crossfade blending, blend spaces, montages with bone masks, two-bone IK, FABRIK IK, look-at constraints, root motion, animation events — all shipped and headless.
  • The system produces BoneTransforms; binding them to a skinned material for display is the render host’s job.

Animation endpoints

Load, play, state-machine, and montage endpoints with schemas.