Controlling a static Niagara particle system with slider parameters

Hi,

I’m working with a Niagara system that renders a scanned room as a point cloud (particles sampled from a mesh). It looks good as a static structure, but I want to control it with a few sliders (0–1 values from Blueprint).

For example:

  • expand / compress the space (move particles outward or inward)

  • add subtle noise so it feels alive

  • control overall motion intensity

Right now I’m using Curl Noise + Drag + Point Attraction. It looks nice at first, but over time the particles always drift and the structure breaks apart. Point Attraction only pulls everything toward one point, which isn’t what I want.

Ideally, I want the original shape to stay intact and just add controlled offsets on top (like “original position + effect”), driven by parameters.

What’s the best way to approach this in Niagara?
Should I store the original position per particle and rebuild the position every frame, or is there a better pattern for this kind of parameter-driven deformation?

Any tips would be appreciated.

the pattern is user parameters read by the system, driven by your sliders:

add user params in the system (Expand as float, maybe Tint as linear color). in the emitter read Expand in particle update and use it to scale positions relative to the system center: normalize (particle position minus system center), multiply by (1 plus Expand), add the center back. a small scratch module does this cleanly, and the parameter read happens every update so slider changes are live.

on the blueprint side: on value changed from the slider, get the niagara component and call set variable float with the parameter name and the slider value, same with set variable linear color for a tint. works on a static system too, the parameter read still happens in system and particle update.

two gotchas: set the parameters before activate so the first frame matches the slider state, and remember only user namespace parameters show up in blueprint at all. if you end up needing types stock blueprint does not expose (vector4, position, bools, arrays), the Expose Niagara Variables C++ & Blueprints plugin exposes 18 variable types across all 8 niagara namespaces with the matching getters, in blueprint and c++, so the slider to parameter wiring stays uniform whatever the type: Expose Niagara Variables C++ & Blueprints | Fab