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 klíčová plynulost (≥72–120 Hz dle headsetu), stabilní snímková frekvence a konzistentní časování vstup–render–zobrazení (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 proces publikace.
OpenXR a multiplatformní architektura
- OpenXR: standardizované API pro VR/AR. Minimalizuje vendor lock-in a sjednocuje běhové funkce (sledování pozice, input profily, foveated rendering, passthrough, sledování očí a rukou).
- Unity: oficiální OpenXR Plugin (XR Plug-in Management) + XR Interaction Toolkit (XRI) pro interakce, teleportaci, 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í ovladačů (Oculus Touch, Vive, WMR), rukou (hand tracking) i ovladačů s prsty/pressure senzory. Cíl: minimální vlastní bindings, maximální využití profilů.
Volba vykreslovacího řetězce
- Unity: pro standalone a mobilní VR se preferuje URP (Universal Render Pipeline) kvůli výkonu a předvídatelnosti. HDRP je vhodný pouze pro high-end PC VR a vyžaduje opatrné nastavení TAA/SSR.
- Unreal: Forward Shading + MSAA je tradičně spolehlivou volbou pro VR. UE5 nabízí Lumen/Nanite s omezeními; pro VR je třeba pečlivě scope funkce (např. omezení dynamické GI, ověření podpory stereo renderingu a náročnosti na VRAM).
- Stereo vykreslování: Multiview/Instanced Stereo redukuje přepínání stavů mezi očima. V Unity aktivujte 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 postprocesy a TAA.
Požadavky na výkon a latenci
- Cílová frekvence: 72/80/90/120+ Hz dle zařízení. Frame time (CPU/GPU) musí být stabilně pod hranicí (např. 90 Hz ≈ 11,1 ms).
- Asynchronní reprojekce: ASW/ATW/SpaceWarp řeší krátkodobé propady, ale nesmí být trvalou strategií. Cílem je nativní framerate bez artefaktů.
- Vstupní latence: minimalizujte script update a simulation cost před late latching/late update. Omezte GC alokace a dlouhé úlohy.
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é uchopení (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, slučování 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 náročným SSR/SSS.
- Textury: atlasování, MIP bias, komprese (ASTC/BC), texture streaming; v UI používat SDF fonty a správnou 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ůsobovat rozmazání ve stereo režimu; kombinace s sharpen filtry a laděním velocity buffer vyžaduje testování na cílovém headsetu.
- Upscaling: Fixed foveation + upscaling (FSR/DLSS dle platformy a kompatibility se stereo). Zkontrolovat motion vectors a reprojekční artefakty.
- Shadowing: preferovat baked + jednoduché dynamické stíny pro interaktivní objekty; occlusion přes AO z bake, nikoliv SSAO ve vysoké kvalitě.
Audio ve VR
- Prostorovost: HRTF (Steam Audio, Meta XR Audio SDK, Microsoft Spatial Audio), pečlivé occlusion/obstruction.
- Middleware: Wwise/FMOD 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, velikostí textur, lightmap UV, pojmenování; 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 stuttery (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 pouze nezbytné.
- Telemetrie: anonymizovaná, agregovaná; u eye-tracking a hand-tracking metadat jasně deklarovat účel a dobu uchovávání.
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 vytvořit „graybox“ scény, ověřit lokomoci, měřítko a UX.
- Komfortní testy: 10–15minutové seance s nováčky; sledovat nevolnost, dezorientaci, citlivá místa (výšky, prudké akcelerace, změny FOV).
- Iterace: přidat comfort options, snížit akcelerace, omezit camera shake, upravit texty a kontrasty.
Publikace a certifikace
- Požadavky obchodů: Meta/Steam/Pico mají checklisty výkonu, stability a soukromí. Vyžadují plynulost na nativní frekvenci, žádné dlouhé hitches, validní entitlements.
- Balíčky a podpisy: správné package name, minimální 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é postprocesy (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 ve VR vyspělé platformy. Unity získává body rychlým nástupem, URP a XR Interaction Toolkitem; Unreal nabízí špič