I’ve been working on a realtime ray tracing game with Unreal 4.24 and was doing some testing with my lighting and particle systems. I kept getting slower and slower frame rates the longer I had my test scene open and for the longest time could not figure out what was happening. I eventually discovered that the data being pushed to OcclusionSubmittedFence Wait
under stat SceneRendering
was the only observable data that I could see being effected in the scene.
After much troubleshooting I finally figured out that the problem was with how Ray Tracing and Niagara particle systems are currently working with each other. If I disabled my Niagara systems the frame rate loss would disappear. Also if I did the opposite and disabled ray tracing once again the issue was resolved. Only when both were active did I find this issue occurring. Unfortunately after scouring the web and Unreal’s documentation I couldn’t find any information related to what data was relevant to OcclusionSubmittedFence Wait
.
I tried troubleshooting everything I could within the Niagara particle systems I had setup. I tried reducing the particle count down (even to the point that each system was only outputting a few particles) but the issue persisted. I had about 10 systems running in loop in my scene, and each of them had about 5 FX applied to them (big flame, medium embers, small embers, dust, heat dispersion). After playing with numerous settings in and outside of the particles systems, their materials, and the lights I finally decided to recreate the particles using the Cascade particle system.
BINGO. After reverting back to the older cascade particle system my issue was fixed. I had setup the system with the exact same number of particles with the same behaviors, but no more performance drop over time. I wanted to share this here in case anyone else ran into this issue and started beating their head against the wall as I have been over this past week.
Conclusion: Whatever information is being sent between the Niagara particle systems and the renderer when using ray tracing causes a slow back of data to the OcclusionSubmittedFence Wait
channel. The more particle systems and particles, the faster the backup occurs.
I’ve included some screen shots of a test scene I setup to illustrate this point. I left both systems run for an hour in a scene with ray tracing enabled, and by the end of that hour the Niagara systems caused the FPS of the scene to drop nearly 50%.