Quick answer: After SetSkeletalMesh or AnimBP swap, call InitializeAnimation() on the SkeletalMeshComponent. Cached poses from the previous skeleton/anim graph are invalid until re-init.

A character customization system swaps a skeletal mesh at runtime. The first frame after the swap renders frozen or T-posed before the anim catches up.

Why It Goes Stale

The Anim Instance keeps per-frame caches keyed to the skeleton it was initialized with. Swapping the mesh (especially to one with a different but compatible skeleton, or back to the same one) leaves those caches pointing at the old data for one frame.

Re-Init After Swap

SkeletalMesh->SetSkeletalMesh(NewMesh);
SkeletalMesh->InitializeAnimation();

InitializeAnimation rebuilds the AnimInstance state for the current skeleton. Do this in the same frame as the swap to avoid the one-frame visual blip.

Watch for Control Rig Bindings

If the character uses Control Rig, control bindings are bone-name-resolved at init — re-init pulls them fresh. Custom code that cached bone references must also re-resolve.

Pose Snapshots Don't Migrate

If you used a Pose Snapshot from the old skeleton, it’s invalid on the new one. Take a fresh snapshot after re-init if you need one.

Verifying

Swap meshes back-to-back — no T-pose blip, no frozen first frame. Control Rig effects still apply correctly post-swap.

“Mesh swap = anim cache stale. InitializeAnimation right after restores a coherent state.”

For full character swaps, also tick the AnimBP once manually before the next render so the new pose is ready — the cleanest no-blip switch.