I’m dealing with a relatively minor annoyance in working with VFX Graphs in my scenes. Specifically, even when a VFX Graph object is sitting there “doing nothing”, it still appears to use a lot of GPU resources, due to the way the Culling work on VFX Graph objects.
First, I’ll mention I feel I generally need to set most of my VFX graphs Culling Flags to “Always Recompute Bounds and Simulate”. This seems to be the only reasonable choice for any VFX graph that has a clearly defined start/end, like a single explosion. If I choose one of the other Culling Flags, the result will be that an effect will be paused if I look away from it, and it will resume when I look at it again. Consider an explosion occurring 100 meters away from the player. It’s a big burst of fire that takes 2-3 seconds to complete. If the explosion begins, and I immediately turn my back on it, I can wait 10 seconds, then look at it again, and the effect will resume where it left off. That’s really bad behavior, and the only way I can avoid it is by setting Culling Flags to “Always Recompute Bounds and Simulate”.
The issue is, for that same explosion, the effect will generally occur in distinct “bursts”. Most of the time, a VFX object will be doing “nothing”. There will be no spawned particles, and effectively nothing to simulate. Here’s an example of this kind of graph:
However, it seems that this graph will use quite a bit of GPU resources if it’s not disabled. In my scene, with no Game/Scene views being displayed, I’ll see my GPU usage sit at around 0%. But if I enable this VFX Graph, the GPU usage will climb to 10% even though A) The game isn’t actually being rendered in any Unity windows at the moment, and B) The VFX Object itself has no particles in it. It’s not disabled, but it’s “idle”, in that it only spawns particles when an event is called, and that event hasn’t been called.
The workaround to this performance hit is to ensure all of my VFX objects are disabled if they’re not currently displaying anything visually, but that’s potentially really difficult to determine.
It seems to me that the “Always Recompute Bounds and Simulate” should be smart enough to realize it has no current particles, and that there’s nothing to compute at the moment. Or, that if a VFX Graph has its Culling Flags set to only simulate when visible, it shouldn’t pause the Time of the graph when it’s not visible, so that when I do look at it again, it catches up with where the simulation should be. But I guess I can see how that’s kind of tricky to determine if you’re not computing ever step of the simulation…
TLDR: What’s the correct approach to take with “burst” VFX Graph objects, so they’re not sitting there sucking up GPU resources the whole time they’re idle?

