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_OPAQUE
rendszerek 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 layerFlags
be 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.
Renderelés ajánlott megjelenítési paraméterekkel és keretidőzítéssel
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.