Unreal Engine provides many features to visualize and track performance, we will try to cover the most relevant tracking features that answer our needs.
(Note : this document doesn't cover how to use the session frontend tool but explain how to use real time features that are more efficient and accessible for everyone)
Display console command
First thing first, in order to open the console you need to press the (~) button, you can also put a custom button by adding it in the Project Setting → Input → Console
The command line can be used in : editor / PIE(Play In Editor) / Package Development or Debug (Note : it will not work when in Shipping package)
Now that we have our console, let's take a look at the most important command line that we can use and what kind of information is displayed
Profiling Command List
· Frame rate : FPS
· Frame time to be rendered in milliseconde
Stat Unit and stat Unitgraph
· Frame : Milliseconde
· Game : CPU Mostly related to code, Blueprint etc
· Draw : How much time it took for CPU to prepare data for GPU
· GPU : Rendering in millisecond
It will display the memory taken by different parts of the game
Displays statistics related to the rendering of the scene, the most relevant ones would be :
InitViews: To do with the occlusion of the scene. While occluding the scene the hardware has to do quite a large number of checks which meshes you can and cannot see. This can end up taking a significant amount of performance.
Base Pass Drawing and StaticDrawList/Dynamic Primitive Drawing: The rendering of the meshes and dynamic meshes within view. If Dynamic Primitive Drawing would be very high, you would know that it is an InterpActor that is most likely causing a problem somewhere.
Translucency Drawing: The time spent on drawing translucent surfaces. A very high number here could indicate a problem with particles for example.
Display GPU stats related to the current frame
Note : It may happen with certain graphic card that those stat won't show up if that's the case, to solve the issue you need to run the following commmands
Displays rendering statistics
Displays information related to the world such actor tick etc
Performance tips and helpers
Changing screen resolution
r.ScreenPercentage value (Ex.50): This command will reduce the screen resolution by the percentage amount you've set Ex. 50% will reduce your resolution to half
r.SetRes value (Ex. 1280x720) : The command will set the screen resolution to the desired one.
The usage of those commands can be useful when we want to investigate what would be causing a drop of framerate, or to test a scene with different settings
Potential issues and solution
Pixel bound problems : Translucent = Multiple layers of polygons are shaded, big cost, means it will renderer every object while Opaque is cheap because only the closest triangle is drawn Quad overdraw, let says a quad means 4 pixels (2 x 2) : operation are done in full quad and even bigger tiles, not on singel pixels, that why small polygon was GPU time
Triangle count is rarely the problem, from the moment that polygon are big enough and fit perfectly the shape
Vertex bound : Can be a problem when it comes to tesselation, and also affect the shadow casting
Memory related : Too many texture sample will use a lot of bandwith which represent the transfer of data from memory to the object that perform the calculation, this can be solved by compresion or Texture packing (put texture in different chanel of a single RGB texture)
Editor optimization visualizer
Actually it's one of the most powerful feature for scene optimization, it allows you to detect the potential performance bottleneck by filtering element such as light, quad, shader etc.
That's all folks !