Best Practices for Handling Large-Scale Niagara Effects Requiring Extensive Warmup Frames

I am working with large-scale Niagara systems that require thousands of warmup frames to achieve their desired initial state. Specifically it is a large smoke pillar, similar to your campfire smoke in Lego Fortnite, for example.

This causes significant Game Thread blocking and performance hitches during warmup, even with GPU simulation enabled. Given the sequential and synchronous nature of warmup ticks, what are the recommended best practices or engine-supported solutions to efficiently handle or eliminate these costly warmup phases for complex effects at runtime?

Specifically, are there ways to:

  • Warm up effects asynchronously or spread warmup over multiple frames?
  • Pre-bake or simulate warmup offline for runtime use?
  • Optimize Niagara systems’ spawn/update logic to reduce warmup cost?
  • Any upcoming or experimental features to improve warmup performance on large or complex particle systems?

Thank you for any guidance or insights.

Best regards,

Matthias

[Attachment Removed]

Hello,

Thank you for reaching out.

I’ve been assigned this issue, and we will be looking into available Niagara caching options for addressing this.

[Attachment Removed]

Hello,

You can try these methods to reduce the extensive warm up frames.

If you add a Niagara Component to a Blueprint, you can use the Advanced Simulation Expressions to make the system progress to a certain point in time, before they need to appear.

If you set your emitter or systems to be deterministic, you can set the age properties for the system or emitter or the particles themselves at the spawn time.

Baking a Niagara Simulation Cache from the Niagara System in the sequencer. For additional information, please see

[Attachment Removed]

Hello,

These are separate approaches and can help depending on the requirements.

Can you please send us a minimal test project that demonstrates this, and include screenshots of the issue?

The guide for test projects:

[Content removed]

[Attachment Removed]

hello and thanks for your reply. could you please elaborate:

are these three separate approaches, or do I need to do all of them?

can I use the sequencer approach in a game, or in which way would you utilize it in the scenario that I described?

[Attachment Removed]

I tried the particle age approach, but I’m probably doing it wrong as it doesn’t change anything? added a spawn burst of 500 and tried to distribute the age from 0 to 106 (106s is the desired warmup time)

[Image Removed]

[Attachment Removed]