Wenn Sie ein Mixed Reality-Headset tragen, wird es zum Zentrum Ihrer holografischen Welt. Die Unity-Kamerakomponente behandelt automatisch das stereoskopische Rendering und folgt 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 gelten für herkömmliche 3D-Anwendungen, 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 daher möchten Sie wahrscheinlich die Skybox beibehalten.
Wenn sie jedoch auf einem holografischen Headset wie HoloLens ausgeführt wird, sollte die reale Welt hinter allem angezeigt werden, was die Kamera rendert. Legen Sie den Kamerahintergrund auf transparent fest (in HoloLens wird schwarz als transparent dargestellt) anstelle einer Skybox-Textur:
Auswählen der Hauptkamera im Hierarchiebereich
Suchen Sie im Inspektorbereich die Kamerakomponente, und ändern Sie die Dropdownliste "Flags löschen" von Skybox in "Volltonfarbe"
Wählen Sie die Hintergrundfarbauswahl aus, und ändern Sie die RGBA-Werte in (0, 0, 0, 0)
Wenn Sie diese Einstellung über Code festlegen, können Sie Unitys Color.clear
Sie können skriptcode verwenden, um zur Laufzeit zu bestimmen, ob das Headset immersive oder holografische Ist, indem Sie displayOpaque im aktiv ausgeführten XRDisplaySubsystem überprüfen.
Mithilfe von Skriptcode können Sie zur Laufzeit ermitteln, ob das Headset immersive oder holografische Elemente ist, indem Sie HolographicSettings.IsDisplayOpaque überprüfen.
Kameraeinrichtung
Unabhängig davon, welche Art von Erfahrung Sie entwickeln, ist die Hauptkamera immer die primäre Stereorenderingkomponente, die an die kopfmontierte Anzeige Ihres Geräts angeschlossen ist. Es ist einfacher, Ihre App zu gestalten, wenn Sie sich die Startposition des Benutzers als (X: 0, Y: 0, Z: 0) vorstellen. 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 vorgenommen haben, fahren Sie mit dem betreffenden Setupabschnitt fort.
HoloLens-Kameraeinrichtung
Für HoloLens-Apps müssen Sie Anker 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, dies 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 Position in (X: 0, Y: 0, Z: 0)
AR Session and related features need AR Foundation installed.
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 Position in (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 Position in (X: 0, Y: 0, Z: 0)
Kamera im Inspektorbereich in Unity
Wechseln Sie zum Abschnitt "Weitere Einstellungen" der 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.
Wählen Sie "Virtual Reality unterstützt" aus.
Da das Hauptkameraobjekt automatisch als Kamera gekennzeichnet wird, treibt Unity alle Bewegungen und Übersetzungen ein.
Hinweis
Diese Einstellungen müssen auf die Kamera in jeder Szene Ihrer App 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 die Einstellungen möglicherweise nicht ordnungsgemäß angewendet haben.
VR-Kameraeinrichtung
Windows Mixed Reality unterstützt Apps über eine breite Palette von Erfahrungsskalen, von Ausrichtungs- und Sitz-Apps bis hin zu Raum-Skalierungs-Apps. Auf HoloLens können Sie weiter gehen und weltweit skalierende Apps erstellen, mit denen Benutzer über 5 Meter gehen können, um eine ganze Etage eines Gebäudes und darüber hinaus zu erkunden.
Ihr erster Schritt bei der Erstellung einer Mixed Reality-Erfahrung in Unity besteht darin, zu bestimmen, auf welche Erfahrungsskala Ihre App ausgerichtet ist:
Wenn Sie für HL2 erstellen, empfiehlt es sich, eine Erfahrung auf Augenhöhe zu erstellen, oder erwägen Sie, Szenenverständnis zu verwenden, um über den Boden Ihrer Szene zu sprechen.
Wechseln Sie zum Abschnitt "Weitere Einstellungen" der 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.
Wählen Sie "Virtual Reality unterstützt" aus.
Da das Hauptkameraobjekt automatisch als Kamera gekennzeichnet wird, treibt Unity alle Bewegungen und Übersetzungen ein.
Hinweis
Diese Einstellungen müssen auf die Kamera in jeder Szene Ihrer App 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 die unten aufgeführten Einstellungen ordnungsgemäß angewendet hat.
Namespace:UnityEngine.XR Typ:XRDevice
Für eine Steh- oder Raumerfahrung 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 Benutzerbodens und optionale Raumgrenze darstellt, wird während der ersten Ausführung eingerichtet.
Um sicherzustellen, dass Unity mit seinem Weltkoordinatensystem auf Bodenebene arbeitet, 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 Phasenframe des Verweises nachzuverfolgen.
Wenn SetTrackingSpaceType "false" zurückgibt, konnte Unity nicht zum Phasenframe des Verweises wechseln, wahrscheinlich weil der Benutzer keinen Boden in seiner Umgebung eingerichtet hat. Obwohl ein falscher Rückgabewert nicht üblich ist, kann es passieren, wenn die Phase in einem anderen Raum eingerichtet ist und das Gerät in den aktuellen Raum verschoben wird, ohne dass der Benutzer eine neue Phase einrichtet.
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 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 der Einrichtung gegenüberstanden.
Wechseln Sie zum Abschnitt "Weitere Einstellungen" der 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.
Wählen Sie "Virtual Reality unterstützt" aus.
Da das Hauptkameraobjekt automatisch als Kamera gekennzeichnet wird, treibt Unity alle Bewegungen und Übersetzungen ein.
Hinweis
Diese Einstellungen müssen auf die Kamera in jeder Szene Ihrer App 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 die unten aufgeführten Einstellungen ordnungsgemäß angewendet hat.
Namespace:UnityEngine.XR Typ:XRDevice
Um eine Ausrichtungs - oder Sitzerfahrung zu erstellen, müssen Sie Unity auf den Raumtyp "Stationäre Nachverfolgung" 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 (bei der 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. Für XR SDK- oder Legacy-WSA-Projekte empfehlen wir, den Hintergrund der Kamera auf HoloLens einfarbig schwarz 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 das stereoskopische Rendering verwendet werden soll, basierend darauf, welches GameObject das MainCamera-Tag hat. In älteren XR-Dateien wird dieses Tag auch verwendet, um die Head tracking zu synchronisieren. Im XR SDK wird die Head Tracking von einem TrackedPoseDriver-Skript gesteuert, das an die Kamera angeschlossen ist.
Freigeben von Tiefenpuffern
Wenn Sie den Tiefenpuffer Ihrer App für Windows freigeben, erhalten Sie eine von zwei Verstärkungen 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, indem Sie Ihre Hologramme für Fehleinschätzungen sowohl an position als auch an der Ausrichtung anpassen.
HoloLens-Headsets haben einige verschiedene Methoden. HoloLens 1 wählt automatisch einen Fokuspunkt aus, wenn ein Tiefenpuffer bereitgestellt wird, um die Hologrammstabilität entlang der Ebene zu optimieren, die den größten Inhalt überschneidet. HoloLens 2 stabilisiert Inhalte mithilfe von Depth LSR (siehe Hinweise).
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 zum XR-Plug-In-Management für Projekteinstellungen>bearbeiten>, und stellen Sie sicher, dass das Menüelement erweitert ist.
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 für Windows Standalone und Universelle Windows-Plattform verfügbar sind.
So aktivieren und konfigurieren Sie:
Wählen Sie für OpenXR entweder ein Tiefenformat oder "Keine" in der Dropdownliste für den Tiefenübermittlungsmodus aus.
Aktivieren oder deaktivieren Sie für Windows Mixed Reality das Kontrollkästchen "Freigegebener Tiefenpuffer ". Wählen Sie dann im Dropdownmenü "Tiefenpufferformat" ein Format 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, funktioniert der erforderliche Schablonenpuffer (z. B. einige Bildlaufbereiche der Unity-Benutzeroberfläche) nicht, da Unity in dieser Einstellung keinen Schablonenpuffer erstellt. Wenn Sie dagegen das 24-Bit-Tiefenformat 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 zum Projekteinstellungen-Player>> bearbeiten>Universelle Windows-Plattform Registerkarte>XR-Einstellungen.
Erweitern Sie das Windows Mixed Reality SDK-Element .
Aktivieren oder deaktivieren Sie das Kontrollkästchen Tiefenpufferfreigabe aktivieren. Die Tiefenpufferfreigabe aktivieren ist in neuen Projekten standardmäßig aktiviert, wurde aber möglicherweise in älteren Projekten standardmäßig deaktiviert.
Ein Tiefenpuffer kann die visuelle Qualität verbessern, solange Windows die normalisierten Tiefenwerte pro Pixel genau in Ihrem Tiefenpuffer zurück zu Entfernungen in Metern zuordnen kann, wobei die nahe und weit entfernten Ebenen verwendet werden, die Sie in Unity auf der Hauptkamera festgelegt haben. Wenn das Rendern Tiefenwerte auf typische Weise verarbeitet, sollten Sie hier in der Regel in Ordnung sein, obwohl der transluzente Renderdurchlauf, der in den Tiefenpuffer geschrieben wird, während vorhandene Farbpixel angezeigt werden, die Neuprojektion verwechseln kann. Wenn Sie wissen, dass Ihre Renderdurchläufe viele ihrer endgültigen Tiefenpixel mit ungenauen Tiefenwerten belassen, 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, funktioniert der erforderliche Schablonenpuffer (z. B. einige Bildlaufbereiche der Unity-Benutzeroberfläche) nicht, da Unity in dieser Einstellung keinen Schablonenpuffer erstellt. Wenn Sie dagegen das 24-Bit-Tiefenformat auswählen, wird in der Regel ein 8-Bit-Schablonenpuffer erstellt, falls zutreffend auf der Endpunktgrafikplattform.
Verwenden von Beschneidungsebenen
Das Rendern von Inhalten, die dem Benutzer zu nahe stehen, kann in Mixed Reality unangenehm sein. Sie können die nah- und weit entfernten Clipebenen auf der Kamerakomponente anpassen.
Auswählen der Hauptkamera im Hierarchiebereich
Suchen Sie im Inspektorbereich die Kamerakomponente"Beschneidungsebenen", und ändern Sie das Textfeld "Near" von 0,3 auf 0,85. Inhalte, die noch näher gerendert werden, können zu Benutzerbeschwerden führen und sollten gemäß den Renderabstandsrichtlinien vermieden werden.
Zuletzt verwendet die Kamera
Wenn Sie eine Sitzerfahrung erstellen, können Sie den Weltursprung von Unity an der aktuellen Kopfposition des Benutzers durch Aufrufen der XR aufrufen. InputTracking.Recenter-Methode in älteren XR- oder XRInputSubsystem.TryRecenter-Methode im XR SDK.
Teleportation
Dieses Feature ist in der Regel für VR-Umgebungen reserviert:
MRTK bietet ein In-Box-Teleportsystem, das automatisch über gelenkte Hände und Controller hinweg funktioniert.
Wir empfehlen die Verwendung der Teleportationsimplementierung von MRTK.
Wenn Sie MRTK nicht verwenden möchten, stellt Unity eine Teleportierungsimplementierung im XR Interaction Toolkit bereit.
Wenn Sie sich dafür entscheiden, Eigene zu implementieren, sollten Sie bedenken, dass Sie die Kamera nicht direkt verschieben können. Aufgrund der Kontrolle der Kamera für die Kopfverfolgung müssen Sie der Kamera stattdessen ein übergeordnetes Element in der Hierarchie geben und dieses GameObject verschieben. Dies entspricht dem Playspace von MRTK.
Wir empfehlen die Verwendung der Teleportationsimplementierung von MRTK.
Wenn Sie sich dafür entscheiden, Eigene zu implementieren, sollten Sie bedenken, dass Sie die Kamera nicht direkt verschieben können. Aufgrund der Kontrolle der Kamera für die Kopfverfolgung müssen Sie der Kamera stattdessen ein übergeordnetes Element in der Hierarchie geben und dieses GameObject verschieben. Dies entspricht dem Playspace von MRTK.
Neuprojektierungsmodi
Sowohl HoloLens als auch immersive Headsets werden jeden Frame neu projizieren, den Ihre App rendert, um sich an jegliche Fehlschätzung der tatsächlichen Kopfposition des Benutzers anzupassen, wenn Photonen ausgegeben werden.
Standardmäßig:
Vr immersive Headsets kümmern sich um positionsbezogene Neuprojektion, wenn die App einen Tiefenpuffer für einen bestimmten Frame bereitstellt. Immersive Headsets passen auch Ihre Hologramme an, um eine Fehleinschätzung sowohl in der Position als auch bei der Ausrichtung zu erzielen. Wenn kein Tiefenpuffer bereitgestellt wird, korrigiert das System nur Fehlverhalten in der Ausrichtung.
Holographic Headsets wie HoloLens 2 kümmern sich um positionsbezogene Neuprojektion, unabhängig davon, ob die App ihren Tiefenpuffer bereitstellt. Positionsneuprojektion ist ohne Tiefenpuffer auf HoloLens möglich, da das Rendern oft mit einem stabilen Hintergrund der realen Welt gering ist.
Wenn Sie z. B. eine ausrichtungsgeschützte Erfahrung mit festkörpergesperrten Inhalten (z. B. 360-Grad-Videoinhalte) erstellen, können Sie den Neuprojektionsmodus explizit auf "Ausrichtung" festlegen, indem Sie ihn auf "ReprojectionMode.OrientationOnly" festlegen.
Wenn Sie die Unity-Entwicklungsreise verfolgt haben, die wir eingerichtet haben, befinden Sie sich mitten in der Erkundung der MRTK-Kernbausteine. Von hier aus können Sie mit dem nächsten Baustein fortfahren: