Ha vegyes valóságú headsetet visel, az a holografikus világ középpontjává válik. A Unity Kamera összetevő automatikusan kezeli a sztereoszkopikus renderelést, és követi a fej mozgását és forgását. A vizuális minőség és a hologram stabilitásának teljes optimalizálásához azonban meg kell adnia az alábbiakban ismertetett kamerabeállításokat.
HoloLens vs VR modern headsetek
A Unity Kamera összetevő alapértelmezett beállításai hagyományos 3D-alkalmazásokhoz tartoznak, amelyeknek skybox-szerű háttérre van szükségük, mivel nincs valós világuk.
- Modern headseten való futtatáskor mindent renderel, amit a felhasználó lát, ezért valószínűleg meg szeretné tartani a skyboxot.
- Ha azonban holografikus headseten fut, mint a HoloLens, a valós világnak minden mögött meg kell jelennie, amit a kamera renderel. Állítsa a kamera hátterét transzparensre (HoloLensben a fekete renderelés átlátszóként) a Skybox-textúra helyett:
- Válassza ki a fő kamerát a Hierarchia panelen
- A Felügyelő panelen keresse meg a Kamera összetevőt, és módosítsa a Jelzők törlése legördülő menüt a Skyboxról egyszínűre
- Válassza ki a Háttérszínválasztót, és módosítsa az RGBA-értékeket (0, 0, 0, 0)
- Ha ezt kódból állítja be, használhatja a Unity
Color.clear
Az MRTK automatikusan kezeli a kamerabeállításokat a kamerarendszer-profil konfigurációja alapján.
Névtér: Microsoft.MixedReality.Toolkit.CameraSystem
Típus: MixedRealityCameraSystem
A kamera átlátszatlanságának ellenőrzéséhez a MixedRealityCamera rendszernek van egy IsOpaque
tulajdonsága.
CoreServices.CameraSystem.IsOpaque;
Névtér: UnityEngine.XR
Típus: XRDisplaySubsystem
Szkriptkóddal futásidőben megállapíthatja, hogy a headset modern vagy holografikus-e, ha ellenőrzi a displayOpaque elemet az aktívan futó XRDisplaySubsystem-en.
Névtér: UnityEngine.XR.WSA
Típus: HolographicSettings
A HolographicSettings.IsDisplayOpaque ellenőrzésével szkriptkóddal meghatározhatja, hogy a headset modern vagy holografikus-e.
Kamera beállítása
Bármilyen felületet is fejleszt, a fő kamera mindig az eszköz fejre csatlakoztatott kijelzőjéhez csatlakoztatott elsődleges sztereó renderelő összetevő. Egyszerűbb lesz az alkalmazás elrendezése, ha a felhasználó kezdő pozícióját (X: 0, Y: 0, Z: 0) képzeli el. Mivel a fő kamera a felhasználó fejének mozgását követi, a felhasználó kezdőpozícióját a fő kamera kezdőpozíciójának beállításával állíthatja be.
A központi választás az, hogy HoloLens vagy VR modern headsetekhez fejleszt. Miután megkapta ezt, ugorjon arra a szakaszra, amelyre a beállítási szakasz vonatkozik.
HoloLens kamera beállítása
A HoloLens-alkalmazásokhoz horgonyokat kell használnia a jelenetkörnyezetbe zárolni kívánt objektumokhoz. Javasoljuk, hogy határtalan helyet használjon a stabilitás maximalizálása érdekében, és hozzon létre horgonyokat több helyiségben.
Ezt a lépésenkénti oktatóanyagot követve hozzáadhatja és automatikusan konfigurálhatja a Mixed Reality-eszközkészletet a Unity-projektben. A Unityhez készült MRTK MixedRealityPlayspace osztályával közvetlenül is dolgozhat, és a célskálát a világra állíthatja:

Az MRTK-nak automatikusan kezelnie kell a játéktér és a kamera helyzetét, de érdemes duplán ellenőrizni:

- A Hierarchia panelen bontsa ki a MixedRealityPlayspace GameObject elemet, és keresse meg a fő kamera gyermekobjektumát
- Az Inspector panelen keresse meg az Átalakítás összetevőt, és módosítsa a pozíciót (X: 0, Y: 0, Z: 0)
Állítsa be a nyomkövetési forrás módot az XRInputSubsystem-en. Az alrendszer beszerzése után hívja meg a TrySetTrackingOriginMode parancsot:
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Device);
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Unbounded); // Recommendation for OpenXR
Használhatja az ARSessiont a HoloLens-alkalmazásokhoz, amely jobban működik a horgonyokkal és az ARKit/ARCore-tal.

Fontos
Az AR-munkamenetnek és a kapcsolódó funkcióknak telepítve kell lenniük az AR Foundation szolgáltatásnak.
A kameramódosításokat manuálisan is alkalmazhatja az ARSession használata nélkül:
Fő kamera kiválasztása a Hierarchia panelen
Az Inspector panelen keresse meg az Átalakítás összetevőt, és módosítsa a pozíciót (X: 0, Y: 0, Z: 0)

Kamera a Unity Felügyelő paneljén
TrackedPoseDriver hozzáadása a fő kamerához
Fő kamera kiválasztása a Hierarchia panelen
Az Inspector panelen keresse meg az Átalakítás összetevőt, és módosítsa a pozíciót (X: 0, Y: 0, Z: 0)

Kamera a Unity Felügyelő paneljén
Ugrás a Windows Áruházbeli lejátszó beállításainak Egyéb beállítások szakaszára
Válassza a Windows Mixed Realityt eszközként, amely a Unity régebbi verzióiban Windows Holographicként szerepelhet
A Támogatott virtuális valóság kiválasztása
Mivel a Fő kamera objektum automatikusan kameraként van megjelölve, a Unity minden mozgást és fordítást működtet.
Feljegyzés
Ezeket a beállításokat az alkalmazás minden jelenetében alkalmazni kell a kamerára.
Alapértelmezés szerint, amikor új jelenetet hoz létre a Unityben, az tartalmazni fog egy fő kamera gameObject-et a hierarchiában, amely tartalmazza a Kamera összetevőt, de előfordulhat, hogy nincsenek megfelelően alkalmazva a beállítások.
VR-kamera beállítása
A Windows Mixed Reality számos felhasználói felületi skálán támogatja az alkalmazásokat, a csak tájolásos és az üléses alkalmazásoktól kezdve a helyiségméretű alkalmazásokig. A HoloLensen továbbmehet, és olyan világszintű alkalmazásokat készíthet, amelyek segítségével a felhasználók 5 métert meghaladó sétát tehetnek, és felfedezhetik az épület teljes emeletét és azon túl is.
A vegyes valósági élmény Unityben való létrehozásának első lépése annak meghatározása, hogy az alkalmazás milyen skálázást céloz meg:
Helyiségméretű vagy álló élmények
Feljegyzés
Ha HL2-re készül, javasoljuk, hogy hozzon létre egy szemszintű felületet, vagy fontolja meg a Jelenetfelismerés használatát a jelenet padlójának okára.
Használja az MRTK For Unity MixedRealityPlayspace osztályát, és állítsa a célskálát helyiségre vagy állóra:

Az MRTK-nak automatikusan kezelnie kell a játéktér és a kamera helyzetét, de érdemes duplán ellenőrizni:

- A Hierarchia panelen bontsa ki a MixedRealityPlayspace GameObject elemet, és keresse meg a fő kamera gyermekobjektumát
- Az Inspector panelen keresse meg az Átalakítás összetevőt, és módosítsa a pozíciót (X: 0, Y: 0, Z: 0)
- Ugrás a Windows Áruházbeli lejátszó beállításainak Egyéb beállítások szakaszára
- Válassza a Windows Mixed Realityt eszközként, amely a Unity régebbi verzióiban Windows Holographicként szerepelhet
- A Támogatott virtuális valóság kiválasztása
Mivel a Fő kamera objektum automatikusan kameraként van megjelölve, a Unity minden mozgást és fordítást működtet.
Feljegyzés
Ezeket a beállításokat az alkalmazás minden jelenetében alkalmazni kell a kamerára.
Alapértelmezés szerint, amikor új jelenetet hoz létre a Unityben, az tartalmazni fog egy fő kamera gameObjectet a hierarchiában, amely tartalmazza a Kamera összetevőt, de nem alkalmazza megfelelően az alábbi beállításokat.
Névtér: UnityEngine.XR
Típus: XRDevice
Az álló vagy helyiségméretű élmény érdekében a tartalmat a padlóhoz viszonyítva kell elhelyeznie. A felhasználó padlójára a térbeli szakaszt kell használnia, amely a felhasználó definiált padlószintű eredetét és az első futtatáskor beállított opcionális helyiséghatárt jelöli.
Annak biztosítása érdekében, hogy a Unity a világszintű koordináta-rendszerével működjön, beállíthatja és tesztelheti, hogy a Unity a RoomScale követőtértípust használja-e:
if (XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale))
{
// RoomScale mode was set successfully. App can now assume that y=0 in Unity world coordinate represents the floor.
}
else
{
// RoomScale mode was not set successfully. App cannot make assumptions about where the floor plane is.
}
- Ha a SetTrackingSpaceType igaz értéket ad vissza, a Unity sikeresen átváltotta a világkoordináta-rendszerét a referencia fáziskeretének nyomon követésére.
- Ha a SetTrackingSpaceType hamis értéket ad vissza, a Unity nem tudott átváltani a referencia fáziskeretére, valószínűleg azért, mert a felhasználó nem állított be padlót a környezetében. Bár a hamis visszatérési érték nem gyakori, előfordulhat, hogy a szakasz egy másik helyiségben van beállítva, és az eszköz az aktuális helyiségbe kerül anélkül, hogy a felhasználó új szakaszt állít be.
Ha az alkalmazás sikeresen beállítja a RoomScale követési terület típusát, az y=0 síkon elhelyezett tartalom megjelenik a padlón. A 0, 0 és 0 időpontban megadott forrás lesz az a hely a padlón, ahol a felhasználó a helyiség beállítása során állt, a -Z pedig azt az előre irányt jelöli, amellyel a beállítás során szembesültek.
Ülő élmények
Használja az MRTK For Unity MixedRealityPlayspace osztályát, és állítsa a célskálát ülésre:

Az MRTK-nak automatikusan kezelnie kell a játéktér és a kamera helyzetét, de érdemes duplán ellenőrizni:

- A Hierarchia panelen bontsa ki a MixedRealityPlayspace GameObject elemet, és keresse meg a fő kamera gyermekobjektumát
- Az Inspector panelen keresse meg az Átalakítás összetevőt, és módosítsa a pozíciót (X: 0, Y: 0, Z: 0)
- Ugrás a Windows Áruházbeli lejátszó beállításainak Egyéb beállítások szakaszára
- Válassza a Windows Mixed Realityt eszközként, amely a Unity régebbi verzióiban Windows Holographicként szerepelhet
- A Támogatott virtuális valóság kiválasztása
Mivel a Fő kamera objektum automatikusan kameraként van megjelölve, a Unity minden mozgást és fordítást működtet.
Feljegyzés
Ezeket a beállításokat az alkalmazás minden jelenetében alkalmazni kell a kamerára.
Alapértelmezés szerint, amikor új jelenetet hoz létre a Unityben, az tartalmazni fog egy fő kamera gameObjectet a hierarchiában, amely tartalmazza a Kamera összetevőt, de nem alkalmazza megfelelően az alábbi beállításokat.
Névtér: UnityEngine.XR
Típus: XRDevice
Ha csak tájolásos vagy ülő léptékű élményt szeretne létrehozni, a Unityt a helyhez kötött követési hely típusára kell állítania. A helyhez kötött nyomkövető tér a Unity világkoordináta-rendszerét állítja be a helyhez kötött referenciakeret nyomon követésére. A Helyhez kötött nyomkövetési módban a szerkesztőben közvetlenül a kamera alapértelmezett helye előtt elhelyezett tartalom (a továbbítás -Z) a felhasználó előtt jelenik meg az alkalmazás indításakor.
XRDevice.SetTrackingSpaceType(TrackingSpaceType.Stationary);
Névtér: UnityEngine.XR
Típus: InputTracking
Az olyan tiszta tájolású élmény érdekében, mint a 360 fokos videómegjelenítő (ahol a pozíciófej frissítése tönkretenné az illúziót), beállíthatja az XR-t . Az InputTracking.disablePositionalTracking értéke igaz:
InputTracking.disablePositionalTracking = true;
Az ülőméretű élmény érdekében, hogy a felhasználó később még frissebb legyen az ülő forrásnál, meghívhatja az XR-t. InputTracking.Recenter metódus:
InputTracking.Recenter();
Ha ülő szintű élményt hoz létre, az XR meghívásával a Unity világát a felhasználó aktuális vezető pozíciójában teheti meg. InputTracking.Recenter metódus.
A kamera hátterének beállítása
HA MRTK-t használ, a kamera háttere automatikusan konfigurálva és felügyelve lesz. XR SDK- vagy örökölt WSA-projektek esetén azt javasoljuk, hogy a kamera hátterét fekete színre állítsa a HoloLensre, és tartsa meg a VR-hez készült skyboxot.
Több kamera használata
Ha a jelenetben több kameraösszetevő is található, a Unity tudja, hogy melyik kamerát használja a sztereoszkopikus rendereléshez, amely alapján a GameObject tartalmazza a MainCamera címkét. Az örökölt XR-ben ezzel a címkével szinkronizálja a fejkövetést. Az XR SDK-ban a fejkövetést egy, a kamerához csatlakoztatott TrackedPoseDriver-szkript vezérli.
Megosztási mélységpufferek
Ha az alkalmazás mélységi pufferét windowsosra osztja, az alkalmazás a következőhöz renderelt headset típusától függően két fokozza a hologram stabilitását:
- A VR modern headsetjei a mélységi puffer használatakor gondoskodhatnak a pozíció-visszapréselésről, így a hologramok pozícióban és tájolásban is módosíthatók.
- A HoloLens headsetek többféle módszert is használnak. A HoloLens 1 automatikusan kijelöl egy fókuszpontot a mélységi puffer megadásakor, és optimalizálja a hologram stabilitását a legtöbb tartalmat metsző sík mentén. A HoloLens 2 a mélységi LSR használatával stabilizálja a tartalmat (lásd megjegyzések).
Az MRTK konfigurációs párbeszédpanelje megkísérli beállítani a mélységi pufferbeállításokat az XR SDK-hoz és az örökölt WSA-hoz is, de érdemes ellenőrizni ezeket a lapokat, és ellenőrizni a beállításokat a Unityben.
Annak beállítása, hogy a Unity-alkalmazás biztosít-e mélységi puffert a Windows számára:
- Nyissa meg a Projektbeállítások>szerkesztése>XR beépülő modulkezelést, és győződjön meg arról, hogy a menüelem ki van bontva.
- Kattintson a választott XR-futtatókörnyezetnek megfelelő menüelemre, legyen az Windows Mixed Reality vagy OpenXR. Emellett győződjön meg arról, hogy a megfelelő buildplatform van kiválasztva, mivel a Windows önálló és Univerzális Windows-platform lapjai is elérhetők.
- Engedélyezés és konfigurálás:
- OpenXR esetén válassza ki a mélységi formátumot vagy a "Nincs" lehetőséget a Mélységbeküldési mód legördülő menüben.
- Windows Mixed Reality esetén jelölje be vagy törölje a jelet a Megosztott mélység puffere jelölőnégyzetből. Ezután válasszon egy formátumot a Mélységpuffer formátuma legördülő listából.


Feljegyzés
A jobb teljesítmény érdekében általában 16 bites mélységi pufferek használata ajánlott. Ha azonban 16 bites mélységi formátumot használ, a rajzsablonpuffer szükséges effektusai (például néhány Unity felhasználói felület görgetőpanel) nem működnek, mert a Unity ebben a beállításban nem hoz létre rajzsablonpuffert . A 24 bites mélységi formátum egyidejű kiválasztása általában egy 8 bites rajzsablonpuffert hoz létre, ha a végpont grafikus platformján alkalmazható.
Annak beállítása, hogy a Unity-alkalmazás biztosít-e mélységi puffert a Windows számára:
- Nyissa meg a Project Settings>Player> Univerzális Windows-platform>lap>XR-beállításai lehetőséget.
- Bontsa ki a Windows Mixed Reality SDK-elemet .
- Jelölje be vagy törölje a jelet a Mélységi puffermegosztás engedélyezése jelölőnégyzetből. A mélységi puffermegosztás engedélyezése alapértelmezés szerint be van jelölve az új projektekben, de előfordulhat, hogy a régebbi projektekben alapértelmezés szerint nincs bejelölve.

A mélységi pufferek mindaddig javíthatják a vizualizáció minőségét, amíg a Windows pontosan le tudja képezni a képpontonkénti normalizált mélységi értékeket a mérőszámokban megadott távolságokra a Unityben a fő kamerán beállított közeli és távoli síkok használatával. Ha a renderelés jellemző módon kezeli a mélységi értékeket, itt általában rendben kell lennie, bár az áttetsző renderelés átmegy a mélységi pufferbe, miközben a meglévő szín képpontok felé mutat, összezavarhatja az újraprojeciót. Ha tudja, hogy a renderelési bérletek sok végső mélységi képpontot pontatlan mélységértékekkel hagynak el, valószínűleg jobb vizuális minőséget fog kapni a "Mélységi puffermegosztás engedélyezése" jelölőnégyzet bejelölésével.
Feljegyzés
A jobb teljesítmény érdekében általában 16 bites mélységi pufferek használata ajánlott. Ha azonban 16 bites mélységi formátumot használ, a rajzsablonpuffer szükséges effektusai (például néhány Unity felhasználói felület görgetőpanel) nem működnek, mert a Unity ebben a beállításban nem hoz létre rajzsablonpuffert . A 24 bites mélységi formátum egyidejű kiválasztása általában egy 8 bites rajzsablonpuffert hoz létre, ha a végpont grafikus platformján alkalmazható.
Vágósíkok használata
A felhasználóhoz túl közel álló tartalmak megjelenítése kényelmetlen lehet a vegyes valóságban. A Kamera összetevőn beállíthatja a közeli és távoli vágósíkokat .
- Válassza ki a fő kamerát a Hierarchia panelen
- Az Inspector panelen keresse meg a Kamera összetevő vágósíkjait, és módosítsa a Közeli szövegmezőt 0,3-ról 0,85-re. A még közelebb renderelt tartalom felhasználói kényelmetlenséget okozhat, és a renderelési távolságra vonatkozó irányelveknek megfelelően kerülni kell.
A kamera legutóbbi beállítása
Ha ülő szintű élményt hoz létre, az XR meghívásával a Unity világát a felhasználó aktuális vezető pozíciójában teheti meg. InputTracking.Recenter metódus az örökölt XR-ben vagy az XRInputSubsystem.TryRecenter metódusban az XR SDK-ban.
Teleportáció
Ez a funkció általában VR-élményekhez van fenntartva:
Az MRTK egy beépített teleportrendszert biztosít, amely automatikusan működik a csuklós kezek és vezérlők között.
Javasoljuk, hogy használja az MRTK teleportálási implementációját.
Ha úgy dönt, hogy nem használja az MRTK-t, a Unity teleportálási implementációt biztosít az XR Interaction Toolkitben.
Ha úgy dönt, hogy implementálja a sajátját, érdemes szem előtt tartani, hogy nem mozgathatja közvetlenül a kamerát. Mivel a Unity vezérelte a kamerát a fejkövetéshez, a kamerának szülőt kell adnia a hierarchiában, és át kell helyeznie a GameObjectet. Ez egyenértékű az MRTK Playspace-ével.
Javasoljuk, hogy használja az MRTK teleportálási implementációját.
Ha úgy dönt, hogy implementálja a sajátját, érdemes szem előtt tartani, hogy nem mozgathatja közvetlenül a kamerát. Mivel a Unity vezérelte a kamerát a fejkövetéshez, a kamerának szülőt kell adnia a hierarchiában, és át kell helyeznie a GameObjectet. Ez egyenértékű az MRTK Playspace-ével.
Újraprojectioni módok
Mind a HoloLens, mind a modern headsetek újraprojálják az alkalmazás által renderelt összes keretet, hogy a fotonok kibocsátásakor a felhasználó tényleges fejpozíciójának bármilyen téves kiszámíthatatlansága módosuljon.
Alapértelmezés szerint:
- A VR modern headsetjei gondoskodnak a pozíció-újraprojecióról, ha az alkalmazás mélységi puffert biztosít egy adott kerethez. A modern headsetek a hologramokat is módosítják a pozíció és a tájolás helytelensége érdekében. Ha nincs megadva mélységi puffer, a rendszer csak a tájolásban lévő téves kiszámíthatatlanságokat javítja ki.
- Az olyan holografikus headsetek , mint a HoloLens 2, gondoskodnak a pozíció-visszavételről, függetlenül attól, hogy az alkalmazás biztosítja-e a mélységi puffert. A holoLens-en mélységi pufferek nélkül is lehetséges a pozíció-újraprojeció, mivel a renderelés gyakran ritka a valós világ által biztosított stabil háttérrel.
Az MRTK jelenleg nem rendelkezik segítőkkel a reprojection módhoz. További információért tekintse meg a többi lap egyikét.
Az újraprojection mód úgy konfigurálható, hogy az XRDisplaySubsystem.reprojectionMode értéket a megfelelő értékre állítja.
Ha például csak a mereven karosszéria által zárolt tartalommal (például 360 fokos videótartalommal) készít tájolásos felületet, a reprojection módot explicit módon csak a ReprojectionMode.OrientationOnly beállítással állíthatja be.
Következő fejlesztési ellenőrzőpont
Ha a Unity fejlesztési útját követi, akkor az MRTK alapvető építőelemeinek felfedezése közben jár. Innen továbbléphet a következő építőelemre:
Vagy ugorjon a Mixed Reality platform képességeire és API-ira:
Bármikor visszatérhet a Unity fejlesztési ellenőrzőpontjaihoz .
Lásd még