Vývoj VR v Unity a Unreal
Vývoj aplikací pro VR
Vývoj aplikací pro virtuální realitu (VR) v enginích Unity a Unreal Engine vyžaduje kombinaci grafické optimalizace, ergonomie interakcí a důsledného řízení latence. Na rozdíl od klasických 3D aplikací je ve VR kritická plynulost (≥72–120 Hz podle headsetu), stabilní snímková frekvence a konzistentní časování vstup–render–display (motion-to-photon). Tento článek systematicky porovnává Unity a Unreal z pohledu VR, popisuje architekturu OpenXR, interakční frameworky, vykreslovací techniky, optimalizace, testování, audio a publikační procesy.
OpenXR a multiplatformní architektura
- OpenXR: standard API pro VR/AR. Minimalizuje vendor-lock-in a sjednocuje běhové funkce (pose tracking, input profily, foveated rendering, passthrough, eye/hand tracking).
- Unity: oficiální OpenXR Plugin (XR Plug-in Management) + XR Interaction Toolkit (XRI) pro interakce, teleport, uchopování. Většina moderních headsetů (Meta, SteamVR, Pico, Varjo) funguje přes OpenXR runtime.
- Unreal Engine: vestavěný modul OpenXR, Enhanced Input + Motion Controller Components, pluginy pro platformu (Oculus, SteamVR) typicky přesměrovávají na OpenXR.
- Interakční profily: definují mapování pro ovladače (Oculus Touch, Vive, WMR), ruce (hand tracking) i ovladače s prsty/pressure. Cíl: minimální vlastních bindings, maximální využití profilů.
Volba vykreslovacího řetězce
- Unity: pro standalone a mobilní VR preferujte URP (Universal Render Pipeline) kvůli výkonu a předvídatelnosti. HDRP je vhodný jen pro high-end PC VR a vyžaduje opatrné nastavení TAA/SSR.
- Unreal: Forward Shading + MSAA je tradičně spolehlivá volba pro VR. UE5 nabízí Lumen/Nanite s omezeními; pro VR počítejte s pečlivým scopingem funkcí (např. omezení dynamické GI, ověřit podporu stereo renderingu a náročnost na VRAM).
- Stereo vykreslování: Multiview/Instanced Stereo redukuje přepínání stavů mezi očima. V Unity zapněte Single Pass Instanced; v UE použijte Instanced Stereo a Mobile Multi-View na podporovaných SoC.
- Foveated rendering: Fixed foveation (mobilní VR) a gaze-driven foveation (headsety s eye trackingem). V GPU pipeline ověřte kompatibilitu s post-procesy a TAA.
Požadavky na výkon a latenci
- Cílová frekvence: 72/80/90/120+ Hz podle zařízení. Frame time (CPU/GPU) musí být stabilně pod mezí (např. 90 Hz ≈ 11,1 ms).
- Asynchronní reprojekce: ASW/ATW/SpaceWarp řeší krátkodobé propady, ale nesmí být permanentní strategií. Mířit na nativní framerate bez artefaktů.
- Vstupní latence: minimalizujte script update a simulation cost před late latching/late update. Omezte GC alokace a dlouhé joby.
Interakční frameworky a UX
- Unity XRI: ray/near interakce, snap uchopování, teleport/continuous locomotion, Direct Interactor, UI (world-space canvas) přes XRUI. Doporučená architektura: model-view s čistými Actions.
- Unreal: Motion Controller Components + XR Interaction pluginy, Enhanced Input, UMG pro 3D UI (widget komponenty) a Widget Interaction Component pro kurzor.
- Ergonomie: 1:1 škála (1 jednotka = 1 m), správná pozice origin, offset očí, comfort options (vignette, snap turn, teleport, head-based vs. controller-based locomotion), bezpečné uchopování (přirozené orientace, hybridní kolize).
Fyzika a interakce s objekty
- Kolidery: volit konvexní pro dynamiku; u near-hand interakcí preferovat continuous collision pro stabilitu.
- Stabilita uchopení: hybridní řešení: parenting + fyzikální omezení (jointy) pro realistické mikro-pohyby bez jitteru.
- Haptika: jednoduché buzz pro potvrzení akcí, amplituda/časování mapované na hmotnost a kontaktní plochu; opatrně s dlouhými vibracemi.
Optimalizace obsahu
- Geometrie: agresivní LODy, decimation, sloučení statických meshů, správné pivoty pro instancing.
- Materiály a světla: limit počtu shader variants, minimalizace průhlednosti, lightmap baking (GPU Lightmapper / UE Lightmass/Path Tracer pro bake), vyhnout se těžkým SSR/SSS.
- Textury: atlasování, MIP bias, komprese (ASTC/BC), texture streaming; v UI použít SDF fonty a správný pixel density.
- Animace: retargeting s omezením bone počtu, GPU skinning; snižovat update rate mimo FOV.
Renderovací techniky specifické pro VR
- MSAA vs. TAA: VR tradičně preferuje MSAA (ostré hrany bez ghostingu), TAA může způsobit rozmazání v stereo; kombinace s sharpen filtry a velocity buffer tuningem vyžaduje testy na cílovém headsetu.
- Upscaling: Fixed foveation + upscaling (FSR/DLSS, podle platformy a kompatibility se stereo). Zkontrolovat motion vectors a reprojection artefakty.
- Shadowing: preferovat baked + jednoduché dynamické stíny pro interaktivní objekty; occlusion přes AO z bake, nikoli SSAO ve vysoké kvalitě.
Audio ve VR
- Prostorovost: HRTF (Steam Audio, Meta XR Audio SDK, Microsoft Spatial Audio), pečlivé occlusion/obstruction.
- Middleware: Wwise/FM0D s integrací do Unity/UE, state-driven mix (umlčování UI zvuků při teleportu, úprava reverbů podle prostoru).
- Výkon: dynamická kvalita konvoluce, baking reverbových sond.
UI a přístupnost
- UI ve world-space: čitelnost (úhlová velikost ≥1 stupeň pro text), kontrast, focus distance 1,5–2 m pro snížení vergence-accommodation konfliktu.
- Interakce: laser pointer pro vzdálené UI, near-touch s hover stavy, haptické potvrzení.
- Přístupnost: komfortní módy, seated/standing, levák/pravák, omezení pohybu kamerou, bezpečný guardian overlay.
Networking a víceuživatelské VR
- Synchronizace: predikce a kompenzace u rukou/hlavy (posílat pozici + kvaternion, optimistické vykreslení), zájmové oblasti (interest management), limitovat frekvenci replikace.
- Unity: Netcode for GameObjects/Entities, Mirror/Photon; striktní delta compression a lag compensation pro úchopy a kolize.
- Unreal: vestavěná replikace Actorů a RPC, Network Prediction; pečlivé nastavení NetUpdateFrequency, relevancy a snapshotů.
Build a CI/CD pipeline
- Automatizace: generování app bundle pro cílové platformy (Quest/Android, PC VR, Pico). Headless buildy (Unity CLI, Unreal Build Tool) + testy kouřového spuštění.
- Asset pipeline: validace LOD, velikosti textur, lightmap UV, naming; pre-commit hooky pro zakázané shadery.
- Profiling v CI: krátké scénáře s připojeným headsetem (lab), export metrik (CPU/GPU frametime, overdraw, draw calls).
Profilování a ladění
- Unity: Profiler, Frame Debugger, Memory Profiler, XR Stats; na PC RenderDoc, GPUView. Snižovat GC alokace (Burst/Jobs/DOTS tam, kde to dává smysl).
- Unreal:
stat unit,stat rhi,stat gpu, Unreal Insights, Shader Complexity View; sledovat hitches a shader compile stutters (pre-compile/pipeline cache). - Na zařízení: OVR Metrics Tool, Varjo/SteamVR overlay, Mobile Profiler; měřit teplotní throttling na mobilních headsetech.
Bezpečnost, sandbox a soukromí
- Oprávnění: kamera (passthrough), mikrofon, přístup k síti – žádat jen, co je nezbytné.
- Telemetrie: anonymizovaná, agregovaná; u eye-tracking a hand-tracking metadat jasně deklarovat účel a retenci.
Rozdíly Unity vs. Unreal pro VR – shrnutí
| Aspekt | Unity | Unreal Engine |
|---|---|---|
| Start a produktivita | Rychlý start, bohaté VR šablony, XRI | Vyšší out-of-box vizuální kvalita, robustní editor |
| Render pipeline | URP (VR-friendly), HDRP pro high-end | Forward Shading/MSAA; Lumen/Nanite s omezeními pro VR |
| Scripting | C#; DOTS/Burst pro výkon | Blueprints + C++; Gameplay Ability System |
| Profilování | Profiler/Frame Debugger | Unreal Insights/stat nástroje |
| Ekosystém interakcí | XR Interaction Toolkit, třetí strany | Motion Controllers, pluginy, VR Template |
| Mobilní VR | Silná podpora (Quest/Pico) v URP | Funguje, ale náročnější tuning materiálů/shaderů |
Proces návrhu a validace komfortu
- Prototyp: rychle postavit „graybox“ scény, ověřit lokomoci, měřítko a UX.
- Komfortní testy: 10–15min seance s nováčky; sledovat nevolnost, dezorientaci, citlivá místa (výšky, prudké akcelerace, FOV změny).
- Iterace: přidat comfort options, snížit akcelerace, omezit camera shake, vyřešit texty a kontrasty.
Publikace a certifikace
- Store requirements: Meta/Steam/Pico mají checklisty výkonu, stability a soukromí. Požaduje se plynulost na nativní frekvenci, žádné dlouhé hitches, validní entitlements.
- Balíčky a podpisy: správné package name, min SDK, architektury (ARM64), proguard/strip nativních knihoven.
Doporučená technická „baseline“ pro nový VR projekt
- OpenXR + jednotná akční mapa (input) a action-based haptika.
- Forward/URP, MSAA 4×–8×, single-pass instanced stereo, fixed foveation (mobilní).
- LOD-y, atlasované textury, omezené průhledné materiály, baked lighting.
- Teleport + snap turn jako výchozí; volitelně smooth locomotion s vignette.
- Automatizované scene validation (draw calls, lightmap UV, shader keywords) v CI.
Typické chyby a jak se jim vyhnout
- Přetížené post-procesy (TAA/SSR) → rozmazané stereo, artefakty; raději MSAA + jemný sharpen.
- Chybné měřítko → nepřirozené zbraně/ruce; kalibrovat 1 jednotku = 1 metr.
- UI v obrazové rovině bez hloubky → zhoršená čitelnost; používat world-space a správnou vzdálenost.
- Trvalé spoléhání na reprojekci → artefakty pohybu; optimalizovat obsah a kód.
- Neřešené shader varianty → dlouhé compile hitches; předkompilace a omezení klíčových slov.
Závěr
Unity i Unreal Engine jsou pro VR vyspělé platformy. Unity boduje rychlým nástupem, URP a XR Interaction Toolkitem; Unreal nabízí špičkové vizuály a robustní nástroje editoru. Klíčem k úspěchu je však stejný postup: stavět na OpenXR, volit pro VR vhodný render path (Forward/URP), držet přísné výkonové cíle, testovat komfort s uživateli a automatizovat profilování v CI. Důsledná optimalizace obsahu, pečlivý návrh interakcí a kvalitní audio činí rozdíl mezi „fungující“ a „skutečně přesvědčivou“ VR aplikací.