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.

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=1For 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 debuggingToggleDebugCamera→ Free-fly camera with actor infoghost→ Fly through wallsrestartlevel→ 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.