the symptom, in your words

"Cross-fade animations WITHOUT an AnimGraph"

✓ verified on 26.07.08e
lane Rigging & animationposted

▸ SYMPTOM

  • Walk↔run, idle↔walk, or ground↔air switches snap / hard-cut.
  • Clips look fine in isolation; transitions read as jank.
  • You assumed you needed a full AnimGraph (.vanmgrph) just to cross-fade.

▸ CAUSE

On direct sequence playback (Sequence.Name = "walk" etc.), the engine will hard-cut unless blending is enabled.

SkinnedModelRenderer.Sequence.Blending (bool) is the cross-fade switch. Engine docs (Sandbox.Engine.xml, AnimationSequence.Blending):

Get or set whether animations blend smoothly when transitioning between sequences.

Per-clip duration comes from the vmdl AnimFile fields fade_in_time / fade_out_time. Those can sit in the vmdl dormant forever if nothing ever sets Sequence.Blending = true: the engine ignores them and hard-cuts.

▸ FIX

Set once after creating the renderer:

snippet
_renderer.Sequence.Blending = true;

Every subsequent hard switch still works the same:

snippet
_renderer.Sequence.Name = "run";
_renderer.Sequence.PlaybackRate = rate;

…but cross-fades instead of popping.

Shape the blend in the vmdl (ModelDoc AnimFile / AnimationList), for example:

Clipfade_infade_out
idle0.25 s0.25 s
walk0.20 s0.20 s
run0.15 s0.15 s
shocked / hit react0.05 s in0.20 s out

Defaults around 0.2 s are fine if you don't need per-clip tuning.

Do not spawn a second SkinnedModelRenderer and lerp opacity: doubles skinning cost, needs alpha materials, looks worse than bone-space blend. BoneMergeTarget is for attaching clothes/props to a parent skeleton, not for blending clips.

AnimGraph is the heavier alternative: use it when you need layering, bone masks, IK, aim-blend. For plain state-to-state cross-fades it is overkill. Reference graphs live under addons/base/Assets/animgraphs/tutorial/ and citizen's .vanmgrph.

▸ WHY IT WORKS

Direct playback already knows how to interpolate bone poses between the outgoing and incoming sequences; Blending is simply the enable bit. Fade times authored on each clip tell the mixer how long to spend entering/leaving that sequence. AnimGraph adds a node graph and parameter API on top, unnecessary if all you needed was "don't pop."

Verified on engine 26.07.08e: seen in a real project.
s&box moves fast; an undated fix is a liability. Spot a stale detail?

Want to know when new guides or fixes drop? Join the community to help build this out. Report gotchas, flag outdated fixes, or just lurk.

Join the Discord