Description

FSkinnedSceneProxy's never get unregistered from the DynamicWind system

In FDynamicWindTransformProvider::UnregisterSceneProxy, there's an early out that says:

if (SkinningSceneExtProxy == nullptr || SkinningSceneExtProxy->GetTransformProviderId() != DynamicWindTransformProviderId)

This UnregisterSceneProxy is triggered by a OnDestroyRenderThreadResources delegate. By the time it reaches the if above, it has already destroyed the RenderThreadResources, which makes FInstancedSkinningSceneExtensionProxy::TransformProviderProxy null. Due to this, when SkinningSceneExtProxy->GetTransformProviderId() is called, it does not identify itself as being of DynamicWind kind, but instead if falls back to REF_POSE_TRANSFORM_PROVIDER_GUID, and due to this the UnregisterSceneProxy earlies out, disregarding any proxy that arrives here. To check, I added a breakpoint after this early out, and it's never triggered it (removing ISkMs with wind, reloading the level, etc.). I have added a fix that returns the TransformProviderId member directly for this specific check, without going through the TransformProviderProxy.

This means SkeletonLookup entries leak — the ReferenceCount is never decremented, bone data is never freed from the BoneDataAllocator, and entries accumulate

It appears FInstancedSkinningSceneExtensionProxy::TransformProviderId defaults to RefPoseProviderId in the constructor when !succeeded, can we just return TransformProviderId in FInstancedSkinningSceneExtensionProxy::GetTransformProviderId()?

Steps to Reproduce

Steps to Reproduce

  • Create an ISkM with a DynamicWindSkeletalData assigned and a TransformProvider and a single instance, so that wind blows on it.
  • Add a breakpoint in the FDynamicWindTransformProvider::UnregisterSceneProxy, after all early outs.
  • Remove the ISkM, or simply reload the level. Notice how nothing never unregisters from it (at least in my case).

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-370935 in the post.

1
Login to Vote

Fixed
ComponentUE - Rendering - Architecture
Affects Versions5.7
Target Fix5.8
Fix Commit52064875
CreatedMar 20, 2026
ResolvedMar 23, 2026
UpdatedMay 4, 2026
View Jira Issue