[UE 5.8.2][DynamicWind] GPU DEVICE_HUNG when changing GI scalability with a DynamicWind Transform Provider active

Summary

In Unreal Engine 5.8.2, changing Global Illumination scalability at runtime can repeatedly trigger a GPU hang when a DynamicWind Transform Provider is active on Procedural Vegetation / Nanite foliage.

The problem is timing-sensitive and does not occur on every scalability transition, but it has reproduced multiple times in both our production project and a minimal test project.

The same GPU crash signature has been captured more than once.

The same GI scalability transitions are stable when the DynamicWind Transform Provider is removed / set to None.

ENGINE / PLATFORM

  • Unreal Engine 5.8.2
  • CL 56702186
  • Windows 11 25H2
  • D3D12 / SM6
  • AMD Ryzen 9 7950X
  • AMD Radeon RX 7900 XTX
  • Development build
  • DynamicWind plugin enabled
  • Procedural Vegetation / Nanite foliage enabled

MINIMAL TEST PROJECT

The issue was reproduced in a small packaged test project called Trees_Tester.

The scene contains Procedural Vegetation / Nanite trees using a DynamicWind Transform Provider.

The attached video captures the problem occurring during a runtime GI scalability change.

REPRO FREQUENCY

Intermittent / timing-sensitive, but repeatedly reproducible.

Some sessions allow several GI scalability changes without crashing, while other sessions reproduce the GPU hang.

We have captured the same crash signature multiple times.

Transitions that have previously reproduced the issue include:

  • GI 0 → 1
  • GI 1 → 3
  • GI 0 → 3

The latest attached reproduction is GI 1 → 3.

IMPORTANT A/B RESULT

With the DynamicWind Transform Provider active:

  • runtime GI scalability changes can trigger the GPU hang.

With the same foliage but the Transform Provider removed / set to None:

  • repeated GI scalability changes remain stable.

This strongly suggests that DynamicWind Transform Provider participation is required for the reproducible failure.

ADDITIONAL OBSERVATIONS

The crash is not specific to Hardware Ray Tracing.

In our production project we also reproduced the DynamicWind crash while using Software Lumen with Hardware Ray Tracing disabled.

This suggests that HWRT itself is not the root cause.

Changing individual GI-related CVars after a fresh restart did not reproduce the problem as reliably as changing the complete sg.GlobalIlluminationQuality scalability group.

The scalability transition also causes renderer / mesh draw command updates.

In captured failures, the log contains:

“Forcing update for all mesh draw commands: SkyLight real-time capture change”

around the scalability transition.

This may indicate a timing-sensitive DynamicWind resource / scene proxy / scene recreation lifecycle issue.

CRASH SIGNATURE

Multiple captured crashes share the same PCallStackHash:

B04E6DEA90C7C7F974513346F305C9CD1C4820B7

They also stop in the same GPU breadcrumb area:

UpdateAllPrimitiveSceneInfos
→ Skinning
→ DynamicWind

EARLIER CAPTURES

In earlier reproductions of the same issue, GPU breadcrumbs also reached:

DynamicWind
→ ScatterUpload

and in one capture:

ResizeIfNeeded::MemcpyResource

The latest minimal reproduction stops directly in:

Skinning
→ DynamicWind

WORKAROUND

Current workaround:

  • Do not change Global Illumination scalability at runtime on scenes using DynamicWind Transform Providers.

or:

  • Remove / disable the DynamicWind Transform Provider and use another wind path.

RELATED ISSUE

UE-370935:
“DynamicWind doesn’t unregister proxy and leaks”

This appears to be a different bug, but it is relevant because it also concerns DynamicWind Transform Provider / scene proxy lifecycle behavior.

There is also an Epic forum report where a DynamicWind GPU crash in UE 5.8 was reproduced in an Asset_Zoo / PCG wind setup and moved to triage.

A Windows minidump is also available and can be provided privately to Epic staff on request.

What Type of Bug are you experiencing?

Framework

Steps to Reproduce

  1. Launch the UE 5.8.2 test build containing Procedural Vegetation / Nanite trees using a DynamicWind Transform Provider.

  2. Allow the scene to initialize.

  3. Execute:

    sg.GlobalIlluminationQuality 1

  4. Wait approximately 10-20 seconds.

  5. Execute:

    sg.GlobalIlluminationQuality 3

  6. In the captured reproduction, approximately 4.8 seconds after switching to quality level 3, the GPU hangs and the application crashes with:

    DXGI_ERROR_DEVICE_HUNG

Expected Result

Changing Global Illumination scalability should recreate/update renderer resources without causing DynamicWind to hang the GPU.

Observed Result

D3D12 reports:

Device 0 Removed: DXGI_ERROR_DEVICE_HUNG

The active GPU breadcrumb repeatedly stops in the same area:

SceneRender - ViewFamilies
→ RenderGraphExecute
→ UpdateAllPrimitiveSceneInfos
→ Skinning
→ DynamicWind

At the time of the failure:

  • DistanceFields had not started yet.
  • Nanite::Streaming had not started yet.
  • DRED reported no PageFault.
  • GPU memory usage was approximately 4.4 GB from a ~23.7 GB local budget.

Therefore this does not appear to be a GPU memory exhaustion / OOM condition.

Affects Versions

5.8

Platform(s)

Windows

Video

For crash reports, include your callstack

GPU crash: DXGI_ERROR_DEVICE_HUNG.

No symbolized CPU callstack was generated.

Relevant GPU breadcrumb:

SceneRender - ViewFamilies
→ RenderGraphExecute - /ViewFamilies
→ UpdateAllPrimitiveSceneInfos
→ Skinning
→ DynamicWind

The same crash signature reproduced multiple times.

PCallStackHash:
B04E6DEA90C7C7F974513346F305C9CD1C4820B7

PCallStack:
Trees_Tester + 0x8e7a555
Trees_Tester + 0x8e0978d
Trees_Tester + 0x8e2385c
Trees_Tester + 0x8e2a0fe
Trees_Tester + 0x8e38a0f
Trees_Tester + 0x1bf4258
Trees_Tester + 0x1bedc55
KERNEL32 + 0x2cd87

Additional Notes

We also reproduced:

  • GI 0 → 1
  • GI 1 → 3
  • GI 0 → 3
    including tests with ~60 seconds between changes.