# 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 1. Launch the build with tracing, for example `-trace=default,gpu,memory`. The default channels include Cpu, Gpu, Frame, Log and Bookmark. 2. Open **Unreal Insights** and load the trace, or connect live. 3. Use the **Timing view** to find slow frames and see what ran on each thread. 4. **Mark program moments** with `Trace.Bookmark` (for example "Monologue start", "Answer start") so you can find the Q&A spikes. 5. 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 - [ ] Holds target fps through a full program cycle (soak test ≥ 45 min on Quest; a full day on the kiosk) - [ ] No hitches over 50 ms in Insights during monologue-to-Q&A transitions - [ ] Memory flat over a long run (no leak) - [ ] Numbers recorded in section 6 ## 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]]