The 3D Handbook
Topic

Performance and profiling

How to measure where a frame's time goes, tell a CPU-bound scene from a GPU-bound one, and use Unreal's stat commands and Insights, Unity's Profiler and Frame Debugger, RenderDoc and PIX to find what to fix.

performanceoptimisationproductiontools

Profiling is measuring where the time in each frame actually goes, so that you fix the real problem instead of the one you guessed. Epic's documentation frames the first question plainly: developers "want to determine if a bottleneck (negative performance impact) exists in the Game thread, in the Draw (rendering) thread, or on the GPU" (Unreal Engine 5.8 Documentation: Stat Commands in Unreal Engine).

For an artist, the distinction matters because each bottleneck needs a different fix. Fewer triangles will not help a scene that is slow because of too many draw calls, and merging meshes will not help a scene that is slow because foliage is shading the same pixels six times (see overdraw).

#Frame budgets

A frame budget is the time you have to produce one image. The arithmetic is simple: at 60 frames per second each frame gets 1000 ÷ 60 ≈ 16.7 ms; at 30 fps, 33.3 ms. On VR headsets the target is higher: Meta's Quest guidance measures against 72 frames per second (Meta Horizon Developers: WebXR Performance Optimization Workflow), which leaves about 13.9 ms a frame.

Budgets are also set in counts, not only milliseconds. Meta recommends under 100 draw calls per frame on Quest 2 and under 200 on Quest 3 (Meta Horizon Developers: Device Optimization Comparison). Budgets are then broken down per asset: see polygon and triangle budgets for published per-object triangle caps and texel density for texture rules. Texture memory is a budget of its own; Hugh Chew's video on texture performance covers VRAM, compression, sampling and draw calls (YouTube: Your Textures Are Killing Performance, Here's…). See polygon and triangle budgets and texel density.

#CPU-bound or GPU-bound

Modern engines split the work. In Unreal, stat unit shows four main numbers (Unreal Engine 5.8 Documentation: Stat Commands in Unreal Engine):

  • Frame: "the total amount of time spent generating one frame of the game."
  • Game: the game thread. "If Frame time is close to Game time," the game thread is the bottleneck.
  • Draw: the rendering thread, which prepares work for the GPU. "If Frame time is close to Draw time," the rendering thread is the bottleneck.
  • GPU: "how long the video card takes to render the scene."

Whichever number sits closest to Frame is where the time goes (Unreal Engine 5.8 Documentation: Stat Commands in Unreal Engine). Epic advises reading these in a non-debug build, not a debug one (Unreal Engine 5.8 Documentation: Stat Commands in Unreal Engine).

What each result usually means for art:

Bottleneck Typical art-side causes Where to look next
Game thread Usually gameplay code rather than art Ask a programmer; Unreal Insights
Draw / render thread Many objects, many materials, many draw calls; the CPU pays for each draw regardless of how simple the object is (Meta Horizon Developers) draw calls, instancing, hierarchical LOD
GPU Expensive materials, overdraw from translucency and foliage, too many dynamic lights, high resolution Shader complexity views, RenderDoc or PIX
A flow chart. Measure the frame with stat unit or the Profiler. Branch: which number is closest to frame time? Game thread leads to gameplay code. Render thread leads to draw calls, materials per mesh, instancing. GPU leads to view modes and a GPU capture. All branches lead to change one thing, then measure again, with an arrow looping back to the start.
The profiling loop. Measure, find the bottleneck, change one thing, measure again. Optimising the wrong branch takes time without improving the frame.Diagram by the handbook author

#Tools in Unreal Engine

Stat commands. Typed into the console. stat fps "Displays Frames per Second (FPS) counter", stat gpu "Displays GPU statistics for the frame", and Epic calls stat scenerendering "a good starting point to find general areas of slow performance in the rendering process" (Unreal Engine 5.8 Documentation: Stat Commands in Unreal Engine).

View modes. The Shader Complexity view colours pixels from green ("very inexpensive") to red ("expensive"), with "pink and white" marking a large jump to "very expensive" (Unreal Engine documentation: Viewport Modes in Unreal Engine). Epic notes that small white areas can be tolerated, but a screen mostly covered in bright red or white is a problem (Unreal Engine documentation: Viewport Modes in Unreal Engine). Light Complexity "shows the number of non-static lights affecting your geometry" (Unreal Engine documentation: Viewport Modes in Unreal Engine).

Unreal Insights. For deeper work, Insights is "a telemetry capture and analysis suite that can capture events from your project at high data rates" (Unreal Engine 5.8 Documentation: Unreal Insights in Unreal Engine). Its Timing Insights window "collects performance data", and you start a trace from the Trace/Insights widget in the editor's bottom toolbar (Unreal Engine 5.8 Documentation: Unreal Insights in Unreal Engine). Artists rarely need it day to day, but it is where a technical artist will show you why your level hitches.

Nanite and draw calls. Nanite geometry "bypasses traditional draw calls" (Unreal Engine Documentation: Nanite Virtualized Geometry), but Epic's Fortnite team still found that "masked materials in Nanite incur a significant cost during base pass shading" (Unreal Engine tech blog: Bringing Nanite to Fortnite Battle Royale in…). Profile Nanite scenes for shading cost, not only geometry.

#Tools in Unity

The Profiler. "The Unity Profiler is a tool you can use to get performance information about your application" (Unity Manual: Unity Profiler). You can connect it to devices on your network or attached to your computer, to test "how your application runs on your intended release platform", or run it in the editor "to get an overview of resource allocation" (Unity Manual: Unity Profiler).

The Frame Debugger lets you "pause the application on a particular frame and display the list of rendering events that constitute the frame", then "step through each event and display the graphical state of the scene at that point" (Unity Manual: Introduction to the Frame Debugger). It is the quickest way to see what is drawn, in which order, and how many separate events a single prop produces.

Scene view draw modes. The Overdraw mode renders objects "as transparent silhouettes", and "the transparent colors accumulate, making it easy to spot places where one object is drawn over another" (Unity Manual: Scene view View Options toolbar). The Mipmaps mode colour-codes textures: red means a texture "is larger than necessary" at the current distance and resolution (Unity Manual: Scene view View Options toolbar).

#External GPU tools

RenderDoc is an open-source frame debugger: "RenderDoc is 100% open source", and it supports "Windows, Linux, and Android for capture and replay out of the box" (renderdoc.org: RenderDoc). You launch your game through it and press the capture key, "F12 or Print Screen"; the next frame is saved (RenderDoc documentation: Quick Start). The Event Browser is "the primary method of stepping through the frame", the Texture Viewer inspects "textures and render targets", and the Mesh Viewer lets you "inspect the geometry data as it passes through the pipeline" (RenderDoc documentation: Quick Start).

PIX is Microsoft's tool: "a performance tuning and debugging tool for Windows and Xbox game developers using DirectX 12" (PIX on Windows blog: Introduction - PIX on Windows). It offers "GPU captures for debugging and analyzing the performance of Direct3D 12 graphics rendering" and "timing captures for understanding the performance and threading of all CPU and GPU work" (PIX on Windows blog: Introduction - PIX on Windows).

#Common mistakes

#In different tools

Engine or tool First look Deeper look
Unreal Engine stat unit, stat fps, Shader Complexity view (Unreal Engine 5.8 Documentation; Unreal Engine documentation) stat gpu, stat scenerendering, Unreal Insights (Unreal Engine 5.8 Documentation)
Unity Profiler connected to the target device; Overdraw and Mipmaps draw modes (Unity Manual; Unity Manual) Frame Debugger (Unity Manual)
Any engine on Windows, Linux, Android — RenderDoc frame capture (renderdoc.org)
DirectX 12 on Windows and Xbox — PIX GPU and timing captures (PIX on Windows blog)
A 35-minute look at the texture side of performance, from VRAM and compression to sampling and draw calls, with an Unreal Engine 5 compression demo at 25:27. Watch on YouTube

#Further reading and watching

References

  1. Epic Games · Stat Commands in Unreal Engine · Unreal Engine 5.8 Documentation, 2026 · docs · accessed 2026-10-21
  2. Meta · WebXR Performance Optimization Workflow · Meta Horizon Developers, 2026 · docs · accessed 2026-10-20
  3. Meta · Device Optimization Comparison · Meta Horizon Developers, 2026 · docs · accessed 2026-10-20
  4. Hugh Chew · Your Textures Are Killing Performance, Here's Why · YouTube, 2026 · video · accessed 2026-10-21
  5. Epic Games · Viewport Modes in Unreal Engine · Unreal Engine documentation · docs · accessed 2026-10-21
  6. Epic Games · Unreal Insights in Unreal Engine · Unreal Engine 5.8 Documentation, 2026 · docs · accessed 2026-10-21
  7. Epic Games · Nanite Virtualized Geometry · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-20
  8. Epic Games · Bringing Nanite to Fortnite Battle Royale in Chapter 4 · Unreal Engine tech blog · article · accessed 2026-10-20
  9. Unity Technologies · Unity Profiler · Unity Manual, 2026 · docs · accessed 2026-10-21
  10. Unity Technologies · Introduction to the Frame Debugger · Unity Manual, 2026 · docs · accessed 2026-10-21
  11. Unity Technologies · Scene view View Options toolbar (Draw modes) · Unity Manual, 2026 · docs · accessed 2026-10-21
  12. RenderDoc contributors · RenderDoc · renderdoc.org, 2026 · tool · accessed 2026-10-21
  13. Baldur Karlsson and RenderDoc contributors · Quick Start · RenderDoc documentation, 2026 · docs · accessed 2026-10-21
  14. Microsoft · Introduction - PIX on Windows · PIX on Windows blog, 2026 · docs · accessed 2026-10-21

Last updated 2026-10-22