Download

Seeded Particle System issue

I am working with seeded particle systems (cpu and hopefully gpu next) since I need them to synchronize across different renderers/screens.

I am using the 4.17.2 engine source and have implemented a frame-level synchronization solution for inputs and application time across the renderers.

However, I am having an issue with synchronizing the particle systems. I have been able to use a seeded version of the emitter parameters for cpu particles and they seem to work fine on startup. The particles are emitted correctly and transition across screen/renderer boundaries. However, when I rotate the view along the z-axis the synchronization goes off. This rotation causes the emitter to move across different screens/projections.

This behavior is actually reproducible in the editor. From the attached image you can see I created 2 instances of the particle system (left/right) that use the same seeds for lifetime, init velocity, init size, init location, init rotation, init rotation rate and world offset. At this point I’m just trying to see if all the parameters sync/seed correctly. The example particle system is also simple so I can actually see what is happening.

The top image shows that the 2 particle systems are synchronized. As a side note, this is a perspective view so it might look slightly different from the captured viewpoint. If I rotate the view 360 degrees then they are no longer in sync (see bottom image). My gut tells me that it has to do with the particle system being culled out and the random behavior is affected.

I tried to set the Occlusion Bounds Method to “None” and also “Custom Bounds” with a large volume. However, this didn’t solve the problem.

I have also tried to seed the Instanced parameter that I am using to seed the “Random Seed Info” using blueprint, but this didn’t work either. My thoughts were to update the seed every frame so that the generators pulled the same values. However, I have a feeling that the emitter moving off screen and being culled is causing the issue.

I would appreciate any insights into the behavior/rendering of the particle systems and what I can do to get this to work.

Thanks!

It’s definitely related to view frustum culling (and presumably the randomness of particle systems). Just tried “Use Fixed Relative Bounding” with very large min/max bounds and I was able to rotate the camera around and have them remain synched. However, this isn’t a viable solution for this especially if you navigate around the environment. I would like to see if I can keep the particle systems synchronized w/o forcing very large bounds.

Well, for anyone else facing this issue. Particle systems become “Inactive” after not being rendered for a given time frame. This can be adjusted using “Seconds Before Inactive.” My initial workaround will be to set this value to a large number. If anyone has a way to keep particle systems from being automatically deactivated I would like to know. I did try the “Auto Deactivate” under the “Performance” section, but this didn’t fix this issue.