Wenn Sie ein Mixed Reality-Headset tragen, wird es zum Zentrum Ihrer holografischen Welt. Die Unity-Kamerakomponente verarbeitet automatisch stereoskopisches Rendering und folgen Sie Ihrer Kopfbewegung und Drehung. Um jedoch die visuelle Qualität und Hologrammstabilität vollständig zu optimieren, sollten Sie die unten beschriebenen Kameraeinstellungen festlegen.
HoloLens vs VR immersive Headsets
Die Standardeinstellungen für die Unity-Kamerakomponente sind für herkömmliche 3D-Anwendungen vorgesehen, die einen Skybox-ähnlichen Hintergrund benötigen, da sie keine echte Welt haben.
Wenn Sie auf einem immersiven Headset ausgeführt werden, rendern Sie alles, was der Benutzer sieht, und so möchten Sie wahrscheinlich die Skybox behalten.
Wenn sie jedoch auf einem holografischen Headset wie HoloLens ausgeführt werden, sollte die reale Welt hinter allem angezeigt werden, was die Kamera rendert. Legen Sie den Kamerahintergrund auf transparent (in HoloLens, schwarz gerendert als transparent) anstelle einer Skybox-Textur fest:
Wählen Sie die Hauptkamera im Hierarchiebereich aus.
Suchen Sie im Inspektorbereich die Kamerakomponente, und ändern Sie die Dropdownliste "Flags löschen" aus Skybox in "Volltonfarbe"
Wählen Sie die Hintergrundfarbauswahl aus, und ändern Sie die RGBA-Werte in (0, 0, 0, 0, 0)
Wenn Sie dies aus Code festlegen, können Sie Unitys Color.clear
Um die Undurchsichtigkeit der Kamera zu überprüfen, verfügt das MixedRealityCamera-System über eine IsOpaque Eigenschaft.
CoreServices.CameraSystem.IsOpaque;
Namespace:UnityEngine.XR Type:XRDisplaySubsystem
Sie können skriptcode verwenden, um zur Laufzeit zu bestimmen, ob das Headset immersive oder holografische Elemente ist, indem Sie displayOpaque auf dem aktiv ausgeführten XRDisplaySubsystem überprüfen.
Sie können Skriptcode verwenden, um zur Laufzeit zu ermitteln, ob das Headset immersive oder holografische Elemente ist, indem Sie HolographicSettings.IsDisplayOpaque überprüfen.
Kamerasetup
Jede Art von Erfahrung, die Sie entwickeln, ist die Hauptkamera immer die primäre Stereorenderingkomponente, die an die head-mounted Display Ihres Geräts angeschlossen ist. Es ist einfacher, Ihre App zu gestalten, wenn Sie sich die Anfangsposition des Benutzers vorstellen (X: 0, Y: 0, Z: 0). Da die Hauptkamera die Bewegung des Kopfes des Benutzers nachverfolgt, kann die Startposition des Benutzers festgelegt werden, indem die Startposition der Hauptkamera festgelegt wird.
Die zentrale Wahl, die Sie treffen müssen, ist, ob Sie für HoloLens oder VR immersive Headsets entwickeln. Nachdem Sie dies gemacht haben, fahren Sie mit dem Abschnitt "Setup" fort.
HoloLens Kameraeinrichtung
Für HoloLens Apps müssen Sie Verankerungen für alle Objekte verwenden, die Sie in der Szenenumgebung sperren möchten. Es wird empfohlen, ungebundene Räume zu verwenden, um Stabilität zu maximieren und Verankerungen in mehreren Räumen zu erstellen.
Führen Sie dieses schrittweise Lernprogramm aus, um Mixed Reality Toolkit in Ihrem Unity-Projekt hinzuzufügen und automatisch zu konfigurieren. Es ist auch möglich, direkt mit der MixedRealityPlayspace-Klasse von MRTK für Unity zu arbeiten und die Zielskala auf Welt festzulegen:
MRTK sollte die Position des Playspaces und der Kamera automatisch behandeln, aber es ist gut zu überprüfen:
Erweitern Sie im Hierarchiebereich das MixedRealityPlayspace GameObject, und suchen Sie das untergeordnete Hauptobjekt der Kamera
Suchen Sie im Inspektorbereich die Transformationskomponente , und ändern Sie die Positionin (X: 0, Y: 0, Z: 0)
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Device);
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Unbounded); // Recommendation for OpenXR
Sie können ARSession für HoloLens Anwendungen verwenden, die besser mit Verankerungen und ARKit/ARCore funktionieren.
Wichtig
AR-Sitzung und verwandte Features benötigen AR Foundation installiert.
Es ist auch möglich, die Kameraänderungen manuell anzuwenden, ohne ARSession zu verwenden:
Hauptkamera im Hierarchiebereich auswählen
Suchen Sie im Inspektorbereich die Transformationskomponente , und ändern Sie die Positionin (X: 0, Y: 0, Z: 0)
Kamera im Inspektorbereich in Unity
Hinzufügen eines TrackedPoseDriver zur Hauptkamera
Hauptkamera im Hierarchiebereich auswählen
Suchen Sie im Inspektorbereich die Transformationskomponente , und ändern Sie die Positionin (X: 0, Y: 0, Z: 0)
Kamera im Inspektorbereich in Unity
Wechseln Sie zum Abschnitt "Andere Einstellungen" des Windows Store Player-Einstellungen
Wählen Sie Windows Mixed Reality als Gerät aus, das in älteren Versionen von Unity als Windows Holographic aufgeführt werden kann.
Unterstützte Virtual Reality auswählen
Da das Hauptkameraobjekt automatisch als Kamera markiert wird, macht Unity alle Bewegungen und Übersetzungen.
Hinweis
Diese Einstellungen müssen in jeder Szene Ihrer App auf die Kamera angewendet werden.
Wenn Sie eine neue Szene in Unity erstellen, enthält sie standardmäßig ein Hauptkamera-GameObject in der Hierarchie, das die Kamerakomponente enthält, aber möglicherweise nicht ordnungsgemäß angewendet wurde.
VR-Kameraeinrichtung
Windows Mixed Reality unterstützt Apps über eine breite Palette von Erfahrungsskalan, von Nur-Ausrichtungs- und Sitz-Apps bis hin zu Raum-Skalierungs-Apps. Auf HoloLens können Sie weitergehen und weltweit skalierende Apps erstellen, mit denen Benutzer über 5 Meter laufen können, um eine gesamte Etage eines Gebäudes und darüber hinaus zu erkunden.
Ihr erster Schritt beim Erstellen einer Mixed Reality-Erfahrung in Unity besteht darin, zu bestimmen, welche Skalierung Ihre App angibt:
Wenn Sie für HL2 erstellen, empfehlen wir, eine Erfahrung auf Augenhöhe zu erstellen, oder erwägen Sie die Verwendung des Szenenverständnisses , um über den Boden Ihrer Szene zu sprechen.
Wechseln Sie zum Abschnitt "Andere Einstellungen" des Windows Store Player-Einstellungen
Wählen Sie Windows Mixed Reality als Gerät aus, das in älteren Versionen von Unity als Windows Holographic aufgeführt werden kann.
Unterstützte Virtual Reality auswählen
Da das Hauptkameraobjekt automatisch als Kamera markiert wird, macht Unity alle Bewegungen und Übersetzungen.
Hinweis
Diese Einstellungen müssen in jeder Szene Ihrer App auf die Kamera angewendet werden.
Wenn Sie eine neue Szene in Unity erstellen, enthält sie standardmäßig ein Hauptkamera-GameObject in der Hierarchie, das die Kamerakomponente enthält, aber nicht über die unten aufgeführten Einstellungen ordnungsgemäß angewendet wird.
Namespace:UnityEngine.XR Typ:XRDevice
Für eine stehenden oder raumweiten Erfahrung müssen Sie Inhalte relativ zum Boden platzieren. Grund für den Boden des Benutzers mithilfe der räumlichen Phase, die den definierten Ursprung des Benutzers und die optionale Raumgrenze darstellt, wird während der ersten Ausführung eingerichtet.
Um sicherzustellen, dass Unity mit seinem Weltkoordinatensystem auf Bodenebene funktioniert, können Sie festlegen und testen, ob Unity den Raumtyp RoomScale verwendet:
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.
}
Wenn SetTrackingSpaceType true zurückgibt, hat Unity sein Weltkoordinatensystem erfolgreich umgestellt, um den Phasenrahmen des Bezugs zu verfolgen.
Wenn SetTrackingSpaceType "false" zurückgibt, konnte Unity nicht zum Phasenrahmen der Referenz wechseln, wahrscheinlich weil der Benutzer keinen Boden in seiner Umgebung eingerichtet hat. Während ein falscher Rückgabewert nicht üblich ist, kann es passieren, wenn die Stufe in einem anderen Raum eingerichtet ist und das Gerät in den aktuellen Raum verschoben wird, ohne dass der Benutzer eine neue Stufe eingerichtet hat.
Nachdem Ihre App den Raumtyp "RoomScale-Nachverfolgung" erfolgreich festgelegt hat, werden inhalte, die auf der Ebene y=0 platziert sind, auf dem Boden angezeigt. Der Ursprung bei 0, 0, 0, 0 ist der spezifische Ort auf dem Boden, an dem der Benutzer während der Raumeinrichtung stand, wobei -Z die Vorwärtsrichtung darstellt, die sie während des Setups gegenüberstehen.
Wechseln Sie zum Abschnitt "Andere Einstellungen" des Windows Store Player-Einstellungen
Wählen Sie Windows Mixed Reality als Gerät aus, das in älteren Versionen von Unity als Windows Holographic aufgeführt werden kann.
Unterstützte Virtual Reality auswählen
Da das Hauptkameraobjekt automatisch als Kamera markiert wird, macht Unity alle Bewegungen und Übersetzungen.
Hinweis
Diese Einstellungen müssen in jeder Szene Ihrer App auf die Kamera angewendet werden.
Wenn Sie eine neue Szene in Unity erstellen, enthält sie standardmäßig ein Hauptkamera-GameObject in der Hierarchie, das die Kamerakomponente enthält, aber nicht über die unten aufgeführten Einstellungen ordnungsgemäß angewendet wird.
Namespace:UnityEngine.XR Typ:XRDevice
Um eine Ausrichtungs- oder Sitzskala-Erfahrung zu erstellen, müssen Sie Unity auf den Stationär-Nachverfolgungsraumtyp festlegen. Der stationäre Nachverfolgungsraum legt das Weltkoordinatensystem von Unity fest, um den stationären Bezugsrahmen nachzuverfolgen. Im stationären Nachverfolgungsmodus werden Inhalte, die direkt vor der Standardposition der Kamera platziert werden (vorwärts ist -Z) vor dem Benutzer angezeigt, wenn die App gestartet wird.
Für eine reine Ausrichtungserfahrung wie z. B. eine 360-Grad-Videoanzeige (wo Positionskopfaktualisierungen die Illusion ruinieren würden), können Sie dann XR festlegen. InputTracking.disablePositionalTracking auf true:
Wenn Sie MRTK verwenden, wird der Hintergrund der Kamera automatisch konfiguriert und verwaltet. Bei XR SDK- oder Legacy-WSA-Projekten empfehlen wir, den Hintergrund der Kamera auf einfarbig schwarz auf HoloLens festzulegen und die Skybox für VR beizubehalten.
Verwenden mehrerer Kameras
Wenn mehrere Kamerakomponenten in der Szene vorhanden sind, weiß Unity, welche Kamera für stereoskopisches Rendering verwendet werden soll, basierend auf dem GameObject das MainCamera-Tag hat. In legacy XR wird dieses Tag auch zum Synchronisieren der Head Tracking verwendet. In XR SDK wird die Head Tracking von einem TrackedPoseDriver-Skript gesteuert, das an die Kamera angefügt ist.
Freigeben von Tiefenpuffern
Wenn Sie den Tiefenpuffer Ihrer App für Windows jeden Frame freigeben, erhalten Sie eine von zwei Verstärkungen in der Hologrammstabilität, basierend auf dem Typ des Headsets, für das Sie rendern:
VR immersive Headsets können sich um positionsbezogene Neuprojektion kümmern, wenn ein Tiefenpuffer bereitgestellt wird, passen Sie Ihre Hologramme an, um sowohl in der Position als auch in der Ausrichtung fehlzuleiten.
HoloLens Headsets haben einige verschiedene Methoden. HoloLens 1 wählt automatisch einen Fokuspunkt aus, wenn ein Tiefenpuffer bereitgestellt wird und die Hologrammstabilität entlang der Ebene optimiert wird, die die meisten Inhalte überschneidet. HoloLens 2 werden Inhalte mithilfe von Tiefen-LSR (siehe Hinweise) stabilisiert.
Das Konfigurationsdialogfeld von MRTK versucht, Tiefenpuffereinstellungen sowohl für XR SDK als auch für ältere WSA festzulegen. Es ist jedoch ratsam, diese Registerkarten zu überprüfen und die Einstellungen in Unity zu überprüfen.
So legen Sie fest, ob Ihre Unity-App einen Tiefenpuffer für Windows bereitstellt:
Wechseln Sie zu Edit>Project Einstellungen>XR Plug-In Management, und stellen Sie sicher, dass das Menüelement erweitert wird.
Klicken Sie auf das Menüelement, das der ausgewählten XR-Laufzeit entspricht, entweder Windows Mixed Reality oder OpenXR. Stellen Sie außerdem sicher, dass die richtige Buildplattform ausgewählt ist, da Registerkarten sowohl für Windows eigenständige als auch für Universelle Windows-Plattform verfügbar sind.
So aktivieren und konfigurieren Sie Folgendes:
Wählen Sie für OpenXR entweder ein Tiefenformat oder "Keine" im Dropdownmenü für den Tiefenübermittlungsmodus aus.
Aktivieren oder deaktivieren Sie für Windows Mixed Reality das Kontrollkästchen "Freigegebener Tiefenpuffer". Wählen Sie dann ein Format aus der Dropdownliste "Tiefenpufferformat" aus.
Hinweis
Es wird im Allgemeinen empfohlen, 16-Bit-Tiefenpuffer für eine verbesserte Leistung zu verwenden. Wenn Sie jedoch das 16-Bit-Tiefenformat verwenden, funktionieren die erforderlichen Schablonenpuffer (z. B. einige Bildlaufpanels der Unity-Benutzeroberfläche), da Unity keinen Schablonenpuffer in dieser Einstellung erstellt. Wenn Sie das 24-Bit-Tiefenformat umgekehrt auswählen, wird in der Regel ein 8-Bit-Schablonenpuffer erstellt, falls zutreffend auf der Endpunktgrafikplattform.
So legen Sie fest, ob Ihre Unity-App einen Tiefenpuffer für Windows bereitstellt:
Wechseln Sie zu Edit>Project Einstellungen>Player>Universelle Windows-PlattformtabXR> Einstellungen.
Erweitern Sie das Windows Mixed Reality SDK-Element.
Aktivieren oder deaktivieren Sie das Kontrollkästchen "Tiefenpufferfreigabe aktivieren ". Die Tiefenpufferfreigabe aktivieren ist standardmäßig in neuen Projekten aktiviert, aber möglicherweise in älteren Projekten standardmäßig deaktiviert.
Ein Tiefenpuffer kann die visuelle Qualität verbessern, solange Windows die normalisierten Pro-Pixel-Tiefenwerte in Ihrem Tiefenpuffer zurück zu Entfernungen in Metern zuordnen kann, indem Sie die nahe und weit entfernten Ebenen verwenden, die Sie in Unity auf der Hauptkamera festgelegt haben. Wenn Ihr Render tiefenwerte auf typische Weise übergibt, sollten Sie hier in der Regel fein sein, obwohl transluzentes Rendern, das in den Tiefenpuffer geschrieben wird, während vorhandene Farbpixel angezeigt werden, die Neuprojektion verwechseln können. Wenn Sie wissen, dass Ihr Renderdurchlauf viele Ihrer letzten Tiefenpixel mit ungenauen Tiefenwerten verlässt, erhalten Sie wahrscheinlich eine bessere visuelle Qualität, indem Sie "Tiefenpufferfreigabe aktivieren" deaktivieren.
Hinweis
Es wird im Allgemeinen empfohlen, 16-Bit-Tiefenpuffer für eine verbesserte Leistung zu verwenden. Wenn Sie jedoch das 16-Bit-Tiefenformat verwenden, funktionieren die erforderlichen Schablonenpuffer (z. B. einige Bildlaufpanels der Unity-Benutzeroberfläche), da Unity keinen Schablonenpuffer in dieser Einstellung erstellt. Wenn Sie das 24-Bit-Tiefenformat umgekehrt auswählen, wird in der Regel ein 8-Bit-Schablonenpuffer erstellt, falls zutreffend auf der Endpunktgrafikplattform.
Verwenden von Clipping-Ebenen
Das Rendern von Inhalten, die dem Benutzer zu nah sind, kann in Mixed Reality unangenehm sein. Sie können die Nah- und Fernausschnittebenen auf der Kamerakomponente anpassen.
Wählen Sie die Hauptkamera im Hierarchiebereich aus.
Suchen Sie im Inspektorbereich die KamerakomponenteClipping Planes , und ändern Sie das Textfeld "Nah " von 0,3 auf 0,85. Inhalte, die noch näher gerendert werden, können zu Benutzerbeschwerden führen und sollten anhand der Renderabstandsrichtlinien vermieden werden.
MRTK bietet ein boxinternes Teleportsystem , das automatisch über artikulierte Hände und Controller hinweg funktioniert.
Es wird empfohlen, die Teleportationsimplementierung von MRTK zu verwenden.
Wenn Sie MRTK nicht verwenden möchten, stellt Unity eine Teleportation-Implementierung im XR Interaction Toolkit bereit.
Wenn Sie sich entscheiden, Ihr eigenes Zu implementieren, ist es gut zu beachten, dass Sie die Kamera nicht direkt verschieben können. Aufgrund der Kontrolle der Kamera für die Kopfverfolgung müssen Sie der Kamera ein übergeordnetes Element in der Hierarchie geben und stattdessen dieses GameObject verschieben. Dies entspricht dem Playspace des MRTK.
Es wird empfohlen, die Teleportierungsimplementierung von MRTK zu verwenden.
Wenn Sie sich entscheiden, Ihr eigenes Zu implementieren, ist es gut zu beachten, dass Sie die Kamera nicht direkt verschieben können. Aufgrund der Kontrolle der Kamera für die Kopfverfolgung müssen Sie der Kamera ein übergeordnetes Element in der Hierarchie geben und stattdessen dieses GameObject verschieben. Dies entspricht dem Playspace des MRTK.
Reprojection-Modi
Sowohl HoloLens als auch immersive Headsets werden jeden Frame neu projizieren, den Ihre App rendert, um die tatsächliche Kopfposition des Benutzers anzupassen, wenn Photonen ausgegeben werden.
Standardmäßig:
VR immersive Headsets sorgen für positionale Neuprojektion, wenn die App einen Tiefenpuffer für einen bestimmten Frame bereitstellt. Immersive Headsets passen Auch Ihre Hologramme für Fehleinschläge in der Position und Ausrichtung an. Wenn ein Tiefenpuffer nicht bereitgestellt wird, korrigiert das System nur Fehleindrücke in der Ausrichtung.
Holographic Headsets wie HoloLens 2 sorgen dafür, ob die App ihren Tiefenpuffer bereitstellt oder nicht. Positional reprojection ist ohne Tiefenpuffer auf HoloLens möglich, da das Rendern oft mit einem stabilen Hintergrund, der von der realen Welt bereitgestellt wird, nicht mehr verfügbar ist.
Wenn Sie z. B . eine Ausrichtungsumgebung mit starr textgesperrten Inhalten erstellen (z. B. 360-Grad-Videoinhalte), können Sie den Reprojection-Modus explizit so festlegen, dass er nur auf "ReprojectionMode.OrientationOnly" festgelegt wird.
Wenn Sie z. B . eine Ausrichtungsumgebung mit starr textgesperrten Inhalten erstellen (z. B. 360-Grad-Videoinhalte), können Sie den Reprojection-Modus explizit auf Ausrichtung festlegen, indem Sie ihn auf HolographicReprojectionMode.OrientationOnly festlegen.
Nächster Entwicklungsprüfpunkt
Wenn Sie die Unity-Entwicklungsreise verfolgen, die wir eingerichtet haben, befinden Sie sich in der Mitte der Erkundung der MRTK-Kernbausteine. Von hier aus können Sie mit dem nächsten Baustein fortfahren: