Osvědčené postupy pro aplikace OpenXR
Níže uvedený příklad osvědčených postupů najdete v souboru OpenXRProgram.cpp basicXrApp. Funkce Run() na začátku zachycuje typický tok kódu aplikace OpenXR od inicializace až po událost a vykreslovací smyčku.
Osvědčené postupy pro kvalitu a stabilitu zobrazení
Osvědčené postupy v této části popisují, jak získat nejlepší vizuální kvalitu a stabilitu v jakékoli aplikaci OpenXR.
Další doporučení k výkonu specifická pro HoloLens 2 najdete níže v části Osvědčené postupy pro výkon HoloLens 2.
Vykreslování správné gama
Je potřeba dbát na to, aby kanál vykreslování byl gama správný. Při vykreslování do swapchain by se měl formát zobrazení cíle vykreslování shodovat s formátem swapchain. Například DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
pro formát swapchain a zobrazení cíle vykreslení.
Pokud vykreslovací kanál aplikace provede ruční převod sRGB v kódu shaderu, dojde k výjimce. Aplikace by měla požadovat formát swapchain sRGB, ale pro zobrazení cíle vykreslení použít lineární formát. Například požadavek DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
jako formát swapchain, ale použít DXGI_FORMAT_B8G8R8A8_UNORM
jako zobrazení cíle vykreslení, aby se zabránilo opravě obsahu double-gamma.
Odeslání hloubkové vyrovnávací paměti pro vrstvy projekce
Při odesílání rámce xrEndFrame
vždy používejte XR_KHR_composition_layer_depth
rozšíření a odešlete hloubkovou vyrovnávací paměť společně s vrstvou projekce.
Povolení reprojekce hloubky hardwaru na HoloLens 2 zlepšuje stabilitu hologramu.
Zvolte přiměřený rozsah hloubky.
Upřednostněte užší rozsah hloubky, abyste omezili virtuální obsah a pomohli tak se stabilitou hologramů na HoloLensu.
Například vzorek OpenXrProgram.cpp používá 0,1 až 20 metrů.
Pokud chcete rovnoměrnější rozlišení hloubky, použijte obrácený směr-Z .
V HoloLens 2 pomůže použití upřednostňovaného DXGI_FORMAT_D16_UNORM
formátu hloubky dosáhnout lepší obnovovací frekvence a výkonu, i když 16bitové vyrovnávací paměti hloubky poskytují menší rozlišení hloubky než 24bitové vyrovnávací paměti hloubky.
Dodržování těchto osvědčených postupů pro co nejlepší využití hloubkového rozlišení je ještě důležitější.
Příprava na různé režimy prolnutí prostředí
Pokud bude vaše aplikace běžet i na imerzivních náhlavních soupravách, které zcela zablokují svět, nezapomeňte vytvořit výčet podporovaných režimů prolnutí prostředí pomocí xrEnumerateEnvironmentBlendModes
rozhraní API a správně připravit obsah vykreslování.
Například v systému, XR_ENVIRONMENT_BLEND_MODE_ADDITIVE
jako je HoloLens, by aplikace měla používat průhlednou barvu jako jasnou barvu, zatímco v případě systému s XR_ENVIRONMENT_BLEND_MODE_OPAQUE
by měla aplikace vykreslit určitou neprůhlednou barvu nebo virtuální místnost na pozadí.
Volba nevázaného referenčního prostoru jako kořenového prostoru aplikace
Aplikace obvykle vytvářejí určitý prostor souřadnic v kořenovém světě, aby propojily zobrazení, akce a hologramy.
Použijte XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT
, když je rozšíření podporované k vytvoření celosvětového souřadnicového systému, který vaší aplikaci umožní vyhnout se nežádoucímu posunu hologramů, když se uživatel přesune daleko (například 5 metrů od místa, kde aplikace začíná).
Použijte XR_REFERENCE_SPACE_TYPE_LOCAL
jako záložní řešení v případě, že rozšíření nevázaného prostoru neexistuje.
Přidružení hologramu k prostorové kotvě
Při použití nevázaného referenčního prostoru se hologramy, které umístíte přímo do daného referenčního prostoru, můžou lišit, když uživatel přejde do vzdálených místností a pak se vrátí.
U hologramů umístěných na samostatném místě ve světě vytvořte prostorovou kotvu pomocí xrCreateSpatialAnchorSpaceMSFT
rozšiřující funkce a umístěte hologram na jeho počátku. Tento hologram tak bude v průběhu času nezávisle stabilní.
Podpora zachycení hybridní reality
I když primární zobrazení HoloLens 2 používá doplňkové prolnutí prostředí, když uživatel spustí záznam hybridní reality, obsah vykreslování aplikace se alfaně prolne s video streamem prostředí.
Pokud chcete dosáhnout nejlepší vizuální kvality ve snímacích videí s hybridní realitou, je nejlepší nastavit XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT
v vrstvě layerFlags
projekce hodnotu .
Osvědčené postupy pro výkon HoloLens 2
Jako mobilní zařízení s podporou reprojekce hardwaru má HoloLens 2 přísnější požadavky pro optimální výkon. Existuje několik způsobů, jak odeslat data složení, což vede k následnému zpracování se znatelným snížením výkonu.
Výběr formátu swapchain
Pomocí vždy vyčíslujte podporované formáty xrEnumerateSwapchainFormats
pixelů a zvolte první formát pixelové barvy a hloubky z modulu runtime, který aplikace podporuje, protože právě tento formát dává modul runtime přednost pro optimální výkon. Všimněte si, že na HoloLens 2 DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
a DXGI_FORMAT_D16_UNORM
je obvykle první volbou pro dosažení lepšího výkonu vykreslování. Tato předvolba se může lišit u náhlavních souprav vr běžících na stolním počítači, kde 24bitové hloubkové vyrovnávací paměti mají menší dopad na výkon.
Upozornění výkonu: Použití jiného formátu než primárního barevného formátu swapchain způsobí následné zpracování za běhu, což má za následek výrazné snížení výkonu.
Vykreslení s doporučenými parametry vykreslování a časováním snímků
Vždy vykreslujte s doporučenou šířkou/výškou zobrazení (recommendedImageRectWidth
a recommendedImageRectHeight
z XrViewConfigurationView
) a vždy před vykreslováním pomocí rozhraní API zadejte xrLocateViews
dotaz na doporučenou pozici zobrazení, funkci FOV a další parametry vykreslování.
Při dotazování na pozice a zobrazení vždy používejte metodu XrFrameEndInfo.predictedDisplayTime
z nejnovějšího xrWaitFrame
volání.
To umožňuje HoloLensu upravit vykreslování a optimalizovat vizuální kvalitu pro osobu, která má HoloLens na sobě.
Použití jedné vrstvy projekce
HoloLens 2 má omezený výkon GPU pro vykreslování obsahu a hardwarový kompozitor optimalizovaný pro jednu vrstvu projekce. Vždy použití jedné vrstvy projekce může pomoct s snímkovou rychlostí aplikace, stabilitou hologramů a vizuální kvalitou.
Upozornění výkonu: Odeslání čehokoli jiného než jedné vrstvy ochrany způsobí následné zpracování za běhu, což má za následek výrazné snížení výkonu.
Vykreslení s polem textur a VPRT
Vytvořte jednu xrSwapchain
pro levé i pravé oko pomocí arraySize=2
prohození barev a druhou pro hloubku.
Vykreslujte levé oko na řez 0 a pravé oko na řez 1.
Pokud chcete minimalizovat zatížení GPU, použijte shader s VPRT a voláním instance draw pro stereoskopické vykreslování.
To také umožňuje optimalizaci modulu runtime za účelem dosažení nejlepšího výkonu na HoloLens 2.
Alternativy k použití pole textur, jako je vykreslování s dvojitou šířkou nebo samostatný swapchain na oko, budou mít za následek následné zpracování za běhu, což má za následek výrazné snížení výkonu.
Vyhněte se čtyřúhelným vrstvám
Místo odeslání čtyřúhelné vrstvy jako vrstvy složení pomocí XrCompositionLayerQuad
vykreslujte obsah čtyřúhelníku přímo do swapchain projekce.
Upozornění výkonu: Poskytnutí dalších vrstev nad rámec jedné vrstvy projekce, jako jsou čtyři vrstvy, bude mít za následek následné zpracování za běhu, což má za následek výrazné snížení výkonu.