Metodtips för OpenXR-appar

Du kan se ett exempel på metodtipsen nedan i Filen OpenXRProgram.cpp i BasicXrApp. Funktionen Run() i början samlar in ett typiskt OpenXR-appkodflöde från initiering till händelse- och renderingsloopen.

Metodtips för visuell kvalitet och stabilitet

Metodtipsen i det här avsnittet beskriver hur du får bästa möjliga visuella kvalitet och stabilitet i alla OpenXR-program.

Ytterligare prestandarekommendationer som är specifika för HoloLens 2 finns i avsnittet Best practices for performance on HoloLens 2 nedan.

Felande återgivning

Var noga med att se till att din renderingspipeline är fel korrekt. Vid rendering till en växlingskedja bör formatet för renderingsmålvyn matcha swapchain-formatet. Till exempel DXGI_FORMAT_B8G8R8A8_UNORM_SRGB för både swapchain-formatet och render-target-vyn. Det finns ett undantag om appens renderingspipeline gör en manuell sRGB-konvertering i skuggarkod. Appen bör begära ett sRGB-växlingsformat men använda det linjära formatet för renderingsmålvyn. Du kan till exempel begära som swapchain-format men använda som renderingsmålvy för att förhindra att DXGI_FORMAT_B8G8R8A8_UNORM_SRGBDXGI_FORMAT_B8G8R8A8_UNORM innehåll korrigeras dubbelkorrigerade.

Skicka djupbuffert för projektionslager

Använd alltid XR_KHR_composition_layer_depth tillägget och skicka djupbufferten tillsammans med projektionsskiktet när du skickar en ram till xrEndFrame . Aktivering av maskinvarudjupsreprojering på HoloLens 2 förbättrar hologramstabiliteten.

Välj ett rimligt djupintervall

Prioritera ett smalare djupintervall för att begränsa det virtuella innehållet för att hjälpa hologramstabilitet på HoloLens. Till exempel använder OpenXrProgram.cpp-exemplet 0,1 till 20 meter. Använd reversed-Z för en mer enhetlig djupupplösning. På HoloLens 2 ger det önskade djupformatet bättre bildfrekvens och prestanda, även om 16-bitars djupbuffertar ger mindre djupupplösning än DXGI_FORMAT_D16_UNORM 24-bitars djupbuffertar. Att följa dessa metodtips för att använda djupupplösningen på bästa sätt blir viktigare.

Förbereda för olika miljöers blandningslägen

Om ditt program även ska köras på integrerande headset som helt blockerar världen, se till att räkna upp miljöer med blandningslägen som stöds med hjälp av API och förbereda ditt xrEnumerateEnvironmentBlendModes renderingsinnehåll på rätt sätt. För ett system med till exempel HoloLens bör appen till exempel använda transparent som klarfärg, medan appen för ett system med ska rendera en täckande färg eller något virtuellt rum i XR_ENVIRONMENT_BLEND_MODE_ADDITIVEXR_ENVIRONMENT_BLEND_MODE_OPAQUE bakgrunden.

Välj ett obundna referensutrymme som programmets rotutrymme

Program upprättar vanligtvis ett rotvärldskoordinatutrymme för att koppla samman vyer, åtgärder och hologram. Använd när tillägget stöds för att upprätta ett koordinatsystem i världsskala, vilket gör att din app kan undvika oönskad hologramavdrift när användaren rör sig långt (till exempel 5 meter bort) från den plats där appen XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT startar. XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT Använd XR_REFERENCE_SPACE_TYPE_LOCAL som reserv om det obundna utrymmestillägget inte finns.

Associera hologram med spatial fästpunkt

När du använder ett obundna referensutrymme kan hologram som du placerar direkt i referensutrymmet avta när användaren går till avlägsna rum och sedan kommer tillbaka. För hologramanvändare som placerar på en diskret plats i världen skapar du en spatial fästpunkt med hjälp av tilläggsfunktionen och placerar hologrammet vid dess ursprung. Det håller hologrammet oberoende av varandra stabilt över tid.

Stöd för mixad verklighetsinfångning

Även HoloLens 2:s primära skärm använder additiv miljöblanding, kommer appens renderingsinnehåll att vara alfablandat med miljövideoströmmen när användaren startar mixed reality capture. För att uppnå bästa visuella kvalitet i videor med mixad verklighet är det bäst att ange XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT i projektionsskiktets layerFlags .

Metodtips för prestanda på HoloLens 2

Som en mobil enhet med stöd för maskinvarureprojection har HoloLens 2 strängare krav för optimal prestanda. Det finns ett antal sätt att skicka sammansättningsdata via, vilket resulterar i efterbearbetning med en märkbar prestandaförseing.

Välj ett växlingsformat

Räkna alltid upp pixelformat som stöds med hjälp av och välj det första formatet för färg och djup pixel från körningen som appen stöder, eftersom det är vad körningen föredrar för xrEnumerateSwapchainFormats optimal prestanda. Observera att på HoloLens 2, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB och är vanligtvis det första valet för att uppnå bättre DXGI_FORMAT_D16_UNORM renderingsprestanda. Den här inställningen kan vara annorlunda på VR-headset som körs på en stationär dator, där 24-bitars djupbuffertar har mindre prestandapåverkan.

Prestandavarning: Om du använder ett annat format än det primära färgformatet för växlingskedja resulterar det i körning efterbearbetning, vilket innebär en betydande prestandaförseing.

Återge alltid med den rekommenderade vyns konfigurationsbredd/höjd ( och från ), och använd alltid API för att fråga efter rekommenderad vyställning, FOV och andra recommendedImageRectWidthrecommendedImageRectHeightXrViewConfigurationViewxrLocateViews renderingsparametrar före rendering. Använd alltid från XrFrameEndInfo.predictedDisplayTime det senaste xrWaitFrame anropet när du frågar efter poser och vyer. På så HoloLens kan du justera renderingen och optimera den visuella kvaliteten för den person som bär HoloLens.

Använda ett enda projektionslager

HoloLens 2 har begränsad GPU-ström för rendering av innehåll och en maskinvarukomposator som är optimerad för ett enda projektionslager. Att alltid använda ett enda projektionslager kan hjälpa programmets ramhastighet, hologramstabilitet och visuella kvalitet.

Prestandavarning: Om du skickar allt annat än ett enda skyddslager resulterar det i körning efterbearbetning, vilket leder till en betydande prestandaförseing.

Rendera med en strukturmatris och VPRT

Skapa en xrSwapchain för både vänster och höger ögon med för arraySize=2 färgväxlingskedja och en för djup. Rendera det vänstra ögat i sektor 0 och det högra ögat i segment 1. Använd en skuggare med VPRT och instanserade rita-anrop för stereoåtergivning för att minimera GPU-belastningen. Detta gör det också möjligt för körningens optimering att uppnå bästa prestanda på HoloLens 2. Alternativ till att använda en strukturmatris, till exempel dubbelomfattande rendering eller en separat växlingskedja per ögon, resulterar i körning efterbearbetning, vilket ger en betydande prestandaförsämring.

Undvik quad-lager

I stället för att skicka quad-skikt som sammansättningslager med XrCompositionLayerQuad återger du quad-innehållet direkt i projektionens växlingskedja.

Prestandavarning: Att tillhandahålla ytterligare lager utöver ett enda projektionslager, till exempel quad-lager, resulterar i körning efterbearbetning, vilket leder till en betydande prestandaförseing.