När du använder ett headset för mixad verklighet blir det centrum för din holografiska värld. Unity Camera-komponenten hanterar automatiskt stereoskopisk återgivning och följer din huvudrörelse och rotation. För att helt optimera den visuella kvaliteten och hologramstabiliteten bör du dock ange de kamerainställningar som beskrivs nedan.
HoloLens vs VR-uppslukande headset
Standardinställningarna för Unity Camera-komponenten är för traditionella 3D-program, som behöver en skybox-liknande bakgrund eftersom de inte har någon verklig värld.
När du kör på ett uppslukande headset återger du allt som användaren ser, och därför vill du förmodligen behålla skyboxen.
Men när du kör på ett holografiskt headset som HoloLens bör den verkliga världen visas bakom allt som kameran renderar. Ange att kamerans bakgrund ska vara transparent (i HoloLens återges svart som transparent) i stället för en Skybox-textur:
Välj huvudkameran på hierarkipanelen
Leta reda på kamerakomponenten i panelen Inspector och ändra listrutan Rensa flaggor från Skybox till Solid Color
Välj färgväljaren Bakgrund och ändra RGBA-värdena till (0, 0, 0, 0)
Om du anger detta från kod kan du använda Unitys Color.clear
Du kan använda skriptkod för att vid körning avgöra om headsetet är uppslukande eller holografiskt genom att kontrollera displayOpaque på XRDisplaySubsystem som körs aktivt.
Du kan använda skriptkod för att vid körning avgöra om headsetet är uppslukande eller holografiskt genom att kontrollera HolographicSettings.IsDisplayOpaque.
Kamerainstallation
Oavsett vilken typ av upplevelse du utvecklar är huvudkameran alltid den primära stereorenderingskomponenten som är kopplad till enhetens huvudmonterade skärm. Det blir enklare att lägga ut appen om du föreställer dig att användarens startposition är (X: 0, Y: 0, Z: 0). Eftersom huvudkameran spårar förflyttning av användarens huvud kan användarens startposition ställas in genom att ange startpositionen för huvudkameran.
Det centrala valet du behöver göra är om du utvecklar för HoloLens- eller VR-uppslukande headset. När du har fått det går du vidare till det installationsavsnitt som gäller.
Installation av HoloLens-kamera
För HoloLens-appar måste du använda fästpunkter för alla objekt som du vill låsa till scenmiljön. Vi rekommenderar att du använder obundet utrymme för att maximera stabiliteten och skapa fästpunkter i flera rum.
Följ den här stegvisa självstudien för att lägga till och automatiskt konfigurera Mixed Reality Toolkit i ditt Unity-projekt. Det går också att arbeta direkt med klassen MixedRealityPlayspace från MRTK för Unity och ställa in målskalan på World:
MRTK bör hantera spelytans och kamerans position automatiskt, men det är bra att dubbelkolla:
Från panelen Hierarki expanderar du MixedRealityPlayspace GameObject och letar reda på huvudkameransunderordnade objekt
Leta reda på komponenten Transformera i panelen Kontroll och ändra Position till (X: 0, Y: 0, Z: 0)
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Device);
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Unbounded); // Recommendation for OpenXR
Du kan använda ARSession för HoloLens-program, vilket fungerar bättre med fästpunkter och ARKit/ARCore.
Viktigt!
AR-session och relaterade funktioner behöver AR Foundation installerat.
Det är också möjligt att tillämpa kameraändringarna manuellt utan att använda ARSession:
Välj Huvudkamera på hierarkipanelen
Leta reda på komponenten Transformera i panelen Kontroll och ändra Position till (X: 0, Y: 0, Z: 0)
Kamera i fönstret Kontroll i Unity
Lägg till en TrackedPoseDriver i huvudkameran
Välj Huvudkamera på hierarkipanelen
Leta reda på komponenten Transformera i panelen Kontroll och ändra Position till (X: 0, Y: 0, Z: 0)
Kamera i fönstret Kontroll i Unity
Gå till avsnittet Andra inställningar i Windows Store Player-inställningar
Välj Windows Mixed Reality som enhet, som kan visas som Windows Holographic i äldre versioner av Unity
Välj Virtuell verklighet som stöds
Eftersom huvudkameraobjektet automatiskt taggas som kamera, driver Unity all rörelse och översättning.
Kommentar
De här inställningarna måste tillämpas på kameran i varje scen i din app.
När du skapar en ny scen i Unity innehåller den som standard en Main Camera GameObject i hierarkin som innehåller kamerakomponenten, men som kanske inte har inställningarna korrekt tillämpade.
Installation av VR-kamera
Windows Mixed Reality har stöd för appar i en mängd olika upplevelseskalor, från appar med endast orientering och sittande skalning upp via appar i rumsskala. På HoloLens kan du gå vidare och skapa appar i världsskala som låter användare gå längre än 5 meter och utforska en hel våning i en byggnad och bortom.
Ditt första steg i att skapa en mixad verklighetsupplevelse i Unity är att avgöra vilken upplevelseskala appen ska rikta in sig på:
Om du skapar för HL2 rekommenderar vi att du skapar en upplevelse på ögonnivå, eller överväger att använda Scene Understanding för att resonera om scenens golv.
Gå till avsnittet Andra inställningar i Windows Store Player-inställningar
Välj Windows Mixed Reality som enhet, som kan visas som Windows Holographic i äldre versioner av Unity
Välj Virtuell verklighet som stöds
Eftersom huvudkameraobjektet automatiskt taggas som kamera, driver Unity all rörelse och översättning.
Kommentar
De här inställningarna måste tillämpas på kameran i varje scen i din app.
När du skapar en ny scen i Unity innehåller den som standard en Main Camera GameObject i hierarkin som innehåller komponenten Kamera, men som inte har inställningarna nedan korrekt tillämpade.
Namnområde:UnityEngine.XR Typ:XRDevice
För en upplevelse i stående skala eller rumsskala måste du placera innehåll i förhållande till golvet. Du resonerar om användarens golv med hjälp av den rumsliga fasen, som representerar användarens definierade ursprung på golvnivå och valfri rumsgräns, som konfigurerades under den första körningen.
För att säkerställa att Unity fungerar med sitt världskoordinatsystem på golvnivå kan du ange och testa att Unity använder roomscale-spårningsutrymmetypen:
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.
}
Om SetTrackingSpaceType returnerar true har Unity växlat sitt världskoordinatsystem för att spåra referensramen.
Om SetTrackingSpaceType returnerar falskt gick det inte att växla till scenramen för referensen, sannolikt eftersom användaren inte har konfigurerat en våning i sin miljö. Även om ett falskt returvärde inte är vanligt kan det inträffa om fasen har konfigurerats i ett annat rum och enheten flyttas till det aktuella rummet utan att användaren konfigurerar en ny fas.
När appen har ställt in roomscale-spårningsutrymmestypen visas innehåll som placeras på y=0-planet på golvet. Ursprunget vid 0, 0, 0 kommer att vara den specifika platsen på golvet där användaren stod under rumskonfigurationen, med -Z som representerar den framåtriktade riktning som de var riktade mot under installationen.
Gå till avsnittet Andra inställningar i Windows Store Player-inställningar
Välj Windows Mixed Reality som enhet, som kan visas som Windows Holographic i äldre versioner av Unity
Välj Virtuell verklighet som stöds
Eftersom huvudkameraobjektet automatiskt taggas som kamera, driver Unity all rörelse och översättning.
Kommentar
De här inställningarna måste tillämpas på kameran i varje scen i din app.
När du skapar en ny scen i Unity innehåller den som standard en Main Camera GameObject i hierarkin som innehåller komponenten Kamera, men som inte har inställningarna nedan korrekt tillämpade.
Namnområde:UnityEngine.XR Typ:XRDevice
För att skapa en orienteringsbaserad eller sittande skalningsupplevelse måste du ange Unity till den stationära spårningsutrymmestypen. Stationära spårningsutrymmen ställer in Unitys världskoordinatsystem för att spåra referensramen. I läget Stationär spårning visas innehåll som placeras i redigeraren precis framför kamerans standardplats (vidarebefordran är -Z) framför användaren när appen startas.
För en ren orienteringsupplevelse som en 360-graders videovisare (där positionshuvuduppdateringar skulle förstöra illusionen) kan du sedan ange XR. InputTracking.disablePositionalTracking till true:
InputTracking.disablePositionalTracking = true;
För en platsskala kan du anropa XR om du vill att användaren senare ska kunna använda det sittande ursprunget . InputTracking.Recenter-metod :
InputTracking.Recenter();
Om du skapar en upplevelse i sittande skala kan du senare använda Unitys världsuppkomst till användarens aktuella huvudposition genom att anropa XR. InputTracking.Recenter-metod .
Konfigurera kamerans bakgrund
Om du använder MRTK konfigureras och hanteras kamerans bakgrund automatiskt. För XR SDK- eller Legacy WSA-projekt rekommenderar vi att du ställer in kamerans bakgrund på helsvart på HoloLens och behåller skyboxen för VR.
Använda flera kameror
När det finns flera kamerakomponenter i scenen vet Unity vilken kamera som ska användas för stereoskopisk rendering baserat på vilken GameObject som har MainCamera-taggen. I äldre XR använder den också den här taggen för att synkronisera huvudspårning. I XR SDK drivs huvudspårning av ett TrackedPoseDriver-skript som är kopplat till kameran.
Dela djupbuffertar
Om du delar appens djupbuffert till Windows ger varje ram din app en av två ökningar i hologramstabilitet, baserat på vilken typ av headset du återger för:
VR-uppslukande headset kan ta hand om positionell reprojection när en djupbuffert tillhandahålls, justera dina hologram för felprediction i både position och orientering.
HoloLens-headset har några olika metoder. HoloLens 1 väljer automatiskt en fokuspunkt när en djupbuffert tillhandahålls, vilket optimerar hologramstabiliteten längs planet som korsar det mesta innehållet. HoloLens 2 stabiliserar innehållet med hjälp av Djup LSR (se Kommentarer).
MRTK:s konfigurationsdialogruta försöker ange inställningar för djupbuffert för både XR SDK och äldre WSA, men det är bra att kontrollera flikarna och verifiera inställningarna i Unity.
Så här anger du om Unity-appen ska tillhandahålla en djupbuffert till Windows:
Gå till Redigera>projektinställningar>XR-plugin-hantering och kontrollera att menyalternativet är expanderat.
Klicka på menyalternativet som motsvarar den XR-körning som du har valt, antingen Windows Mixed Reality eller OpenXR. Se dessutom till att rätt byggplattform är vald, eftersom flikar för både Fristående Windows och Universell Windows-plattform är tillgängliga.
Så här aktiverar och konfigurerar du:
För OpenXR väljer du antingen ett djupformat eller "Ingen" i listrutan Djupöverföringsläge .
För Windows Mixed Reality markerar eller avmarkerar du kryssrutan Delad djupbuffert . Välj sedan ett format i listrutan Djupbuffertformat .
Kommentar
Vi rekommenderar vanligtvis att du använder 16-bitars djupbuffertar för bättre prestanda. Men om du använder 16-bitars djupformat fungerar inte stencilbufferten som krävs (till exempel vissa Unity UI-rullningspaneler) eftersom Unity inte skapar en stencilbuffert i den här inställningen. Om du väljer 24-bitars djupformat omvänt skapas vanligtvis en 8-bitars stencilbuffert om det är tillämpligt på slutpunktsgrafikplattformen.
Så här anger du om Unity-appen ska tillhandahålla en djupbuffert till Windows:
Gå till Redigera>projektinställningar>Spelare> Universell Windows-plattform fliken>XR-inställningar.
Expandera Windows Mixed Reality SDK-objektet.
Markera eller avmarkera kryssrutan Aktivera delning av djupbuffert . Aktivera delning av djupbuffert markeras som standard i nya projekt, men kan ha avmarkerats som standard i äldre projekt.
En djupbuffert kan förbättra den visuella kvaliteten så länge Windows korrekt kan mappa de normaliserade djupvärdena per pixel i djupbufferten tillbaka till avstånd i meter, med hjälp av de när och fjärran plan som du har angett i Unity på huvudkameran. Om renderingen passerar hanterar djupvärden på typiska sätt bör du vanligtvis vara bra här, även om genomskinlig återgivning skickar den skrivningen till djupbufferten samtidigt som den visas till befintliga färgpixlar kan förvirra reprojectionen. Om du vet att dina återgivningspass lämnar många av dina sista djuppixlar med felaktiga djupvärden, kommer du sannolikt att få bättre visuell kvalitet genom att avmarkera "Aktivera djupbuffertdelning".
Kommentar
Vi rekommenderar vanligtvis att du använder 16-bitars djupbuffertar för bättre prestanda. Men om du använder 16-bitars djupformat fungerar inte stencilbufferten som krävs (till exempel vissa Unity UI-rullningspaneler) eftersom Unity inte skapar en stencilbuffert i den här inställningen. Om du väljer 24-bitars djupformat omvänt skapas vanligtvis en 8-bitars stencilbuffert om det är tillämpligt på slutpunktsgrafikplattformen.
Använda urklippsplan
Att återge innehåll för nära användaren kan vara obekvämt i mixad verklighet. Du kan justera de närliggande och avlägsna klippplanen på kamerakomponenten.
Välj huvudkameran på hierarkipanelen
I panelen Kontroll letar du reda på kamerakomponenten Urklippsplan och ändrar textrutan Nära från 0,3 till 0,85. Innehåll som återges ännu närmare kan leda till användarens obehag och bör undvikas enligt riktlinjerna för återgivningsavstånd.
MRTK tillhandahåller ett in-box teleporteringssystem som automatiskt fungerar över ledade händer och styrenheter.
Vi rekommenderar att du använder MRTK:s teleporteringsimplementering.
Om du väljer att inte använda MRTK tillhandahåller Unity en teleporteringsimplementering i XR Interaction Toolkit.
Om du väljer att implementera din egen är det bra att komma ihåg att du inte kan flytta kameran direkt. På grund av Unitys kontroll över kameran för huvudspårning måste du ge kameran en överordnad i hierarkin och flytta den GameObject i stället. Detta motsvarar MRTK:s spelyta.
Vi rekommenderar att du använder MRTK:s teleporteringsimplementering.
Om du väljer att implementera din egen är det bra att komma ihåg att du inte kan flytta kameran direkt. På grund av Unitys kontroll över kameran för huvudspårning måste du ge kameran en överordnad i hierarkin och flytta den GameObject i stället. Detta motsvarar MRTK:s spelyta.
Återprojectionlägen
Både HoloLens och uppslukande headset återskapar varje bildruta som appen renderar för att justera för eventuella felprediction av användarens faktiska huvudposition när fotoner genereras.
Som standard:
VR-uppslukande headset tar hand om positionell reprojection om appen tillhandahåller en djupbuffert för en viss ram. Uppslukande headset justerar också dina hologram för felprediction i både position och orientering. Om det inte finns någon djupbuffert korrigerar systemet bara felpredictions i orienteringen.
Holoographic-headset som HoloLens 2 tar hand om positionell reprojection oavsett om appen tillhandahåller sin djupbuffert eller inte. Positionell reprojection är möjligt utan djupbuffertar på HoloLens eftersom rendering ofta är gles med en stabil bakgrund som tillhandahålls av den verkliga världen.
Om du till exempel skapar en orienteringsmiljö med strikt kroppslåst innehåll (till exempel 360-graders videoinnehåll) kan du uttryckligen ange återgivningsläget till orientering endast genom att ställa in det på ReprojectionMode.OrientationOnly.
Om du till exempel skapar en orienteringsmiljö med strikt kroppslåst innehåll (till exempel 360-graders videoinnehåll) kan du uttryckligen ange återgivningsläget till orientering endast genom att ange det till HolographicReprojectionMode.OrientationOnly.
Nästa kontrollpunkt för utveckling
Om du följer unity-utvecklingsresan som vi har lagt fram är du mitt uppe i att utforska MRTK-kärnbyggnadsblocken. Härifrån kan du fortsätta till nästa byggblock: