Skip to content

Animation pipeline

Each pawn runs one character Anim Blueprint. It is the Game Animation Sample's motion matching Anim Blueprint with GASPALS layering added: overlay poses blended per body part on top of locomotion, an aim offset, procedural IK and cover lowering.

Anim Blueprint Used by
/GASPALS/Blueprints/SandboxCharacter_Mover_ABP SandboxCharacter_Mover and SandboxCharacter_Mover_Ragdoll
/GASPALS/Blueprints/SandboxCharacter_CMC_ABP SandboxCharacter_CMC

Both are animated on the UEFN mannequin skeleton. Other characters (Manny, Quinn, the MetaHuman Kellan, or your own) copy or retarget that pose; see Characters and visual overrides.

The pose, step by step

flowchart TD
    MM[Locomotion<br>motion matching or hybrid] --> LB
    OP[Overlay pose layer<br>ALI_OverlayPose] --> LB
    OB[Overlay body layer<br>ALI_OverlayBody] --> LB
    LB[ABP_LayerBlending<br>per-bone blends by curves] --> AO[Additive leans<br>and aim offset]
    AO --> Slot[DefaultSlot<br>montages: traversal, interactions, get-up]
    Slot --> Root[Offset root bone]
    Root --> Proc[Procedural layers<br>foot placement, leg IK, hand IK, full body IK]
    Proc --> Hist[Pose history<br>for motion matching]
    Hist --> Cover[CR_Humanoid_CoverLower<br>cover lowering]
    Cover --> Out((Output pose))
  1. Locomotion. Two locomotion setups exist, selected per pawn by a console variable:

    • Full motion matching: the motion matching node picks frames from the pose search databases to match the character's trajectory.
    • State machine / blend stack hybrid: a state machine (idle, locomotion and in-air loops, transitions, idle breaks, slide) whose states pick animations with choosers and play them through a blend stack.

    DDCvar.LocomotionSetupMover (default 1, hybrid) and DDCvar.LocomotionSetupCMC (default 0, full motion matching) choose the setup. The result is cached as the locomotion pose. 2. Overlays. Two linked anim layers produce the overlay poses: ALI_OverlayPose (what the hands hold: rifle, torch, box...) and ALI_OverlayBody (the body style: default, masculine, feminine). The Blueprints that implement them are linked at runtime by the overlay and equipment systems. Inertialization smooths the switch when a new layer is linked. 3. Layer blending. ABP_LayerBlending (a linked anim graph) blends the overlays onto the locomotion pose bone chain by bone chain: legs, pelvis, spine, head, each arm and hand, in local or mesh space, as additive or override. The weights come from curves on the overlay animations, so each overlay pose decides how much of the body it takes over (see below). 4. Leans and aim offset. Additive leans from the lateral acceleration, then the aim offset layer turns the spine toward the aim direction. 5. Montages. The DefaultSlot plays montages: traversal, takedowns and shoves, ragdoll get-ups. 6. Root and procedural. The offset root bone keeps the feet planted while the capsule turns. The procedural layers run foot placement and leg IK, the hand IK Control Rig (CR_Humanoid_HandIK), and on the Mover pawn a full-body IK pass for character interactions. 7. Pose history records the final pose for motion matching's next search. 8. Cover lowering. CR_Humanoid_CoverLower lowers the pelvis in cover. It runs last so it acts on the final pose.

The Mover and CMC Anim Blueprints differ in the procedural part: the Mover one splits it into Procedural_PreLayering, Procedural_Feet (the CR_Biped_FootPlacement Control Rig) and Procedural_FullBody; the CMC one runs a single Procedural layer with the Foot Placement node and leg IK.

Layering curves

Overlay animations carry curves that say how strongly each body part follows the overlay. The pose Anim Blueprints write them from a curve map on each pose (see Overlay system), and ABP_LayerBlending reads them:

Curve Effect
layering_legs, layering_pelvis How much the overlay drives the legs and pelvis. 0 keeps the locomotion legs.
layering_spine, layering_spine_add Spine override and additive weight.
layering_head, layering_head_add Head override and additive weight.
layering_arm_l, layering_arm_r Arm weight.
layering_arm_l_add, layering_arm_r_add Additive arm weight (arm swing kept on top).
layering_arm_l_ls, layering_arm_r_ls Local-space arm weight. Below 1 the arm blends in mesh space, so it keeps its orientation while the spine moves.
layering_hand_l, layering_hand_r Hand (finger) weight.
enable_handik_l, enable_handik_r Hand IK weight toward the item's IK sockets.
enable_cr_aimoffset, disable_cr_aimoffset_pitch, disable_cr_aimoffset_yaw Aim offset Control Rig on or off, and per axis.

A rifle ready pose, for example, takes the spine, arms and hands fully (layering_* = 1), keeps the head free, and turns the left hand IK on so the support hand stays on the handguard.

Aim offset and weapon aim

When the character aims, the upper body follows the aim direction in two steps:

  1. The aim rotation (the control rotation for the local player) is smoothed in the character Anim Blueprint with a critically damped spring. The smoothed value drives the spine aim offset.
  2. In the overlay Anim Blueprint, the aim pitch is mapped to 0..1 and blends the weapon's aim sweep animations, which raise and lower the arms.

The camera has no rotation smoothing of its own, so any body lag shows against the crosshair. The smoothing is therefore short for the player you control and longer for remote copies, where the aim arrives in network steps.

Setting Asset (category GASPALS > Anim > Aim / GASPALS > Overlay > Aim) Default
Aim Smoothing Time Local Both character Anim Blueprints 0.04 s
Aim Smoothing Time Remote Both character Anim Blueprints 0.2 s
Aim Sweep Interp Speed Local ABP_OverlayPose_Base and every ABP_Overlay_<Item> 30
Aim Sweep Interp Speed Remote The same 10

With the defaults the aim offset trails the mouse by about 1.4 degrees on average while turning at a steady rate. A sweep speed of 0 snaps the arm pitch.

New overlay children

Variables added to ABP_OverlayPose_Base do not reach the class defaults of existing children. When you create an ABP_Overlay_<Item> by duplicating an existing one, the values come along; when you add a new setting to the base, set it on every child.

Legs and foot placement

The overlay legs are blended in (layering_legs, layering_pelvis), so carry and ready stances such as the rifle's bent-knee stance show in the legs. Foot placement then plants the feet:

  • Mover pawn: CR_Biped_FootPlacement (Control Rig). Its leg IK measures the leg bone lengths from the posed skeleton every frame, so skeletons with scaled leg bones (the UEFN mannequin's thighs and calves carry a 1.12 scale) keep their real leg length.
  • CMC pawn: the engine's Foot Placement node, then leg IK.

On the Mover pawn, DDCvar.FootPlacementMode selects the foot placement method (0 off, 1 foot placement node, 2 biped Control Rig). To keep the locomotion legs for an overlay, lower its layering_legs and layering_pelvis curves.

Threads and update order

The Anim Blueprints use the thread-safe update (BlueprintThreadSafeUpdateAnimation): the game thread only copies the pawn's state (Update_PropertiesFromCharacter, which reads Get_PropertiesForAnimation from the pawn through BPI_SandboxCharacter_Pawn), and the worker thread computes the rest. DDCVar.ThreadSafeAnimationUpdate.Enable (default on) selects the path; GASPALS' overlay Anim Blueprints read it once at start and run their update on exactly one of the two paths.

Console variables that change the animation

Variable Default Effect
DDCvar.LocomotionSetupMover 1 Mover Anim Blueprint: 0 full motion matching, 1 state machine / blend stack hybrid.
DDCvar.LocomotionSetupCMC 0 CMC Anim Blueprint: 0 full motion matching (work in progress), 1 hybrid.
DDCVar.ExperimentalStateMachine.Enable false Experimental state machine path of the CMC Anim Blueprint.
DDCvar.MMDatabaseLOD 0 Pose search databases: 0 dense, 1 sparse, 2 extreme sparse (cheaper, less precise).
DDCvar.FootPlacementMode 1 Mover Anim Blueprint: 0 off, 1 foot placement node, 2 biped Control Rig.
DDCvar.OffsetRootBone.TranslationRadius 0 How far the root bone may drift from the capsule.
DDCVar.ThreadSafeAnimationUpdate.Enable true Thread-safe animation update.

The full list, with what reads each one, is in Console variables.

First person

First person uses its own Anim Blueprint (ABP_FirstPerson_UEFN) on generated first-person meshes. It copies the third-person pose and adds camera, aim down sights and arm aim Control Rigs. See First person system.