As I understand Niagara, current stages are:
System (Spawn/Update) - CPU
Emitter (Spawn/Update) - CPU
Particle (Spawn/Update) - CPU/GPU
Simulation Stage(s) - CPU/GPU
I have been looking to solve problems with desired effects that would be so much easier if I could have access to the GPU in something like an “execute once per frame no matter how many particles” stage.
Something like a “Particle Common” stage, below Emitter and above Particle Spawn.
The simplest problem this would solve for me is to be able set/read a common variable common for all particles, and be able to loop through a Particle Attribute Reader (PAR) once per frame. The Emitter update stage refuses to give me valid GPU particle data using PAR.
Currently I’m creating a “common” variable in the Particle stage (which multiplies my variable memory usage by the number of spawned particles), and using nested loops to check with every other particle on whether or not this “common” variable is set.
So the stages would be something like:
System (Spawn/Update) - CPU
Emitter (Spawn/Update) - CPU
Particle Common - CPU/GPU (execute once per frame)
Particle (Spawn/Update) - CPU/GPU
Simulation Stage(s) - CPU/GPU