När du bär 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. Men för att optimera den visuella kvaliteten och hologramstabiliteten helt bör du ange de kamerainställningar som beskrivs nedan.
HoloLens vs VR-integrerande 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 en 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 kamerabakgrunden ska vara transparent (i HoloLens renderas svart som transparent) i stället för en Skybox-struktur:
Välj huvudkameran på hierarkipanelen
Leta upp komponenten Kamera i panelen Kontroll och ändra listrutan Clear Flags (Rensa flaggor) från Skybox till Enfärgad
Välj färgväljaren Bakgrund och ändra RGBA-värdena till (0, 0, 0, 0, 0)
Om du anger detta från kod kan du använda Unitys Color.clear
För att kontrollera kamerans ogenomskinlighet har MixedRealityCamera-systemet en IsOpaque egenskap.
CoreServices.CameraSystem.IsOpaque;
Namnområde:UnityEngine.XR Typ:XRDisplaySubsystem
Du kan använda skriptkod för att avgöra vid körning om headsetet är uppslukande eller holografiskt genom att kontrollera displayOpaque på det aktivt aktiva XRDisplaySubsystem.
Du kan använda skriptkod för att avgöra vid körning om headsetet är uppslukande eller holografiskt genom att kontrollera HolographicSettings.IsDisplayOpaque.
Kamerakonfiguration
Oavsett vilken typ av upplevelse du utvecklar är huvudkameran alltid den primära stereoåtergivningskomponenten som är kopplad till enhetens huvudmonterade bildskärm. Det blir enklare att lägga ut din app om du föreställer dig användarens startposition som (X: 0, Y: 0, Z: 0). Eftersom huvudkameran spårar förflyttning av användarens huvud kan användarens startposition anges 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 i 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 om du vill lägga till och automatiskt konfigurera Mixed Reality Toolkit i Unity-projektet. 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 hierarkipanelen expanderar du MixedRealityPlayspace GameObject och letar upp det underordnade objektet Main Camera
Leta upp transform-komponenten på 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 upp transform-komponenten på panelen Kontroll och ändra position till (X: 0, Y: 0, Z: 0)
Kamera i fönstret Inspector i Unity
Lägg till en TrackedPoseDriver i huvudkameran
Välj Huvudkamera på hierarkipanelen
Leta upp transform-komponenten på panelen Kontroll och ändra position till (X: 0, Y: 0, Z: 0)
Kamera i fönstret Inspector 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.
Anteckning
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 kanske inte har inställningarna korrekt tillämpade.
INSTALLATION av VR-kamera
Windows Mixed Reality stöder 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å längre och skapa appar i världsskala som låter användarna 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.
Anteckning
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 ett GameObject för huvudkameran i hierarkin som innehåller kamerakomponenten, men inställningarna nedan tillämpas inte korrekt.
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 konfigurerats under 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 space-typen RoomScale-spårning:
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 för scenen.
Om SetTrackingSpaceType returnerar falskt kunde Unity inte växla till fasramen för referens, troligen 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 utrymmestypen RoomScale-spårning visas innehåll som placerats 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, där -Z representerar den framåtriktade riktning 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.
Anteckning
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 ett GameObject för huvudkameran i hierarkin som innehåller kamerakomponenten, men inställningarna nedan tillämpas inte korrekt.
Namnområde:UnityEngine.XR Typ:XRDevice
För att skapa en orienteringsbaserad eller sittande skalningsupplevelse måste du ställa in Unity på utrymmestypen Stationär spårning. 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 (framåt är -Z) framför användaren när appen startas.
För en ren orienteringsupplevelse som en 360-graders videovisare (där positionella huvuduppdateringar skulle förstöra illusionen) kan du sedan ställa in XR. InputTracking.disablePositionalTracking till true:
InputTracking.disablePositionalTracking = true;
Om du vill ha en platsbaserad skalningsupplevelse kan du anropa XR för att låta användaren senare använda det sittande ursprunget . InputTracking.Recenter-metod :
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 taggen MainCamera. 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
Genom att dela 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-integrerande headset kan ta hand om positionsreprojektion när en djupbuffert tillhandahålls, vilket justerar 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 mest innehåll. 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 kontrollera 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 XR-körningen 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 Buffert för delat djup. Välj sedan ett format i listrutan Djupbuffertformat .
Anteckning
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 rullningspaneler i Unity-användargränssnittet) 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 tillämpligt på slutpunktsgrafikplattformen.
Så här anger du om unity-appen ska tillhandahålla en djupbuffert till Windows:
Gå till Redigera>projektinställningar>Player>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 är markerat 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 bildpunkt 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 återgivningen passerar hanterar djupvärden på typiska sätt bör du vanligtvis vara bra här, även om genomskinliga renderingspass som skriver till djupbufferten samtidigt som de visas till befintliga färgpunkter kan förvirra omprojektionen. Om du vet att dina återgivningspass kommer att lämna många av dina sista djuppunkter med felaktiga djupvärden, kommer du troligen att få bättre visuell kvalitet genom att avmarkera "Aktivera delning av djupbuffert".
Anteckning
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 rullningspaneler i Unity-användargränssnittet) 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 tillämpligt på slutpunktsgrafikplattformen.
Använda klippplan
Att återge innehåll som är för nära användaren kan vara obekvämt i mixad verklighet. Du kan justera de närliggande och avlägsna klippplanerna på kamerakomponenten.
Välj huvudkameran på hierarkipanelen
Leta upp kamerakomponentenUrklippsplan i panelen Kontroll och ändra textrutan Near (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 inkorgsteleporteringssystem 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 gameobject-objektet 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 gameobject-objektet i stället. Detta motsvarar MRTK:s spelyta.
Återprojektionslägen
Både HoloLens och integrerande headset kommer att återskapa varje ram som appen renderar för att justera för eventuella felprediction av användarens faktiska huvudposition när fotoner genereras.
Som standard:
VR-integrerande headset tar hand om positionell reprojection om appen tillhandahåller en djupbuffert för en viss ram. Integrerande headset justerar också hologram för felprediction i både position och orientering. Om det inte finns någon djupbuffert korrigerar systemet bara felpredictions i orienteringen.
Holografiska headset som HoloLens 2 tar hand om positionell reprojection oavsett om appen tillhandahåller sin djupbuffert eller inte. Positionell reprojection är möjlig 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 orienteringsupplevelse med strikt kroppslåst innehåll (till exempel 360-graders videoinnehåll) kan du uttryckligen ange återprojektionsläget till orientering endast genom att ange det till ReprojectionMode.OrientationOnly.
Om du till exempel skapar en orienteringsupplevelse med strikt kroppslåst innehåll (till exempel 360-graders videoinnehåll) kan du uttryckligen ange återprojektionslä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ärnbyggstenarna. Härifrån kan du fortsätta till nästa byggblock: