Niagara Effect Type Cull reaction for environment looping systems

Hello Niagara team!

What would be an potential effect type setup for looping environment effects in general?

When trying to set up some effect type for ours, I am currently struggling with the Cull reaction.

I set it up to use the Significance Handler Distance but I noticed that I would basically have to choose between Pause/Asleep and Kill for the culling response. Kill doesn’t seem appropriate for environment looping systems and Asleep would happen even with Visibility Culling (Max Time without render) which would make the system to reset every time we turn around again and look at it. (Max Time Without Render was set to 5 seconds in Epic Scalability).

The Paused culling reaction helps to avoid this behavior. That said, since the cull reaction also applies with the Max Distance it makes the system to freeze when the value has been reached. Also noticed that the update Frequency needs to be Continuous to avoid seeing the particles frozen in space. We could potentially mitigate frozen at distance issue by using the LODDistanceFraction and fading the particles based on distance.

Is there a way that we would pause the system when Visibility Culled but still making the system asleep when the max distance has been reached?

Are you using the Asleep and generally try to mitigate the issue with higher update frequencies and bursting particles?

And also, concerning the update Frequency, do we have any control on the default values, Medium = every 0.5 seconds, High = every 0.25 seconds etc? It seems like then the next step is Continuous which would be 60 times a seconds. It seems like we can override the values for Low/Medium/High using this command: fx.NiagaraScalabilityUpdateTime_Low/Medium/High probably via an ini file right?

Hi Gabriel,

The issues you raise here are definitely on my list to improve in the near future.

Currently we tend to use Asleep and just set the times and distances etc to hide the worst of the restart visual issue. In some cases we can use the Cull Proxy feature also to keep some visual element in place after being culled.

My plans for this in future are to allow different cull reactions for each culling reason so that you can pause when vis culled but put to sleep when culled by distance etc.

I also hope that we can use a fast warm-up (using Sim Caches) to have systems restart faster without a visual lag.

Yes you can tweak the UpdateFrequency times using those CVars.

Thanks,

Simon

Hello Simon! :slight_smile: Thanks for your feedback on this.

It seems like eventually supporting different culling reactions could be very interesting yes. I would by example see some interesting benefits of using Pause with the Visibility Culling and Asleep for the distance and max instances Culling contexts.

For now, using the pause Culling Reaction seems tricky since it’s also happening when the max number of instances has been reached.

Could you please elaborate on the Cull Proxy feature? Could I find some documentation somewhere about it?

Thanks in advance for your attention.

Gabriel

I believe some improved docs on scalability are in the works which should include more info on Cull Proxies.

Basically they are a way to keep some visual element of a system in place when a system has been culled by scalability.

We run a single instance of the system and then render this in every culled system location (up to a certain limit).

So you may have 50 visible instances of the effect off in the distance but there will be only one active simulation running.

This ofc helps perf but the repetition of the effect can be apparent.

I hope to extend this feature with more options and functionality in the future.

Hello Simon, we’re continuing to look at the Cull Proxy feature and we’re still having some difficulties getting this to work. In the effect type, we have access to the Cull Proxy mode and we can set it to Instanced Rendered. We can also set the Max System Instances.

Just setting Instanced Rendered and leaving the Max System Proxies to 32 doesn’t seem to do anything.

We are guessing some steps are missing, would it be possible to describe how to set up cull proxies please?

Thanks in advance!

Hi,

I believe you also need to enable which renderers inside your Niagara system should be included when rendering the cull proxies.

There is a setting on all renderers called “Allow in Cull Proxies” that should be checked on renderers you want to include. Usually just the largest/most important emitter(s).

Lmk if that doesn’t fix your issue.

Okay thanks for the clarification. We were able to test the proxy properly now.

The feature seems interesting especially when systems are culled by the Max Distance. In the case of Max Time Without Renderand Max System Instances culling, with systems closer to the camera, it can produce some important (hardly unavoidable) popping when the system is replaced by a proxy. It seems like as previously discussed being able to set different culling reactions based on the culling context, like supporting the Pause with Max Time Without Render could still be quite interesting in the future.

Thanks again for all the information.

No problem.

Yes I agree and I have some tentative plans to look into that in the near future.

It would certainly improve this and other culling cases.

LMK if you have any further issues.

Thanks,

Simon