Wanneer u een mixed reality-headset draagt, wordt deze het centrum van uw holografische wereld. De Unity Camera-component verwerkt automatisch stereoscopische rendering en volgt uw hoofdbeweging en draaiing. Als u echter de visuele kwaliteit en de stabiliteit van hologrammen volledig wilt optimaliseren, moet u de hieronder beschreven camera-instellingen instellen.
HoloLens versus VR immersive headsets
De standaardinstellingen van het Unity Camera-onderdeel zijn voor traditionele 3D-toepassingen, die een skybox-achtige achtergrond nodig hebben omdat ze geen echte wereld hebben.
Wanneer u een immersive headset gebruikt, geeft u alles weer wat de gebruiker ziet en dus wilt u de skybox waarschijnlijk behouden.
Bij het uitvoeren van een holografische headset zoals HoloLens moet de echte wereld echter worden weergegeven achter alles wat de camera weergeeft. Stel de achtergrond van de camera in op transparant (in HoloLens wordt zwart weergegeven als transparant) in plaats van een Skybox-patroon:
Selecteer de hoofdcamera in het deelvenster Hiërarchie
Zoek in het deelvenster Inspector het onderdeel Camera en wijzig de vervolgkeuzelijst Markeringen wissen van Skybox in Effen kleur
Selecteer de achtergrondkleurkiezer en wijzig de RGBA-waarden in (0, 0, 0, 0)
Als u dit instelt vanuit code, kunt u de Color.clear
Om de ondoorzichtigheid van de camera te controleren, heeft het MixedRealityCamera-systeem een IsOpaque eigenschap.
CoreServices.CameraSystem.IsOpaque;
Naamruimte:UnityEngine.XR Type:XRDisplaySubsystem
U kunt scriptcode gebruiken om tijdens runtime te bepalen of de headset immersive of holografisch is door displayOpaque te controleren op het actief actieve XRDisplaySubsystem.
U kunt scriptcode gebruiken om tijdens runtime te bepalen of de headset immersive of holografisch is door HolographicSettings.IsDisplayOpaque te controleren.
Camera-instelling
Wat voor soort ervaring u ook ontwikkelt, de hoofdcamera is altijd het primaire stereorenderingsonderdeel dat is gekoppeld aan het hoofdscherm van uw apparaat. Het is gemakkelijker om uw app in te delen als u zich de beginpositie van de gebruiker voorstelt als (X: 0, Y: 0, Z: 0). Omdat de hoofdcamera de beweging van het hoofd van de gebruiker volgt, kan de startpositie 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, gaat u verder met de instellingssectie die van toepassing is.
HoloLens-camera instellen
Voor HoloLens-apps moet u ankers gebruiken voor alle objecten die u wilt vergrendelen in de scèneomgeving. We raden u aan om 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 mixedRealityPlayspace-klasse 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 Hoofdcamera
Zoek in het deelvenster Inspector het onderdeel Transformeren en wijzig de positie in (X: 0, Y: 0, Z: 0)
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Device);
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Unbounded); // Recommendation for OpenXR
U kunt ARSession gebruiken voor HoloLens-toepassingen, wat beter werkt 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:
Selecteer Hoofdcamera in het deelvenster Hiërarchie
Zoek in het deelvenster Inspector het onderdeel Transformeren en wijzig de positie in (X: 0, Y: 0, Z: 0)
Camera in het deelvenster Inspector in Unity
Een TrackedPoseDriver toevoegen aan de hoofdcamera
Selecteer Hoofdcamera in het deelvenster Hiërarchie
Zoek in het deelvenster Inspector het onderdeel Transformeren en wijzig de positie in (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 hoofdcameraobject automatisch als de camera wordt gelabeld, 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 GameObject voor de hoofdcamera in de hiërarchie die het onderdeel Camera bevat, maar de instellingen zijn mogelijk niet correct toegepast.
VR-camera instellen
Windows Mixed Reality ondersteunt apps in een breed scala aan ervaringsschalen, van apps met alleen afdrukstanden en apps met zittende schaal omhoog tot apps op ruimteschaal. Op HoloLens kunt u verder gaan en wereldwijde apps bouwen waarmee gebruikers meer dan 5 meter kunnen lopen en een hele verdieping van een gebouw en daarbuiten kunnen verkennen.
Uw eerste stap bij het bouwen van een mixed reality-ervaring in Unity is om te bepalen op welke ervaringsschaal uw app is gericht:
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 hoofdcameraobject automatisch als de camera wordt gelabeld, 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 gameobject voor de hoofdcamera in de hiërarchie dat het onderdeel Camera bevat, maar waarop de onderstaande instellingen niet correct zijn toegepast.
Naamruimte:UnityEngine.XR Type:XRApparaat
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 gedefinieerde oorsprong op het niveau van de gebruiker en de optionele ruimtegrens vertegenwoordigt, die tijdens de eerste uitvoering zijn ingesteld.
Om ervoor te zorgen dat Unity werkt met het wereldcoördinaatsysteem op vloerniveau, kunt u instellen en testen of Unity gebruikmaakt van het ruimtetype RoomScale-traceringsruimte:
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 true retourneert, is het wereldcoördinaatsysteem van Unity overgeschakeld om het referentiekader voor de fase te volgen.
Als SetTrackingSpaceType false retourneert, kan Unity niet overschakelen naar het referentiekader voor de fase, waarschijnlijk omdat de gebruiker geen verdieping in de omgeving heeft ingesteld. Hoewel een valse retourwaarde niet gebruikelijk is, kan dit gebeuren als het podium in een andere ruimte is ingesteld en het apparaat naar de huidige ruimte wordt verplaatst zonder dat de gebruiker een nieuwe fase instelt.
Zodra uw app het type Ruimte voor het traceren van RoomScale heeft ingesteld, wordt inhoud die op het y=0-vlak is geplaatst, weergegeven op de vloer. De oorsprong bij 0, 0, 0 is de specifieke plaats op de vloer waar de gebruiker zich bevond tijdens de installatie van de ruimte, waarbij -Z de richting aangeeft waarmee ze tijdens de installatie werden geconfronteerd.
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
Selecteer Virtual Reality Supported
Omdat het object Hoofdcamera automatisch wordt gelabeld 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 gameobject voor de hoofdcamera in de hiërarchie dat het onderdeel Camera bevat, maar waarop de onderstaande instellingen niet correct zijn toegepast.
Naamruimte:UnityEngine.XR Type:XRApparaat
Als u een ervaring met alleen oriëntatie of zittende schaal wilt bouwen, moet u Unity instellen op het type Stationaire traceringsruimte. De ruimte voor stationaire tracering stelt het wereldcoördinaatsysteem van Unity in om het stationaire referentiekader te volgen. In de modus Stationair volgen wordt inhoud die in de editor wordt geplaatst vlak voor de standaardlocatie van de camera (voorwaarts is -Z) weergegeven voor de gebruiker wanneer de app wordt gestart.
Als u MRTK gebruikt, wordt de achtergrond van de camera automatisch geconfigureerd en beheerd. Voor XR SDK- of verouderde 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 hoofdtracering aangestuurd door een TrackedPoseDriver-script dat aan de camera is gekoppeld.
Dieptebuffers delen
Als u de dieptebuffer van uw app deelt met Windows elk frame, krijgt uw app een van twee extra stabiliteitsverbeteringen in hologrammen, op basis van het type headset waarvoor u rendert:
VR immersive headsets kunnen zorgen voor positionele herprojectie wanneer er een dieptebuffer wordt geleverd, waarbij uw hologrammen worden aangepast voor een verkeerde beoordeling in zowel positie als richting.
HoloLens-headsets hebben een aantal verschillende methoden. HoloLens 1 selecteert automatisch een focuspunt wanneer er een dieptebuffer wordt geleverd, waardoor de stabiliteit van het hologram wordt geoptimaliseerd in het vlak dat de meeste inhoud doorkruist. HoloLens 2 stabiliseren de inhoud met behulp van Depth LSR (zie Opmerkingen).
In het configuratiedialoogvenster van MRTK wordt geprobeerd 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.
Instellen of uw Unity-app een dieptebuffer voor Windows biedt:
Ga naarProjectinstellingen>bewerken>XR-invoegtoepassingsbeheer en controleer of 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 er tabbladen voor zowel windows standalone als Universeel Windows-platform beschikbaar zijn.
Inschakelen en configureren:
Voor OpenXR selecteert u een diepte-indeling of 'Geen' in de vervolgkeuzelijst Modus diepteverzending .
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 betere prestaties. Als u echter de 16-bits diepteindeling gebruikt, werken vereiste effecten voor stencilbuffer (zoals sommige schuifpanelen van de Unity-gebruikersinterface) niet omdat Unity in deze instelling geen stencilbuffer maakt . Als u daarentegen een 24-bits diepteindeling selecteert, wordt in het algemeen een 8-bits stencilbuffer gemaakt, indien van toepassing op het platform voor afbeeldingen van eindpunten.
Instellen of uw Unity-app een dieptebuffer voor Windows biedt:
Ga naarProjectinstellingen>bewerken>Player>Universeel Windows-platform tabblad>XR-instellingen.
Vouw het Windows Mixed Reality SDK-item uit.
Schakel het selectievakje Dieptebuffer delen inschakelen in of uit. Dieptebuffer delen inschakelen 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 in uw dieptebuffer nauwkeurig kan toewijzen aan afstanden in meters, met behulp van de nabije en verre vlakken die u in Unity hebt ingesteld op de hoofdcamera. Als uw render dieptewaarden op een gebruikelijke manier verwerkt, is het hier over het algemeen prima, hoewel doorschijnende renderdoorgangen die schrijven naar de dieptebuffer terwijl ze worden weergegeven naar bestaande kleuren pixels, de herprojectie verwarrend kunnen zijn. Als u weet dat uw weergaven veel van uw uiteindelijke diepte pixels met onnauwkeurige dieptewaarden zullen achterlaten, krijgt u waarschijnlijk een betere visuele kwaliteit door Het uitschakelen van het selectievakje Dieptebuffer delen inschakelen uit te schakelen.
Notitie
Het wordt over het algemeen aanbevolen om 16-bits dieptebuffers te gebruiken voor betere prestaties. Als u echter de 16-bits diepteindeling gebruikt, werken vereiste effecten voor stencilbuffer (zoals sommige schuifpanelen van de Unity-gebruikersinterface) niet omdat Unity in deze instelling geen stencilbuffer maakt . Als u daarentegen een 24-bits diepteindeling selecteert, wordt in het algemeen een 8-bits stencilbuffer gemaakt, indien van toepassing op het platform voor afbeeldingen van eindpunten.
Knipvlakken gebruiken
Het weergeven van inhoud te dicht bij de gebruiker kan ongemakkelijk zijn in mixed reality. U kunt de clipvlakken dichtbij en ver in het onderdeel Camera aanpassen.
Selecteer de hoofdcamera in het deelvenster Hiërarchie
Zoek in het deelvenster Inspector de cameracomponentKnipvlakken en wijzig het tekstvak Near van 0,3 in 0,85. Inhoud die nog dichterbij wordt weergegeven, kan leiden tot ongemak voor gebruikers en moet worden vermeden volgens de richtlijnen voor weergaveafstand.
MRTK biedt een in-box teleportsysteem dat automatisch werkt op gelede 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 te onthouden dat u de camera niet rechtstreeks kunt verplaatsen. Vanwege de controle van Unity over de camera voor hoofdtracering, moet u de camera een bovenliggend element in de hiërarchie geven en in plaats daarvan dat GameObject verplaatsen. Dit is het equivalent van de Playspace van MRTK.
U wordt aangeraden de teleportatie-implementatie van MRTK te gebruiken.
Als u ervoor kiest om uw eigen te implementeren, is het goed om te onthouden dat u de camera niet rechtstreeks kunt verplaatsen. Vanwege de controle van Unity over de camera voor hoofdtracering, moet u de camera een bovenliggend element in de hiërarchie geven en in plaats daarvan dat GameObject verplaatsen. Dit is het equivalent van de Playspace van MRTK.
Modi voor opnieuw projecteren
Zowel HoloLens als immersive headsets projecteren elk frame dat door uw app wordt weergegeven, opnieuw om aan te passen op een onjuiste beoordeling van de werkelijke hoofdpositie van de gebruiker wanneer fotonen worden verzonden.
Standaard:
VR immersive headsets zorgen voor positionele reprojectie als de app een dieptebuffer biedt voor een bepaald frame. Met insluitende headsets worden uw hologrammen ook aangepast voor onjuiste beoordeling in zowel positie als richting. Als er geen dieptebuffer is opgegeven, corrigeert het systeem alleen onjuiste uitspraken in de richting.
Holografische headsets zoals HoloLens 2 zorgen voor positionele reprojectie, ongeacht of de app de dieptebuffer levert of niet. Positionele herprojectie is mogelijk zonder dieptebuffers op HoloLens, omdat rendering vaak schaars is met een stabiele achtergrond die door de echte wereld wordt geleverd.
Als u bijvoorbeeld een alleen-oriëntatie-ervaring bouwt met inhoud die is vergrendeld met de hoofdtekst (bijvoorbeeld 360-graden video-inhoud), kunt u de modus voor opnieuw projecteren expliciet alleen instellen op de afdrukstand door deze in te stellen op ReprojectionMode.OrientationOnly.
Als u bijvoorbeeld een alleen-oriëntatie-ervaring bouwt met inhoud die is vergrendeld met de hoofdtekst (bijvoorbeeld 360-graden video-inhoud), kunt u de modus voor opnieuw projecteren expliciet instellen op alleen de afdrukstand door deze in te stellen op HolographicReprojectionMode.OrientationOnly.
Controlepunt volgende ontwikkeling
Als u het Unity-ontwikkelingstraject volgt dat we hebben uitgetekend, bent u bezig met het verkennen van de basisbouwstenen van MRTK. Vanaf hier kunt u doorgaan naar de volgende bouwsteen: