Tutorial — Performance Profiling
Augmented Traveler local tutorial. Back to Unreal — Tutorials · headsets: Tutorial — OpenXR Headset Builds · kiosk look: Tutorial — Kiosk Lighting for a Life-Size MetaHuman
How to find out why a build is slow and fix the right thing. A figure that stutters breaks the illusion. On a headset it can make visitors feel sick.
Draft. Record real numbers from the first kiosk and Quest builds in section 6.
1. Budgets
| Surface | Target | Frame budget |
|---|---|---|
| Kiosk | 60 fps (or locked 30 if agreed) | 16.7 ms (33.3 ms) |
| Quest 3 | 72 fps minimum (Meta requires 72/80/90/96/100/120 Hz for interactive apps) | 13.9 ms at 72; 11.1 ms at 90 |
| Other standalone headsets | 72–90 fps | 11.1–13.9 ms |
| Pixel Streaming server | 60 fps at the stream resolution | 16.7 ms |
Meta store check: apps must hold their rate. Meta asks for at least 45 minutes of testing with OVR Metrics Tool. We use the same test for venue builds.
2. First look: stat commands (any build with a console)
| Command | Tells you |
|---|---|
stat fps | Frame rate |
stat unit | Frame, Game (CPU gameplay), Draw (CPU render), GPU, RHI times; in 5.8 also VRAM. The largest number is your bottleneck |
stat unitgraph | The same, as a graph over time (spikes) |
stat gpu | GPU time per pass (Lumen, shadows, hair, translucency…) |
ProfileGPU (Ctrl+Shift+Comma) | The GPU Visualizer: a one-frame breakdown |
stat scenerendering, stat rhi | Draw calls, primitives |
stat startfile / stat stopfile | Record stats to a file |
Rule: find whether CPU (Game or Draw) or GPU is the limit before changing anything.
3. Deep look: Unreal Insights
- Launch the build with tracing, for example
-trace=default,gpu,memory. The default channels include Cpu, Gpu, Frame, Log and Bookmark. - Open Unreal Insights and load the trace, or connect live.
- Use the Timing view to find slow frames and see what ran on each thread.
- Mark program moments with
Trace.Bookmark(for example "Monologue start", "Answer start") so you can find the Q&A spikes. - 5.8 adds annotations and UObject counters. Memory Insights and LLM (
-llm) find memory growth over a long kiosk day.
4. Headset tools (Quest)
| Tool | Use |
|---|---|
| OVR Metrics Tool | On-device overlay: fps, CPU/GPU level, GPU utilisation; the 45-minute test |
| Meta Quest Developer Hub | Logs, performance analyser, device management |
| RenderDoc Meta Fork | GPU frame capture for Quest (tile-based rendering details) |
| Unreal Insights on Quest | Meta's guide for tracing UE5 on device |
| Android GPU Inspector | Adreno GPU profiling; Quest support not explicitly listed |
Meta's method: decide CPU- or GPU-bound, then capture. xr.SecondaryScreenPercentage.HMDRenderTarget reduces the pixel load.
5. Where MetaHumans cost the most, and what to do
| Cost | Fix |
|---|---|
| Strand hair | Cards on headsets (strands only at LOD0–1; cards at LOD2–5); groom LODs (Grooms — Tutorials) |
| Face rig (RigLogic) | 5.8 lets you set RigLogic precision and backend per platform (FP16 on mobile) and restores rig state in cooked builds |
| LODs | MetaHumans have 8 LODs. Mobile starts at LOD3 with 2K textures and cards; head vertices go from about 24,000 (LOD0) to 130 (LOD7). Force LODs to test |
| Cloth simulation | Skinned-only garments on headsets (Tutorial — Period Layers, Hoops and Skirts) |
| Live lip sync | GPU-heavy: measure the MetaHuman audio source versus Audio2Face on the target (Tutorial — Authoring a Q&A Experience with Ambient Idle) |
| Lighting | Kiosk: fewer shadowed lights, Lumen Lite, TSR percentage. Headsets: baked only (Tutorial — Place Kits for Historic Interiors) |
| Shader stutter | Quest: 5.8 disables the chunked PSO cache on Quest; collect PSOs during QA runs to reduce hitches |
6. Our measurements (fill in)
| Build | Date | Scene | fps | Game ms | Draw ms | GPU ms | Bottleneck | Notes |
|---|---|---|---|---|---|---|---|---|
| Kiosk | Mitchell monologue | |||||||
| Kiosk | Mitchell Q&A | |||||||
| Quest 3 | Vestal House room |
7. Check before any venue build
Sources
- Epic, Trace quick start (Unreal Insights): https://dev.epicgames.com/documentation/unreal-engine/trace-quick-start-guide-in-unreal-engine
- Epic, Memory Insights: https://dev.epicgames.com/documentation/unreal-engine/memory-insights-in-unreal-engine
- Epic, Low-Level Memory Tracker: https://dev.epicgames.com/documentation/en-us/unreal-engine/using-the-low-level-memory-tracker-in-unreal-engine
- Epic, Stat commands: https://dev.epicgames.com/documentation/en-us/unreal-engine/stat-commands-in-unreal-engine
- Tom Looman, UE 5.8 performance highlights: https://tomlooman.com/unreal-engine-5-8-performance-highlights/
- Meta, VRC.Quest.Performance.1: https://developers.meta.com/horizon/resources/vrc-quest-performance-1/
- Meta, Performance optimisation for mobile (Unreal): https://developers.meta.com/horizon/documentation/unreal/po-perf-opt-mobile/
- Meta, OVR Metrics Tool: https://developers.meta.com/horizon/documentation/unreal/ts-ovrmetricstool/
- Meta, MQDH logs and metrics: https://developers.meta.com/horizon/documentation/unreal/ts-mqdh-logs-metrics/
- Meta, RenderDoc for Quest: https://developers.meta.com/horizon/documentation/native/android/ts-renderdoc-for-oculus/
- Meta, Unreal Insights on Quest: https://developers.meta.com/horizon/documentation/unreal/ts-unreal-insights-ue5/
- Android GPU Inspector: https://developer.android.com/agi
- Epic, MetaHuman platform support and LOD specifications: https://dev.epicgames.com/documentation/metahuman/platform-support-and-lod-specifications-for-metahumans
- Epic, Controlling MetaHuman LODs: https://dev.epicgames.com/documentation/metahuman/controlling-metahuman-levels-of-detail-lods-in-unreal-engine
- Epic, MetaHuman 5.8 release notes (RigLogic per platform): https://dev.epicgames.com/documentation/metahuman/metahuman-5-8-release-notes-in-unreal-engine
- Full list: Sources — 2026-09-20