Language:
Page Info
Tags:
Engine Version:

Core Optimization Concepts for Particle Systems

Choose your OS:

Identifying GPU, Render Thread, and Game Thread issues

There are several features of UE4 in place which allow effects artists to trouble shoot performance issues. First off, identifying where your effects are creating bottlenecks will go a long way towards optimizing the correct issue, thereby retaining visual integrity/quality.

One way to monitor for issues while playing through levels is to pull up the STAT UNIT debug overlay.

  1. Launch the game.

  2. Press the ` key and enter stat unit into the Console.

    statunit.png

The stat unit command displays the time spent for the current frame on the Game Thread, the time spent for the Render thread, and the time spent for the GPU. It is possible to monitor the different times updated by stat unit to see areas of the level with performance issues.

Keep an eye on the different thread times. If your target framerate is 30fps, all threads should remain below 33.3ms.

If any thread goes over the 33ms and your particles are a suspected culprit, you can use the STAT PARTICLES command to gauge particle times on the different threads.

STAT PARTICLES lists out multiple statistics relative to Game Thread and Render Thread. Pay attention to Draw Calls (Render Thread) and Tick Time (Game Thread).

Targeting Game Thread related issues

Once you have determined you have a Game Thread issue, use the STAT PARTICLES command to verify your findings.

This stat gives quite a bit of information so read over the descriptions on the linked page to help you determine where your costs are highest. Keep an eye on Particle Tick Time and your Particle Counts.

It is important to remember that a particle system is the sum of the components (emitters/modules) which make up the effect. The more unique emitters and modules in your system, and the more of those systems in your scene, the higher the Game Thread cost.

Once you have identified Game Thread systems which are offenders, there are several paths to take.

  • Reduce particle emission counts on the systems being used.

  • Reduce the number of particle systems in the scene.

  • Reduce lifetime (the amount of time particle evaluation is calculated) for some of your emitters.

  • Check expensive calculations such as collision etc. to ensure the settings you are using are optimal, reduce collisions or the amount of particles/meshes colliding.

  • Remove expensive calculations such as collision, dynamic parameters, etc. if necessary.

  • Replace Game Thread calculated particle effects with Static Mesh effects if possible.

  • Set Fixed Bounds on your particle system so you do not calculate them each frame.

  • Increase LodDistanceCheckTime so you are checking LODs less often (for looping effects with LODMethod set to automatic).

Tags