Quick answer: Unreal Niagara skeletal mesh DI reading stale data after the mesh is rebuilt? DI caches the skeletal asset pointer; explicit Reset is required after structural changes.

Procedural character: skeleton bones added at runtime. Niagara emitter referencing it samples the pre-rebuild bones.

Reset the DI

Niagara->SetVariableObject("Mesh", NewMesh);
Niagara->ResetSystem();

Re-assigns the mesh; ResetSystem clears cached sampling state.

Or use direct sampling

For one-off effects, sample bones in C++ and push positions as parameters. Skips DI entirely.

Validate cache state

Niagara debug overlay shows per-DI cache age. Stale DIs are visible per emitter.

“Data interfaces cache. Caches need invalidation paths.”

Track which DIs cache what. For procedural projects, the cache invalidation map is its own design doc.

Related reading