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

  1. Prototyp: rychle postavit „graybox“ scény, ověřit lokomoci, měřítko a UX.
  2. Komfortní testy: 10–15min seance s nováčky; sledovat nevolnost, dezorientaci, citlivá místa (výšky, prudké akcelerace, FOV změny).
  3. 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í.

Poradňa

Potrebujete radu? Chcete pridať komentár, doplniť alebo upraviť túto stránku? Vyplňte textové pole nižšie. Ďakujeme ♥