"We have encountered a regression in UE 5.7 where Skeletal Mesh Morph Targets do not visually reset when all weights are set to 0.0.
The mesh retains the deformation from the previous frame. This issue was not present in UE 5.5. After analyzing the render thread code, it appears to be caused by changes in how bMorphNeedsUpdate is handled and a missing check for the "transition to zero" state in FSkeletalMeshObjectGPUSkin.
In 5.5, UpdateDynamicData_RenderThread compares the previous and current frame's active morphs. Even if the current frame has no active morphs (weights are 0), ActiveMorphTargetsEqual returns false (because the previous frame had morphs), setting bMorphNeedsUpdate to true.
In 5.7, bMorphNeedsUpdate has become a member variable, and the update logic inside FSkeletalMeshObjectGPUSkin::ProcessUpdatedDynamicData seems to optimize too aggressively when there are no active morphs. Because it enters the else block immediately, the render thread never executes the logic to bind a cleared/null buffer or reset the existing one. The GPU continues to use the dirty buffer from the previous frame.
We confirmed this analysis by setting the weight to 0.001f instead of 0.f. This forces bHasWeightedActiveMorphs to true, triggering the update path, and the mesh updates correctly."
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-359709 in the post.
| 2 |
| Component | UE - Rendering Architecture - RHI |
|---|---|
| Affects Versions | 5.7 |
| Target Fix | 5.8 |
| Fix Commit | 49960375 |
|---|
| Created | Jan 6, 2026 |
|---|---|
| Resolved | Jan 20, 2026 |
| Updated | Jan 23, 2026 |