s&box/field-guide
the symptom, in your words

"Cross-fade animations WITHOUT an AnimGraph"

✓ verified on engine 26.07lane: 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 — seen in a real project.
s&box moves fast; an undated fix is a liability. Spot a stale detail?