Skip to content
The Technical ArtistArt. Code. Pipelines. Games.
perf 01
performance

Profiling & Finding Bottlenecks

Workingguide~2 min read

First find where the frame is actually stuck: CPU, Render Thread, or GPU. Then pick the right tool instead of guessing.

On this page Honest Conditions Stat Unit GPU Profiling Unreal Insights Memory

1.1Profile Under Honest Conditions

Placeholder with instructions to screenshot the stat unit overlay
placeholder - stat unit in a real level

Editor-viewport measurements include work that may not be present in the game. Before trusting any measurement: disable VSync and frame limits (t.MaxFPS 0, VSync off), build lighting, profile in Standalone or a packaged Test build (Development builds carry overhead; Shipping hides the stats), test a repeatable camera path, and let shaders finish compiling first.

1.2Stat Unit - The Triage Tool

Profiling decision tree: compare Game, Draw and GPU timings, investigate the relevant work, then re-measure one change.
fig 08 - timings guide investigation; re-measure after one change
Console
stat unit -> Frame / Game / Draw / GPU times
stat gpu -> per-pass GPU costs
stat game -> game thread breakdown
stat scenerendering -> draw calls, render thread detail
stat streaming -> texture pool pressure
memreport -full -> memory snapshot to log

Read stat unit like this: Frame is total; whichever of Game (game thread - gameplay, BP, animation), Draw (render thread - draw call submission), or GPU is closest to Frame is your bottleneck. The other numbers are effectively waiting.

Bound onTypical causesGo to
GameTicks, Blueprint logic, animation, physics, spawningCPU & Blueprints
DrawToo many draw calls / components / dynamic shadowsMeshes & LODs
GPUShaders, overdraw, lighting, shadows, resolution, postMaterials / Lighting

1.3Inside The GPU Frame

stat gpu (or ProfileGPU / Ctrl+Shift+,) breaks the GPU frame into passes: BasePass (opaque materials), Shadow Depths, Lumen, Nanite, Translucency, Post Processing. Start with the largest relevant pass, then inspect what contributes to it. For pixel-level forensics, capture a frame in RenderDoc or PIX.

1.4Unreal Insights - Inspect The Frame Timeline

Placeholder with instructions to screenshot an Unreal Insights timeline
Screenshot placeholder: inspect the frame timeline in Unreal Insights

For anything beyond triage, Unreal Insights records a full timeline trace (-trace=default on launch, or the Trace bar in editor). It answers the questions stat overlays can't: what exactly ran this frame, in what order, on which thread, and how long each scope took. Hitches that vanish when you look at averages are found here.

1.5Memory Is Performance Too

Placeholder with instructions to screenshot a Size Map
Screenshot placeholder: inspect asset dependencies in Size Map

stat streaming shows texture pool pressure; memreport -full dumps a full breakdown; the Size Map shows per-asset footprints. Blurry textures usually mean the streaming pool is over budget - fix texture sizes before raising the pool. Reference chains (that innocent prop Blueprint hard-referencing half the game) are found with the Reference Viewer - or the Asset Health Dashboard.

Habit

Save a baseline trace and stat screenshot before any optimisation pass. Use the same scenario for the next capture so the results can be compared.