Share via


Az OpenXR-alkalmazás ajánlott eljárásai

Az alábbi ajánlott eljárásokat az BasicXrApp OpenXRProgram.cpp fájljában tekintheti meg. A Run() függvény az elején egy tipikus OpenXR-alkalmazáskód-folyamatot rögzít az inicializálástól az eseményig és a renderelési hurokig.

Ajánlott eljárások a vizualizáció minőségéhez és stabilitásához

Az ebben a szakaszban ismertetett ajánlott eljárások azt mutatják be, hogyan szerezheti be a legjobb vizuális minőséget és stabilitást bármely OpenXR-alkalmazásban.

A HoloLens 2 vonatkozó további teljesítménnyel kapcsolatos javaslatokért tekintse meg az alábbi, a teljesítményre vonatkozó ajánlott eljárásokat HoloLens 2 szakaszban.

Gamma-helyes renderelés

Ügyeljen arra, hogy a renderelési folyamat gamma-helyes legyen. Swapchainre való rendereléskor a renderelési célnézet formátumának meg kell egyeznie a swapchain formátumával. Például a DXGI_FORMAT_B8G8R8A8_UNORM_SRGB swapchain formátum és a render-target nézet esetében is. Kivételt jelent, ha az alkalmazás renderelési folyamata manuális sRGB-átalakítást végez shader-kódban. Az alkalmazásnak sRGB swapchain formátumot kell kérnie, de a renderelési célnézethez a lineáris formátumot kell használnia. Például a kérést DXGI_FORMAT_B8G8R8A8_UNORM_SRGB swapchain formátumként, de renderelési célnézetként használva DXGI_FORMAT_B8G8R8A8_UNORM megakadályozza a tartalom dupla gamma-kijavítását.

Mélységi puffer küldése vetítési rétegekhez

Mindig használja XR_KHR_composition_layer_depth a kiterjesztést, és küldje el a mélységi puffert a vetítőréteggel együtt, amikor keretet küld a-nak xrEndFrame. A hardvermélység-újraprojection engedélyezése HoloLens 2 javítja a hologram stabilitását.

Ésszerű mélységi tartomány kiválasztása

Szűkebb mélységi tartományt használjon a virtuális tartalom hatókörének meghatározásához, hogy segítse a hologram stabilitását a HoloLensen. Az OpenXrProgram.cpp minta például 0,1 és 20 méter között van. Használjon fordított Z-t egységesebb mélységi felbontáshoz. A HoloLens 2 az előnyben részesített DXGI_FORMAT_D16_UNORM mélységi formátum használata jobb képkockasebességet és teljesítményt eredményez, bár a 16 bites mélységi pufferek kevesebb mélységi felbontást biztosítanak, mint a 24 bites mélységi pufferek. Az ajánlott eljárások követése a mélységi felbontás legjobb kihasználásához fontosabbá válik.

Felkészülés a környezet különböző keverési módjaira

Ha az alkalmazás olyan modern headseteken is futni fog, amelyek teljesen elzárják a világot, ügyeljen arra, hogy az API használatával xrEnumerateEnvironmentBlendModes számba vegye a támogatott környezetkeverési módokat, és megfelelően készítse elő a renderelési tartalmat. Például egy olyan rendszer XR_ENVIRONMENT_BLEND_MODE_ADDITIVE esetében, mint a HoloLens, az alkalmazásnak átlátszó színt kell használnia világos színként, míg a rendszerrel rendelkező XR_ENVIRONMENT_BLEND_MODE_OPAQUErendszerek esetében az alkalmazásnak valamilyen átlátszatlan színt vagy virtuális szobát kell megjelenítenie a háttérben.

Válassza ki a kötetlen referenciaterületet az alkalmazás gyökérterületeként

Az alkalmazások általában gyökérszintű világ koordináta-teret hoznak létre, hogy a nézetek, műveletek és hologramok összekapcsolhatók egymással. Akkor használja XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT , ha a bővítmény támogatott egy világszintű koordináta-rendszer létrehozásához, ami lehetővé teszi, hogy az alkalmazás elkerülje a nem kívánt hologrameltolódást, amikor a felhasználó messze (például 5 méterre) mozog attól a ponttól, ahonnan az alkalmazás elindul. Tartalékként használható XR_REFERENCE_SPACE_TYPE_LOCAL , ha a kötetlen szóközbővítmény nem létezik.

Hologram társítása térbeli horgonyhoz

Kötetlen referenciatér használata esetén a közvetlenül a referenciatérbe helyezett hologramok sodródhatnak, amikor a felhasználó a távoli szobákhoz sétál, majd visszatér. A hologram-felhasználók számára a világ egy különálló helyén helyezzen el egy térbeli horgonyt a xrCreateSpatialAnchorSpaceMSFT bővítményfüggvény használatával, és helyezze a hologramot a forrásához. Ez a hologram az idő múlásával egymástól függetlenül stabil marad.

A vegyes valóság rögzítésének támogatása

Bár HoloLens 2 elsődleges kijelzője additív környezetkeverést használ, amikor a felhasználó elindítja a vegyes valóság rögzítését, az alkalmazás renderelési tartalma alfa-keverve lesz a környezeti videóstreammel. Ha a legjobb vizuális minőséget szeretné elérni a vegyes valóságban rögzített videókban, a legjobb, ha a leképezési rétegben állítja layerFlagsbe a XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT értéket.

Ajánlott eljárások a HoloLens 2 teljesítményéhez

Hardverprojection-támogatással rendelkező mobileszközként HoloLens 2 szigorúbb követelményekkel rendelkezik az optimális teljesítményhez. Az összeállítási adatok elküldésének számos módja van, ami a feldolgozást követően észrevehető teljesítménybeli büntetést von maga után.

Swapchain formátum kiválasztása

Mindig számba adja a támogatott képpontformátumokat a használatával xrEnumerateSwapchainFormats, és válassza ki az alkalmazás által támogatott futtatókörnyezet első szín- és mélységi képpontformátumát, mivel a futtatókörnyezet ezt részesíti előnyben az optimális teljesítmény érdekében. Vegye figyelembe, hogy HoloLens 2, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB és DXGI_FORMAT_D16_UNORM általában ez az első választás a jobb renderelési teljesítmény eléréséhez. Ez a beállítás eltérő lehet az asztali pc-n futó VR-headseteken, ahol a 24 bites mélységi pufferek kevésbé befolyásolják a teljesítményt.

Teljesítménnyel kapcsolatos figyelmeztetés: Az elsődleges swapchain színformátumtól eltérő formátum használata futásidejű utófeldolgozást eredményez, ami jelentős teljesítménybeli büntetést von maga után.

A renderelés mindig az ajánlott nézetkonfiguráció szélességével/magasságával (recommendedImageRectWidthés értékévelXrViewConfigurationView) legyen megjelenítve, és a megjelenítés előtt mindig api-val xrLocateViews kérdezze le az ajánlott nézet pózát, az FOV-t és más renderelési recommendedImageRectHeight paramétereket. A pózok és nézetek lekérdezéséhez mindig a XrFrameEndInfo.predictedDisplayTime legutóbbi xrWaitFrame hívásból származó értéket használja. Ez lehetővé teszi, hogy a HoloLens módosítsa a renderelést, és optimalizálja a vizuális minőséget a HoloLenst viselő személy számára.

Egyetlen vetületi réteg használata

HoloLens 2 korlátozott GPU-teljesítménnyel rendelkezik a tartalom rendereléséhez, és egy egyetlen vetítési rétegre optimalizált hardverkompozitort. Az alkalmazás képkockasebességét, hologramstabilitását és vizuális minőségét mindig egyetlen vetítőréteg használatával teheti meg.

Teljesítménnyel kapcsolatos figyelmeztetés: Az egyetlen védelmi rétegen kívüli bármi beküldése a futtatókörnyezet utófeldolgozását eredményezi, ami jelentős teljesítménybeli büntetést von maga után.

Renderelés textúratömbbel és VPRT-vel

Hozzon létre egyet xrSwapchain a bal és a jobb szem arraySize=2 számára is a színcseréléshez, egy pedig a mélységhez. A bal szemet a 0. szeletbe, a jobb szemet pedig az 1. szeletbe renderelje. Használjon árnyékolót VPRT-vel és példányos rajzolási hívásokat a sztereoszkopikus rendereléshez a GPU-terhelés minimalizálása érdekében. Ez azt is lehetővé teszi, hogy a futtatókörnyezet optimalizálása a legjobb teljesítményt nyújtsa HoloLens 2. A textúratömb használatának alternatívái, például a duplaszintű renderelés vagy a szemenkénti külön swapchain, futásidejű utófeldolgozást eredményeznek, ami jelentős teljesítménybeli büntetést von maga után.

A quadrétegek elkerülése

Ahelyett, hogy a quadrétegeket összeállítási rétegként küldi el a használatával XrCompositionLayerQuad, a quadtartalmat közvetlenül a vetületi swapláncba renderelheti.

Teljesítménnyel kapcsolatos figyelmeztetés: Az egyetlen vetítőrétegen túli további rétegek, például a quadrétegek, a futásidejű utófeldolgozást eredményeznek, ami jelentős teljesítménybeli büntetést von maga után.