[UE 5.7.3] Sharing a workaround for GPU crash caused by Niagara ribbon renderer in Split-screen play

Whenever a Niagara System(NS) is a class default object(CDO) of a blueprint, and that blueprint spawns a ribbon renderer during splitscreen play (or presumably any situation with multiple viewports trying to render the same ribbon) you will experience a GPU crash within about ~5s.

Engine Version: 5.7.3

Repro:

  1. Create a blueprint such as a simple playable character.
  2. Create a NS with a ribbon renderer.
  3. Attach the ribbon renderer directly to your character BP as a CDO.
    1. Ensure auto activate is checked, or enable it in your begin play.
  4. Ensure there is more than one viewport rendering your 3D scene, such as enabling splitscreen and 2 of the above player characters.
  5. Start the game in PIE.

Outcome: You will quickly encounter a GPU crash.

Workaround: You can work around this issue by spawning the NS via BP/code in begin play.

I am only speculating, but it seems some sort of naive optimization is happening when the NS is a CDO and each viewport is trying to write to the same address to update the ribbon renderer. But if they’re spawned in during begin play, it seems like the memory addresses are handled correctly and each viewport writes to its own instance.

Note: I did a bunch of unintentional (and some intentional) halo testing around this. For whatever reason if the characters the NS is attached to don’t move from their spawn position at all, the crash won’t occur, but as soon as either moves even once, the crash will occur several seconds later, whether they continually move or stop immediately.

I am quite certain everything about the NS was the same when spawned as a CDO or via BP on begin play, including what object and bone it was attached to, etc.

Quite a few hours of pursuing red herrings on this one, but I hope this helps get the bug fixed, or at least save some others some time in the future if they happen to read this.

1 Like