When an entity stops being batched into an instanced skinned mesh component, the "Collect unwanted items & remove" sweep removes its instance, but never frees its ASTP track. Only ProcessRemovesForComponent calls DeallocateTrack, and outside the stationary ISM switcher and its destructor nothing in MassRepresentation calls RemoveInstance. So for a moving entity the sweep is the only way out of a component, and every despawn, LOD change or significance range change leaves a track behind.
The leaked track stays active, so it is still uploaded every frame, and it keeps its last sequence index. Once that sequence is released with DeallocateSequence, the ensure fires and the track is left pointing at a freed slot.
This is the non-external-ID path. The sweep is the same in //UE5/Main MassVisualizationComponent.cpp#74 (around line 951) and //UE6/Main #12 (around line 1069). We are on 5.8 with 57928894 and 58169258 cherry-picked from UE5/Main, which is where AllocateSequence and DeallocateSequence come from.
Steps to Reproduce
I have not isolated this into a template project, but it is all stock Mass and ASTP code. The sweep in our build is unmodified apart from the fix in the description.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-401320 in the post.
| 0 |
| Component | UE - MVF Character - Animation |
|---|
| Created | Oct 7, 2026 |
|---|---|
| Updated | Oct 7, 2026 |