Deactivate Niagara Systems by Distance?

So I have an issue with my particle systems in the level still impacting performance regardless of if they’re rendered… in fact setting a max draw distance has seemingly no effect, and neither does setting the spawn rate to 0, thousands of particles or none at all it doesn’t seem to matter. So I assume it’s still calculating stuff no matter what. Is there any way to actually deactivate them by distance?

2 Likes

I had a similar issue where I would enable Camera Distance Culling in the particle system, and could see that working as intended (particles would stop rendering when I moved past the max distance. But they were still showing up in stat uobjects with massive draw calls. These Niagara systems were in a blueprint. I went to the system in the BP, and set Allow Cull Distance Volume to false, and now there are no draw calls showing up in stat ubjects (even when the particles are clearly rendering, mysteriously enough). I think if you don’t have cull distance volumes set up, they might still be processing away regardless of whether or not they’re rendering.
EDIT: Nevermind. After restarting the engine the calls are back.

Similar issue. I have the particles culling after just 3000 units, however if I copy paste about a hundred systems and back away, even after the particles are culled there is still a massive hit to my framerate. It’s like the system is still running and calculating even when the particles are culled.

Hey @IAmAzarath — welcome back! And yep, you’re spot on — Niagara systems can still consume resources even when not visible, especially if you’re just using spawn rate or draw distance.

:white_check_mark: Here’s what to try for distance-based FX deactivation:

1. Use Set Niagara System Active or Deactivate System
– Wrap this in a Blueprint or C++ script that checks distance to player camera or pawn.
– Trigger deactivation manually when FX are beyond a threshold.

2. Add a Distance Culling Module (in the Niagara Emitter)
– Inside your emitter, add a “Kill Particles by Distance” module
– Or custom one using a “Distance to Player” parameter + Kill Particles

3. Use Level Streaming Volumes or FX LODs
– Unload FX-heavy areas when not in use
– Or use LOD Niagara systems that swap to lower complexity at distance


:brain: Bonus: Keeping Track of FX Performance Optimizations

We’ve run into this exact issue on large environments — and one thing that really helped was tracking which Niagara systems were optimized and which still needed tuning.

That’s part of why we made Asset Optics:

  • :pushpin: Add notes to your Niagara systems like “needs distance-based deactivation”
  • :white_check_mark: Check off optimization tasks per emitter or level zone
  • :counterclockwise_arrows_button: Sync it all to a clean dashboard so you know what’s done (and what’s hurting FPS)

It won’t deactivate the system itself — but it helps make sure you’re not leaving perf leaks buried in the fog. :rocket:

Let us know if you need help wiring up the distance check — happy to drop a code snippet or BP example!