• CPU Performance

    Optimised Niagara systems using Niagara Data Channels, Spawn Groups and culling to reduce CPU overhead.

  • Memory Optimisation

    Reduced Niagara texture memory from 574MB to 10MB by optimising flipbook resolution, resizing textures and implementing mipmaps for texture streaming.

  • Profiling

    Cross-referenced Unreal Insights, Niagara Debugger, FX Outliner, and console commands to measure Game Thread, Render Thread and memory costs.

Key Stats

Single Explosion

Spawn System at Location (SSaL) vs Niagara Data Channel (NDC)

Single Fire

20K Particle Stress Test

Spawn System at Location (SSaL) vs Niagara Data Channel (NDC)

20K Particles

0 %

Reduction in Game Thread Time

0 %

Reduction in Render Thread Time

0 %

Reduction in Niagara System Memory

0 %

Reduction in Game Thread Time

0 %

Reduction in Render Thread Time

0 %

Reduction in Niagara System Memory

0 %

Reduction in total Niagara Size Map Memory

SSaL vs NDC Comparison

Niagara Data Channel Implementation

Step-by-step breakdown of the Niagara Data Channel (NDC) workflow, showing how Blueprint sends the missile’s raycast hit location to the Missile NDC. Using custom Scratch Pad modules, the missile system waits until its age reaches 1 before passing that same location to a second Explosion NDC, triggering the explosion. This replaces CPU-heavy Spawn System at Location calls with data transfer between persistent Niagara systems, reducing Game Thread overhead when repeatedly spawning explosions.

Spawn Groups & Visibility Tags​

Spawn Groups & Niagara Data Channels

Integrated Spawn Groups with Niagara Data Channels using the NDC spawn index as a visibility tag, removing Spawn Burst Instantaneous to support the existing NDC architecture.

Combined two mesh emitters into one emitter with two mesh renderers, creating both the ground ring and upward rock burst while maintaining the same particle count.

Moved the effect to GPU simulation, reducing CPU overhead.

Reduced Game Thread time from 0.45 ms to 0.01 ms and Render Thread time from 0.29 ms to 0.15 ms.

Niagara Debugger performance mode showed maximum Game Thread time dropping from 666 µs to 78 µs, and maximum Render Thread time from 76 µs to 56 µs.

CPU->GPU Smoke Trails and NDCs​

GPU Smoke Trail Optimisation

Replaced CPU-based Spawn System at Location and Generate Location event handling with Niagara Data Channels (NDCs).

Moved the smoke trail system to GPU simulation, using GPU Sample Particles to read positions from another emitter.

Reduced system memory from 2.92 MB to 0.5 MB (82.9% reduction).

Reduced maximum Game Thread time from 785 µs to 92 µs (88.3% reduction), while maximum Render Thread time remained at 89 µs.

Traded a small amount of additional memory for significantly reduced CPU overhead.

Memory Optimisations

T_MainExplosionSSSmallT_MainExplosion8x84K
Screenshot 2026-10-20 212849Screenshot 2026-10-20 212925

Main Explosion Flipbook

Reduced flipbook layout from 17×16 to 8×8.

Downscaled texture resolution to 2K.

Converted to power-of-two dimensions to support mipmapping.

Reduced texture memory from 240 MB to 1.8 MB (99.3% reduction).

Explosion Impact Flipbook

Reduced Texture Resolution from 5760×5760 to 1024×1025

Converted to power-of-two dimensions to support mipmapping.

Reduced texture memory from 33.1 MB to 577.4 KB (98.3% reduction).

Force Optimisation

Removed Curl Noise Force, saving 3.5MB.

Replaced Wind Force with Acceleration Force, achieving the same effect and saving 6MB of texture memory.

Saved a Total of 9.5MB with no noticeable visual difference.

SizeMapBeforeOptimisationSize Map After Optimi

Final Niagara System Size Map

Removed Curl Noise Force, saving 3.5MB.

Replaced Wind Force with Acceleration Force, achieving the same effect and saving 6MB of texture memory.

Saved a Total of 9.5MB with no noticeable visual difference.

Profiling Comparisons

20k SSAL20k NDC
Screenshot 2026-10-20 230145Screenshot 2026-10-20 230117

FX Outliner Comparison at 20k Particles

Used FX Outliner to compare Game Thread and Render Thread timings at 20K particles.

Cross-referenced results with Unreal Insights traces to validate performance improvements.

Achieved a 98% reduction in traced Game Thread time

Unreal Insights Comparison at 20k particles

Captured and compared Unreal Insights traces before and after optimisation.

Analysed traced Game Thread time across the explosion and trail systems at 20K particles.

Reduced traced Game Thread time from 1.9 ms to 38.7 µs (98% reduction).

Part 2 focuses on performance optimisation. 

Part 1 explored the Houdini Simulations and VFX Creation of the project. Explore below: