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
Reduction in Game Thread Time
Reduction in Render Thread Time
Reduction in Niagara System Memory
Reduction in Game Thread Time
Reduction in Render Thread Time
Reduction in Niagara System Memory
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






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.


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




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: