Wanneer u een mixed reality headset draagt, wordt het midden van uw holografische wereld. Het Unity Camera-onderdeel verwerkt automatisch stereoscopische rendering en volgt uw hoofdbeweging en draaiing. Als u echter de visuele kwaliteit en hologramstabiliteit volledig wilt optimaliseren, moet u de hieronder beschreven camera-instellingen instellen.
HoloLens versus VR immersive headsets
De standaardinstellingen op het Unity Camera-onderdeel zijn voor traditionele 3D-toepassingen die een skybox-achtige achtergrond nodig hebben omdat ze geen echte wereld hebben.
Wanneer u op een insluitende headset werkt, wordt alles weergegeven wat de gebruiker ziet en wilt u de skybox waarschijnlijk behouden.
Wanneer u echter op een holografische headset zoals HoloLens draait, moet de echte wereld worden weergegeven achter alles wat de camera weergeeft. Stel de camera-achtergrond in op doorzichtig (in HoloLens wordt zwart weergegeven als transparant) in plaats van een Skybox-textuur:
Selecteer de hoofdcamera in het deelvenster Hiërarchie
Zoek in het deelvenster Inspector het onderdeel Camera en wijzig de vervolgkeuzelijst Clear Flags van Skybox in Solid Color
Selecteer de achtergrondkleurkiezer en wijzig de RGBA-waarden in (0, 0, 0, 0)
Als u dit instelt vanuit code, kunt u unity's gebruiken Color.clear
U kunt scriptcode gebruiken om tijdens runtime te bepalen of de headset insluitende of holografische is door displayOpaque te controleren op het actief actieve XRDisplaySubsystem.
U kunt scriptcode gebruiken om tijdens runtime te bepalen of de headset insluitende of holografische is door HolographicSettings.IsDisplayOpaque te controleren.
Camera-instelling
Welke ervaring u ook ontwikkelt, de hoofdcamera is altijd het primaire stereorenderingsonderdeel dat is gekoppeld aan het hoofdscherm van uw apparaat. Het is eenvoudiger om uw app in te delen als u zich de beginpositie van de gebruiker voorstelt als (X: 0, Y: 0, Z: 0). Aangezien de hoofdcamera beweging van het hoofd van de gebruiker volgt, kan de beginpositie van de gebruiker worden ingesteld door de beginpositie van de hoofdcamera in te stellen.
De centrale keuze die u moet maken, is of u ontwikkelt voor HoloLens- of VR-immersive headsets. Zodra u dat hebt gedaan, gaat u verder met de instellingensectie die van toepassing is.
Installatie van HoloLens-camera
Voor HoloLens-apps moet u ankers gebruiken voor objecten die u wilt vergrendelen voor de scèneomgeving. We raden u aan niet-gebonden ruimte te gebruiken om de stabiliteit te maximaliseren en ankers in meerdere ruimten te maken.
Volg deze stapsgewijze zelfstudie om Mixed Reality Toolkit toe te voegen en automatisch te configureren in uw Unity-project. Het is ook mogelijk om rechtstreeks met de klasse MixedRealityPlayspace van MRTK voor Unity te werken en de doelschaal in te stellen op wereld:
MRTK moet de positie van de playspace en camera automatisch afhandelen, maar het is goed om het volgende te controleren:
Vouw in het deelvenster Hierarchy het MixedRealityPlayspace GameObject uit en zoek het onderliggende object Main Camera
Zoek in het deelvenster Inspector het onderdeel Transformeren en wijzig de positiein (X: 0, Y: 0, Z: 0)
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Device);
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Unbounded); // Recommendation for OpenXR
U kunt ARSession gebruiken voor HoloLens-toepassingen, die beter werken met ankers en ARKit/ARCore.
Belangrijk
AR-sessie en gerelateerde functies moeten AR Foundation zijn geïnstalleerd.
Het is ook mogelijk om de camerawijzigingen handmatig toe te passen zonder ARSession te gebruiken:
Hoofdcamera selecteren in het deelvenster Hiërarchie
Zoek in het deelvenster Inspector het onderdeel Transformeren en wijzig de positiein (X: 0, Y: 0, Z: 0)
Camera in het deelvenster Inspector in Unity
Een TrackedPoseDriver toevoegen aan de hoofdcamera
Hoofdcamera selecteren in het deelvenster Hiërarchie
Zoek in het deelvenster Inspector het onderdeel Transformeren en wijzig de positiein (X: 0, Y: 0, Z: 0)
Camera in het deelvenster Inspector in Unity
Ga naar de sectie Overige instellingen van de Windows Store Player-instellingen
Kies Windows Mixed Reality als het apparaat, dat mogelijk wordt vermeld als Windows Holographic in oudere versies van Unity
Ondersteunde virtual reality selecteren
Omdat het Main Camera-object automatisch wordt getagd als de camera, zorgt Unity voor alle bewegingen en vertaling.
Notitie
Deze instellingen moeten worden toegepast op de camera in elke scène van uw app.
Wanneer u een nieuwe scène in Unity maakt, bevat deze standaard een Main Camera GameObject in de hiërarchie die het cameraonderdeel bevat, maar mogelijk zijn de instellingen niet correct toegepast.
VR-camera instellen
Windows Mixed Reality ondersteunt apps in een breed scala aan ervaringsschalen, van alleen oriëntatie- en zit-apps omhoog via apps op ruimteschaal. Op HoloLens kunt u verder gaan en apps op wereldschaal bouwen waarmee gebruikers meer dan 5 meter kunnen lopen en een hele verdieping van een gebouw en verder kunnen verkennen.
Uw eerste stap bij het bouwen van een mixed reality-ervaring in Unity is om te bepalen op welke ervaringsschaal uw app gericht is:
Ga naar de sectie Overige instellingen van de Windows Store Player-instellingen
Kies Windows Mixed Reality als het apparaat, dat mogelijk wordt vermeld als Windows Holographic in oudere versies van Unity
Ondersteunde virtual reality selecteren
Omdat het Main Camera-object automatisch wordt getagd als de camera, zorgt Unity voor alle bewegingen en vertaling.
Notitie
Deze instellingen moeten worden toegepast op de camera in elke scène van uw app.
Wanneer u een nieuwe scène maakt in Unity, bevat deze standaard een Main Camera GameObject in de hiërarchie die het Camera-onderdeel bevat, maar de onderstaande instellingen niet correct zijn toegepast.
Naamruimte:UnityEngine.XR Type:XRDevice
Voor een ervaring op staande schaal of ruimteschaal moet u inhoud ten opzichte van de vloer plaatsen. U redeneert over de vloer van de gebruiker met behulp van de ruimtelijke fase, die de door de gebruiker gedefinieerde oorsprong op vloerniveau en optionele ruimtegrens vertegenwoordigt, die tijdens de eerste uitvoering is ingesteld.
Om ervoor te zorgen dat Unity werkt met het wereldcoördinaatsysteem op verdiepingsniveau, kunt u instellen en testen of Unity gebruikmaakt van het ruimtetype Ruimte voor tracering van RoomScale:
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.
}
Als SetTrackingSpaceType waar retourneert, heeft Unity het wereldcoördinaatsysteem gewijzigd om het referentieframe van de fase bij te houden.
Als SetTrackingSpaceType onwaar retourneert, kan Unity niet overschakelen naar het referentiekader voor fases, waarschijnlijk omdat de gebruiker geen vloer heeft ingesteld in hun omgeving. Hoewel een foutieve retourwaarde niet gebruikelijk is, kan het gebeuren als de fase is ingesteld in een andere ruimte en het apparaat wordt verplaatst naar de huidige ruimte zonder dat de gebruiker een nieuwe fase instelt.
Zodra uw app het ruimtetype ruimte voor ruimte bijhouden van RoomScale heeft ingesteld, wordt de inhoud die op het y=0-vlak wordt geplaatst, weergegeven op de vloer. De oorsprong op 0, 0, 0 is de specifieke plaats op de vloer waar de gebruiker stond tijdens het instellen van de ruimte, met -Z die de voorwaartse richting vertegenwoordigt die ze tijdens de installatie hadden.
Ga naar de sectie Overige instellingen van de Windows Store Player-instellingen
Kies Windows Mixed Reality als het apparaat, dat mogelijk wordt vermeld als Windows Holographic in oudere versies van Unity
Ondersteunde virtual reality selecteren
Omdat het Main Camera-object automatisch wordt getagd als de camera, zorgt Unity voor alle bewegingen en vertaling.
Notitie
Deze instellingen moeten worden toegepast op de camera in elke scène van uw app.
Wanneer u een nieuwe scène maakt in Unity, bevat deze standaard een Main Camera GameObject in de hiërarchie die het Camera-onderdeel bevat, maar de onderstaande instellingen niet correct zijn toegepast.
Naamruimte:UnityEngine.XR Type:XRDevice
Als u een ervaring met alleen standen of zitplaatsen wilt bouwen, moet u Unity instellen op het type stationaire traceringsruimte. Stationaire traceringsruimte stelt het wereldcoördinaatsysteem van Unity in om het stationaire referentiekader bij te houden. In de stationaire traceringsmodus wordt inhoud die in de editor wordt geplaatst vlak voor de standaardlocatie van de camera (vooruit is -Z) weergegeven voor de gebruiker wanneer de app wordt gestart.
Voor een pure oriëntatie-only ervaring zoals een videoviewer van 360 graden (waarbij positionele hoofdupdates de illusie zouden verpesten), kunt u vervolgens XR instellen . InputTracking.disablePositionalTracking naar true:
InputTracking.disablePositionalTracking = true;
Voor een ervaring met een zitschaal kunt u de XR aanroepen om de gebruiker later recenter de geplaatste oorsprong te laten aanroepen . Methode InputTracking.Recenter :
Als u MRTK gebruikt, wordt de achtergrond van de camera automatisch geconfigureerd en beheerd. Voor XR SDK- of Oudere WSA-projecten raden we u aan de achtergrond van de camera in te stellen op effen zwart op HoloLens en de skybox voor VR te behouden.
Meerdere camera's gebruiken
Wanneer er meerdere Camera-onderdelen in de scène zijn, weet Unity welke camera moet worden gebruikt voor stereoscopische rendering op basis van welk GameObject de MainCamera-tag heeft. In de verouderde XR wordt deze tag ook gebruikt om het bijhouden van hoofden te synchroniseren. In XR SDK wordt het bijhouden van hoofden aangestuurd door een TrackedPoseDriver-script dat is gekoppeld aan de camera.
Dieptebuffers voor delen
Als u de dieptebuffer van uw app deelt met Windows, krijgt u elk frame een van twee boosts in hologramstabiliteit, op basis van het type headset dat u weergeeft voor:
VR immersive headsets kunnen zorgen voor positionele reprojectie wanneer er een dieptebuffer wordt geleverd, waardoor uw hologrammen worden aangepast voor verkeerd dicteren in zowel de positie als de afdrukstand.
HoloLens-headsets hebben een aantal verschillende methoden. HoloLens 1 selecteert automatisch een focuspunt wanneer er een dieptebuffer wordt opgegeven, waardoor de stabiliteit van hologrammen wordt geoptimaliseerd op het vlak dat de meeste inhoud doorkruist. HoloLens 2 zal inhoud stabiliseren met behulp van Depth LSR (zie Opmerkingen).
Het configuratiedialoogvenster van MRTK probeert dieptebufferinstellingen in te stellen voor zowel XR SDK als verouderde WSA, maar het is goed om deze tabbladen te controleren en de instellingen in Unity te controleren.
Als u wilt instellen of uw Unity-app een dieptebuffer voor Windows biedt:
Ga naar Projectinstellingen>bewerken>XR-invoegtoepassingsbeheer en zorg ervoor dat het menu-item is uitgevouwen.
Klik op het menu-item dat overeenkomt met de XR-runtime die u hebt gekozen, Windows Mixed Reality of OpenXR. Zorg er bovendien voor dat het juiste buildplatform is geselecteerd, omdat tabbladen voor zowel windows standalone als Universeel Windows-platform beschikbaar zijn.
Ga als volgende te werk om het volgende in te schakelen en te configureren:
Voor OpenXR selecteert u een dieptenotatie of 'Geen' in de vervolgkeuzelijst Diepteverzendingsmodus .
Schakel voor Windows Mixed Reality het selectievakje Gedeelde dieptebuffer in of uit. Selecteer vervolgens een indeling in de vervolgkeuzelijst Dieptebufferindeling .
Notitie
Het wordt over het algemeen aanbevolen om 16-bits dieptebuffers te gebruiken voor verbeterde prestaties. Als u echter een 16-bits diepteindeling gebruikt, werken de vereiste effecten voor de stencilbuffer (zoals sommige schuifvensters van de Unity-gebruikersinterface) niet omdat Unity geen stencilbuffer maakt in deze instelling. Als u een 24-bits diepteindeling selecteert, wordt over het algemeen een 8-bits stencilbuffer gemaakt, indien van toepassing op het platform voor eindpuntafbeeldingen.
Als u wilt instellen of uw Unity-app een dieptebuffer voor Windows biedt:
Ga naar Project Settings>Player> bewerken>Universeel Windows-platform tabblad>XR-instellingen.
Vouw het item Windows Mixed Reality SDK uit.
Schakel het selectievakje Dieptebuffer delen in of uit. Het delen van dieptebuffers is standaard ingeschakeld in nieuwe projecten, maar is mogelijk standaard uitgeschakeld in oudere projecten.
Een dieptebuffer kan de visuele kwaliteit verbeteren, zolang Windows de genormaliseerde dieptewaarden per pixel weer in uw dieptebuffer kan toewijzen aan afstanden in meters, met behulp van de bijna- en verre vliegtuigen die u in Unity hebt ingesteld op de hoofdcamera. Als de weergave dieptewaarden op gebruikelijke manieren doorgeeft, moet u hier over het algemeen goed zijn, hoewel de translucente weergave die naar de dieptebuffer wordt geschreven, wordt doorgegeven aan bestaande kleur pixels, de reprojectie kan verwarren. Als u weet dat uw renderpassen veel van uw uiteindelijke diepte pixels met onjuiste dieptewaarden laten staan, krijgt u waarschijnlijk een betere visuele kwaliteit door 'Dieptebuffer delen inschakelen' uit te schakelen.
Notitie
Het wordt over het algemeen aanbevolen om 16-bits dieptebuffers te gebruiken voor verbeterde prestaties. Als u echter een 16-bits diepteindeling gebruikt, werken de vereiste effecten voor de stencilbuffer (zoals sommige schuifvensters van de Unity-gebruikersinterface) niet omdat Unity geen stencilbuffer maakt in deze instelling. Als u een 24-bits diepteindeling selecteert, wordt over het algemeen een 8-bits stencilbuffer gemaakt, indien van toepassing op het platform voor eindpuntafbeeldingen.
Knipvlakken gebruiken
Het weergeven van inhoud die te dicht bij de gebruiker ligt, kan oncomfortabel zijn in mixed reality. U kunt de knipvlakken in de buurt en ver aanpassen op het cameraonderdeel.
Selecteer de hoofdcamera in het deelvenster Hiërarchie
Zoek in het deelvenster Inspector het cameraonderdeelClipping Planes en wijzig het tekstvak Near van 0.3 in 0,85. Inhoud die nog dichter wordt weergegeven, kan leiden tot ongemak van gebruikers en moet worden vermeden volgens de richtlijnen voor de weergaveafstand.
MRTK biedt een in-box teleportsysteem dat automatisch werkt met gearticuleerde handen en controllers.
We raden u aan de teleportatie-implementatie van MRTK te gebruiken.
Als u ervoor kiest om MRTK niet te gebruiken, biedt Unity een teleportatie-implementatie in de XR Interaction Toolkit.
Als u ervoor kiest om uw eigen te implementeren, is het goed om er rekening mee te houden dat u de camera niet rechtstreeks kunt verplaatsen. Als gevolg van unity's controle over de camera voor het volgen van hoofden, moet u de camera een bovenliggend element in de hiërarchie geven en dat GameObject in plaats daarvan verplaatsen. Dit is het equivalent van de Playspace van MRTK.
We raden u aan de teleportatie-implementatie van MRTK te gebruiken.
Als u ervoor kiest om uw eigen te implementeren, is het goed om er rekening mee te houden dat u de camera niet rechtstreeks kunt verplaatsen. Als gevolg van unity's controle over de camera voor het volgen van hoofden, moet u de camera een bovenliggend element in de hiërarchie geven en dat GameObject in plaats daarvan verplaatsen. Dit is het equivalent van de Playspace van MRTK.
Modi voor opnieuw projecteren
Zowel HoloLens- als insluitende headsets projecteren elk frame dat uw app weergeeft om aan te passen aan eventuele onjuiste interpretatie van de werkelijke hoofdpositie van de gebruiker wanneer fotonen worden verzonden.
Standaard:
VR immersive headsets zorgen voor positionele herprojectie als de app een dieptebuffer biedt voor een bepaald frame. Met insluitende headsets worden uw hologrammen ook aangepast voor verkeerd dicteren in zowel de positie als de stand. Als er geen dieptebuffer wordt opgegeven, corrigeert het systeem alleen onjuiste interpretaties in de afdrukstand.
Holographic headsets zoals HoloLens 2 zorgen voor positionele reprojectie, ongeacht of de app de dieptebuffer levert of niet. Positionele reprojectie is mogelijk zonder dieptebuffers op HoloLens, omdat rendering vaak wordt geparseerd met een stabiele achtergrond die wordt geleverd door de echte wereld.
De reprojectiemodus kan worden geconfigureerd door HolographicSettings.ReprojectionMode in te stellen op de juiste waarde.
Als u bijvoorbeeld een oriëntatie-ervaring bouwt met strikt vergrendelde inhoud (bijvoorbeeld video-inhoud van 360 graden), kunt u de modus voor opnieuw projecteren expliciet instellen op de afdrukstand door deze in te stellen op HolographicReprojectionMode.OrientationOnly.
Volgend controlepunt voor ontwikkeling
Als u het Unity-ontwikkeltraject volgt dat we hebben opgesteld, bevindt u zich midden in het verkennen van de bouwstenen van de MRTK-kern. Vanaf hier kunt u doorgaan naar de volgende bouwsteen: