Console Commands Every UE5 Developer Should Know


The commands we actually use every day — and how to stop guessing at what’s slowing your game down.

Every UE5 developer hits the same wall eventually: your game runs poorly and you have no idea why. Is it the GPU? CPU? That particle system you added at 2am? The answer is almost always one console command away.

The console is UE5’s most underused debugging tool. Most developers learn stat fps and stop there. That's like owning a multimeter and only checking if the battery is dead. This guide covers the commands we reach for daily at Hyperdense — the ones that actually tell you what's wrong and where to fix it.

We’re targeting UE 5.5, though most commands work across all UE5 versions. We’ll note where something is version-specific.
                         
                                     Every command in this image is real, and by the end of this guide you’ll know when to use each one. Sarah Page


Accessing the Console


Press the backtick/tilde key (` or ~) to open the console. One press gives you a single-line input bar at the bottom of the viewport. Press it again for the full output log with scrollback history.

On non-US keyboards, the key might be different — check Project Settings → Engine → Input → Console Keys to remap it.

A critical gotcha for packaged builds


The console is available in Development and DebugGame builds. In Shipping builds, it’s completely stripped from the binary — not hidden, removed. The only way to re-enable it in a shipping build is adding ALLOW_CONSOLE_IN_SHIPPING=1 to your build definitions, which requires a source engine build.

Debug view modes (wireframe, unlit, etc.) are also disabled in non-development builds. If you need them for QA, set r.ForceDebugViewModes=1 in DefaultEngine.ini under [/Script/Engine.RendererSettings].
Pro tip: Type any CVar followed by ? (e.g., r.ScreenPercentage ?) to see its current value, help text, and what last set it — project defaults, scalability, or your own override.



Stat Commands: Where Every Profiling Session Starts


The stat family of commands is your first line of defense against performance problems. Run the same command again to toggle it off, or use stat none to clear everything.


The essential trio


stat fps — Frames per second with color coding: green (≥30), yellow (20–29), red (<20). Simple but misleading on its own — it doesn't tell you why.

stat unit — The most important command. Shows Frame, Game (CPU game thread), Draw (render thread), GPU, and RHIT (RHI thread) in milliseconds. Instantly tells you whether you're CPU-bound or GPU-bound.

stat unitgraph — Adds a scrolling timeline graph of frame timings. Essential for spotting periodic spikes while you walk through a scene.
Reading stat unit: If GPU time is highest, you’re GPU-bound — look at materials, resolution, lighting. If Game is highest, it’s gameplay logic, physics, or animation. If Draw is highest, you have too many draw calls or render thread work.


GPU deep dive


stat gpu — Per-pass GPU timing breakdown: shadows, Lumen, Nanite VisBuffer, BasePass, post-processing, and more. This is where you find out what's actually eating your frame budget.

stat scenerendering — Draw calls, mesh draw commands, and visible primitives. High draw calls (>2,000) often signal a need for instancing or mesh merging.

stat rhi — RHI-level memory usage and draw primitive calls. Useful for tracking VRAM consumption.

Memory and streaming


stat memory — Memory usage by subsystem: physical, virtual, texture, mesh.

stat streaming — Texture streaming stats and pool budget. If textures look blurry, check if the pool is overcommitted.

stat llm / stat llmfull — Low Level Memory Tracker. llmfull shows the complete per-category breakdown.


Gameplay-specific stats


stat game — Game thread breakdown: ticks, AI, animation, physics, scripting. Find the expensive subsystem.

stat physics — Physics simulation cost: broadphase, narrowphase, solving.

stat anim — Animation evaluation cost per skeletal mesh.

stat particles — Niagara/Cascade particle system cost.

stat initviews — Visibility culling timing. "Visible Static Mesh Elements" is a key metric for scene complexity.


Rendering Visualization


View modes let you see your scene through different lenses — isolating lighting, material complexity, overdraw, and more. Access them via the viewport dropdown or console commands.


View modes


viewmode lit — Default rendering (Alt+4).

viewmode unlit — Base color only, no lighting (Alt+3). Great for checking material colors in isolation.

viewmode wireframe — Wireframe overlay (Alt+2). Shows geometric density.

viewmode detaillighting — Neutral gray material with normal maps — isolates lighting contribution.

viewmode shadercomplexity — Heat map of shader instruction count per pixel. Red = expensive shaders.

viewmode lightcomplexity — Heat map of overlapping light volumes. Red = too many lights affecting one spot.


ShowFlag toggles


Toggle specific rendering features on/off without changing view mode:

show collision — Visualize collision volumes in the viewport.

show bounds — Show bounding boxes on all actors.

show navigation — Display navigation mesh overlay.

ShowFlag.Fog 0 — Disable fog (useful for seeing distant geometry clearly).

ShowFlag.DynamicShadows 0 — Kill all dynamic shadows. Quick test for shadow cost.

ShowFlag.PostProcessing 0 — Disable post-processing stack entirely.


The FreezeRendering trick


FreezeRendering locks the view frustum in place while letting you fly the camera freely. This reveals exactly what the engine is culling from your original viewpoint — extremely useful for debugging occlusion issues. Run it again to unfreeze.

Nanite and Lumen Commands


UE5’s headline features have their own debugging commands. If you’re using Nanite or Lumen (and you probably are), these are essential.

Nanite


r.Nanite.Visualize.Triangles 1 — Shows rendered Nanite triangles color-coded by LOD level. Different parts of the same mesh show different colors.

r.Nanite.Visualize.Overdraw 1 — Reveals pixel overdraw including masked-out pixels. Critical for diagnosing foliage performance.

NaniteStats primary — GPU-side real-time stats overlay for the main view (requires r.ShaderPrint 1).

r.Nanite.MaxPixelsPerEdge 4 — Aggressive LOD for performance testing. Default is 1. Set to 4 for a quick "performance mode" comparison.

r.Nanite.Streaming.StreamingPoolSize — Streaming pool size in MB. Adjustable at runtime in UE 5.5 — useful for graphics settings menus.

r.Nanite 0 — Disable Nanite entirely. Compare performance with and without to verify it's actually helping.

How to capture: In the viewport top-left dropdown, go to View Mode → Nanite Visualization → Triangles. Any scene with Nanite meshes works. No need to hit Play.


Lumen


r.Lumen.DiffuseIndirect.Allow 0 — Disable Lumen GI. Quick A/B test for Lumen GI cost.

r.Lumen.Reflections.Allow 0 — Disable Lumen reflections independently.

r.Lumen.HardwareRayTracing 0 — Switch from hardware to software ray tracing (uses distance fields instead of RT cores).

r.Lumen.Visualize.CardPlacement 1 — Visualize Lumen's surface cache cards. Useful for debugging light leaking.
UE 5.5 highlight: Lumen hardware ray tracing now hits 60fps on current-gen consoles (previously limited to 30fps). MegaLights (r.MegaLights.Allow 1) is the new experimental feature for hundreds of shadow-casting dynamic lights.


Gameplay Debugging


These commands are invaluable during development — controlling time, camera, and game state on the fly.

slomo 0.1 — Slow motion at 10% speed. Great for debugging physics or animation. 1.0 = normal, 2.0 = double speed.

pause — Hard pause. Note: TAA/TSR may jitter during pause.

ToggleDebugCamera — Free-fly debug camera with material and actor info display. WASD to move, E/Q for up/down.

fov 90 — Change field of view in degrees.

god — Invincibility (requires EnableCheats 1 in packaged builds).

ghost — No-clip mode. Fly through geometry.

teleport — Move player to where the crosshair is pointing.

open MapName — Load a different map.

restartlevel — Restart the current level. Faster than stopping and starting PIE.

DisableAllScreenMessages — Hide all on-screen debug text (PrintString, etc.).


Profiling Workflow


Stat commands are great for real-time monitoring, but for deep analysis you need to capture traces.


Quick GPU frame capture


ProfileGPU (shortcut: Ctrl+Shift+,) captures a single GPU frame with a hierarchical cost breakdown. In the editor it opens the GPU Visualizer window. Disable async compute first with r.RDG.AsyncCompute 0 for undistorted timings.


Unreal Insights (the modern approach)


The legacy stat profiler is formally deprecated in UE 5.5. Unreal Insights is the replacement:

trace.start — Begin recording a trace. Saved to Saved/Profiling/.

trace.stop — Stop recording. Open the .utrace file in UnrealInsights.exe.

-trace=cpu,gpu,frame — Launch argument for automatic tracing from startup.

stat startfile / stat stopfile — Legacy capture. Still works but produces .uestats format.

New in UE 5.5


Trace.RegionBegin MyLabel / Trace.RegionEnd MyLabel — Manually tag regions in Insights traces. Also available as Blueprint nodes.

Trace.Screenshot — Capture a screenshot bookmark in your trace timeline (now has a Blueprint node too).

-trace=memory_light — Lightweight memory tracing without callstack overhead. Much less performance impact than full memory tracing.


Creating Aliases and Power Tips

Console command defaults via INI


Set default console variable values in DefaultEngine.ini under [ConsoleVariables]:
[ConsoleVariables]
r.ScreenPercentage=66.667
r.Nanite.MaxPixelsPerEdge=1

For launch-time commands, use -ExecCmds="stat fps,stat unit" on the command line. The exec <filename> command runs a batch file of commands from your Config or Saved directory — useful for custom profiling presets.


The Console Variables Editor


UE 5.5 includes a Console Variables Editor (Tools → Console Variables Editor) that lets you browse, search, edit, and create shareable presets of CVars. Much faster than typing individual commands for complex test configurations.


Finding more commands


DumpConsoleCommands — Writes every available command and CVar to the output log. Search it for keywords.

help <keyword> — Search for commands containing a keyword.

Autocomplete — Just start typing in the console. It shows matching commands with descriptions.
Why your changes don’t stick: CVars have a priority system (lowest to highest): Constructor → Scalability → GameSetting → ProjectSetting → DeviceProfile → ConsoleVariablesIni → Commandline → Code → Console (highest). Typing a command in the console overrides everything — which is why your in-editor changes don’t always persist after restart.


Quick Reference Cheat Sheet


Copy this list. Keep it next to your monitor. Seriously.

“My game is slow” — first response

  • stat unit → CPU or GPU bound?
  • stat gpu → Which GPU pass is most expensive?
  • stat scenerendering → Too many draw calls?
  • ProfileGPU → Deep single-frame GPU breakdown

“Something looks wrong” — visual debugging

  • viewmode unlit → Is it a lighting issue?
  • viewmode shadercomplexity → Expensive shaders?
  • show collision → Collision volumes correct?
  • FreezeRendering → What's being culled?

“I need to test quickly” — gameplay shortcuts

  • slomo 0.1 → Slow-mo for animation/physics debugging
  • ToggleDebugCamera → Free-fly camera with actor info
  • ghost → Fly through walls
  • restartlevel → Quick reload without stopping PIE

Where to Go from Here


Console commands are a rabbit hole — there are thousands of CVars in UE5, and every subsystem adds more. The commands in this guide cover probably 80% of what you’ll need day to day. For the other 20%, DumpConsoleCommands and the autocomplete system will get you there.

A few related resources worth checking out: Epic’s official Stat Commands documentation, the Unreal Insights user guide for deep profiling, and our upcoming guide on Nanite performance profiling for indie developers where we put many of these commands to practical use.




Linktr.ee  INSTAGRAM