Wenn Sie ein Mixed Reality-Headset tragen, wird es zum Mittelpunkt Ihrer holografischen Welt. Die Unity Camera-Komponente verarbeitet automatisch stereoskopisches 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 Camera-Komponente gelten für herkömmliche 3D-Anwendungen, die einen skyboxähnlichen Hintergrund benötigen, da sie keine reale Welt haben.
Wenn Sie auf einem immersiven Headset ausgeführt werden, rendern Sie alles, was der Benutzer sieht, und daher sollten Sie die Skybox wahrscheinlich 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 so fest, dass er transparent ist (in HoloLens wird schwarz als transparent gerendert) anstelle einer Skybox-Textur:
Wählen Sie im Hierarchiebereich die Hauptkamera aus.
Suchen Sie im Bereich Inspektor nach der Kamerakomponente, und ändern Sie die Dropdownliste Flags löschen von Skybox in Einfarbig.
Wählen Sie die Farbauswahl Hintergrund aus, und ändern Sie die RGBA-Werte in (0, 0, 0, 0)
Wenn Sie dies über Code festlegen, können Sie unity's verwenden. Color.clear
Sie können Skriptcode verwenden, um zur Laufzeit zu bestimmen, ob das Headset immersive oder holografische Eigenschaften hat, indem Sie displayOpaque auf dem aktiv ausgeführten XRDisplaySubsystem überprüfen.
Sie können Skriptcode verwenden, um zur Laufzeit zu bestimmen, ob das Headset immersive oder holografische Eigenschaften hat, indem Sie HolographicSettings.IsDisplayOpaque überprüfen.
Kamerasetup
Unabhängig davon, welche Art von Erfahrung Sie entwickeln, ist die Hauptkamera immer die primäre Stereorenderingkomponente, die an das kopfmontierte Display 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 verfolgt, kann die Startposition des Benutzers durch Festlegen der Startposition der Hauptkamera festgelegt werden.
Die zentrale Wahl, die Sie treffen müssen, ist, ob Sie für HoloLens- oder VR-Headsets entwickeln. Sobald Sie dies haben, fahren Sie mit dem Installationsabschnitt fort.
HoloLens-Kameraeinrichtung
Für HoloLens-Apps müssen Sie Anker für alle Objekte verwenden, die Sie für die Szenenumgebung sperren möchten. Es wird empfohlen, unbegrenzten Raum zu verwenden, um die Stabilität zu maximieren und Anker in mehreren Räumen zu erstellen.
Führen Sie dieses schrittweise Tutorial 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 aus MRTK für Unity zu arbeiten und die Zielskalierung auf Welt festzulegen:
MRTK sollte die Position des Wiedergaberaums und der Kamera automatisch behandeln, es ist jedoch ratsam, folgendes zu überprüfen:
Erweitern Sie im Hierarchiebereich das MixedRealityPlayspace GameObject, und suchen Sie nach dem untergeordneten Hauptkameraobjekt .
Suchen Sie im Bereich Inspektor nach der 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 Ankern und ARKit/ARCore funktioniert.
Wichtig
AR-Sitzung und zugehörige Features müssen AR Foundation installiert sein.
Es ist auch möglich, die Kameraänderungen manuell anzuwenden, ohne ARSession zu verwenden:
Wählen Sie im HierarchiebereichHauptkamera aus.
Suchen Sie im Bereich Inspektor nach der Transformationskomponente , und ändern Sie die Positionin (X: 0, Y: 0, Z: 0).
Kamera im Bereich "Inspector" in Unity
Hinzufügen eines TrackedPoseDrivers zur Hauptkamera
Wählen Sie im HierarchiebereichHauptkamera aus.
Suchen Sie im Bereich Inspektor nach der Transformationskomponente , und ändern Sie die Positionin (X: 0, Y: 0, Z: 0).
Kamera im Bereich "Inspector" in Unity
Wechseln Sie zum Abschnitt Andere Einstellungen der Windows Store-Playereinstellungen.
Wählen Sie Windows Mixed Reality als Gerät aus, das in älteren Versionen von Unity möglicherweise als Windows Holographic aufgeführt wird.
Wählen Sie Virtual Reality Supported (Virtual Reality unterstützt) aus.
Da das Hauptkameraobjekt automatisch als Kamera gekennzeichnet wird, unterstützt 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 wird.
Einrichtung der VR-Kamera
Windows Mixed Reality unterstützt Apps für eine Vielzahl von Erfahrungsskalen, von Apps, die nur für die Ausrichtung und für die Sitzskalierung verwendet werden, bis hin zu Apps auf Raumebene. Auf HoloLens können Sie weiter gehen und Apps auf Weltniveau erstellen, mit denen Benutzer über 5 Meter gehen und eine gesamte Etage eines Gebäudes und darüber hinaus erkunden können.
Ihr erster Schritt beim Erstellen einer Mixed Reality-Benutzeroberfläche in Unity besteht darin, zu bestimmen, auf welche Benutzeroberfläche Ihre App ausgerichtet ist:
Wenn Sie für HL2 erstellen, empfehlen wir, eine Erfahrung auf Augenhöhe zu erstellen, oder erwägen Sie , Szenenverständnis zu verwenden, um sich über den Boden Ihrer Szene zu informieren.
Wechseln Sie zum Abschnitt Andere Einstellungen der Windows Store-Playereinstellungen.
Wählen Sie Windows Mixed Reality als Gerät aus, das in älteren Versionen von Unity möglicherweise als Windows Holographic aufgeführt wird.
Wählen Sie Virtual Reality Supported (Virtual Reality unterstützt) aus.
Da das Hauptkameraobjekt automatisch als Kamera gekennzeichnet wird, unterstützt 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 GameObject-Hauptkameraobjekt in der Hierarchie, das die Kamerakomponente enthält, aber die folgenden Einstellungen nicht ordnungsgemäß angewendet werden.
Namespace:UnityEngine.XR Type:XRDevice
Für eine Benutzeroberfläche mit Steh- oder Raummaßstab müssen Sie Inhalte relativ zum Boden platzieren. Sie begründen den Fußboden des Benutzers mithilfe der raumbasierten Phase, die den definierten Ursprung auf Bodenebene und die optionale Raumgrenze des Benutzers darstellt, die während der ersten Ausführung eingerichtet wurde.
Um sicherzustellen, dass Unity mit seinem Weltkoordinatensystem auf Bodenebene arbeitet, können Sie festlegen und testen, ob Unity den RoomScale-Nachverfolgungsraumtyp 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 Stage-Bezugsrahmen nachzuverfolgen.
Wenn SetTrackingSpaceType "false" zurückgibt, konnte Unity nicht zum Stage frame of Reference wechseln, wahrscheinlich weil der Benutzer in seiner Umgebung keine Etage eingerichtet hat. Obwohl ein falscher Rückgabewert nicht üblich ist, kann es passieren, wenn die Bühne in einem anderen Raum eingerichtet wird und das Gerät in den aktuellen Raum verschoben wird, ohne dass der Benutzer eine neue Phase eingerichtet hat.
Nachdem Ihre App den RoomScale-Nachverfolgungsraumtyp 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 er während des Setups zugewandt hat.
Wechseln Sie zum Abschnitt "Andere Einstellungen" der Windows Store Player-Einstellungen.
Wählen Sie Windows Mixed Reality als Gerät aus, das in älteren Versionen von Unity möglicherweise als Windows Holographic aufgeführt wird.
Wählen Sie Virtual Reality supported (Virtual Reality unterstützt) aus.
Da das Hauptkameraobjekt automatisch als Kamera gekennzeichnet wird, unterstützt 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 GameObject-Hauptkameraobjekt in der Hierarchie, das die Kamerakomponente enthält, aber die folgenden Einstellungen nicht ordnungsgemäß angewendet werden.
Namespace:UnityEngine.XR Type:XRDevice
Um eine reine Ausrichtungs - oder Sitzumgebung zu erstellen, müssen Sie Unity auf den Typ "Stationärer Nachverfolgungsraum" festlegen. Der stationäre Nachverfolgungsraum legt das Weltkoordinatensystem von Unity fest, um den stationären Bezugsrahmen nachzuverfolgen. Im stationären Nachverfolgungsmodus werden Inhalte, die im Editor direkt vor dem Standardspeicherort der Kamera (vorwärts ist -Z) platziert werden, vor dem Benutzer angezeigt, wenn die App gestartet wird.
Für eine reine Orientierungserfahrung , z. B. einen 360-Grad-Videoviewer (bei dem Positionskopfaktualisierungen die Illusion ruinieren würden), können Sie dann XR festlegen. InputTracking.disablePositionalTracking to true:
InputTracking.disablePositionalTracking = true;
Für eine Benutzeroberfläche mit sitzbasierter Skalierung können Sie die XR aufrufen, damit der Benutzer später den sitzigen Ursprung vor kurzem hat . InputTracking.Recenter-Methode :
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 auf durchgehend 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, je nachdem, welches GameObject über das MainCamera-Tag verfügt. In Legacy-XR wird dieses Tag auch verwendet, um die Kopfnachverfolgung zu synchronisieren. Im XR SDK wird die Headtracking durch ein TrackedPoseDriver-Skript gesteuert, das an die Kamera angefügt ist.
Freigeben von Tiefenpuffern
Die Freigabe des Tiefenpuffers Ihrer App für windows jeder Frame gibt Ihrer App eine von zwei Verstärkungen der Hologrammstabilität, basierend auf dem Typ des Headsets, für das Sie rendern möchten:
Immersive VR-Headsets können die Position neu projizieren, wenn ein Tiefenpuffer bereitgestellt wird, und Ihre Hologramme auf Fehlvorhersagen sowohl in der Position als auch in der Ausrichtung anpassen.
HoloLens-Headsets verfügen über verschiedene Methoden. HoloLens 1 wählt automatisch einen Fokuspunkt aus, wenn ein Tiefenpuffer bereitgestellt wird, wodurch die Hologrammstabilität entlang der Ebene optimiert wird, die den meisten Inhalt überschneidet. HoloLens 2 stabilisiert Inhalte mithilfe von Tiefen-LSR (siehe Hinweise).
Das Konfigurationsdialogfeld von MRTK versucht, Tiefenpuffereinstellungen sowohl für das XR SDK als auch für legacy 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 windows einen Tiefenpuffer bereitstellt:
Wechseln Sie zuProjekteinstellungen>bearbeiten>XR Plug-In Management, und stellen Sie sicher, dass das Menüelement erweitert ist.
Klicken Sie auf das Menüelement, das der ausgewählten XR-Runtime entspricht, entweder Windows Mixed Reality oder OpenXR. Stellen Sie außerdem sicher, dass die richtige Buildplattform ausgewählt ist, da Registerkarten für eigenständige Windows- und Universelle Windows-Plattform verfügbar sind.
So aktivieren und konfigurieren Sie Folgendes:
Wählen Sie für OpenXR in der Dropdownliste Tiefenübermittlungsmodus entweder ein Tiefenformat oder "Keine" aus.
Aktivieren oder deaktivieren Sie für Windows Mixed Reality das Kontrollkästchen Freigegebener Tiefenpuffer. Wählen Sie dann in der Dropdownliste Tiefenpufferformat ein Format aus.
Hinweis
Es wird im Allgemeinen empfohlen, 16-Bit-Tiefenpuffer zu verwenden, um die Leistung zu verbessern. Bei Verwendung des 16-Bit-Tiefenformats funktionieren die erforderlichen Effekte für den Schablonenpuffer (wie einige Bildlaufbereiche der Unity-Benutzeroberfläche) jedoch nicht, da Unity in dieser Einstellung keinen Schablonenpuffer erstellt . Wenn Sie umgekehrt 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 windows einen Tiefenpuffer bereitstellt:
Wechseln Sie zuProjekteinstellungen>bearbeiten>Player>Universelle Windows-Plattform Registerkarte>XR-Einstellungen.
Erweitern Sie das element Windows Mixed Reality SDK.
Aktivieren oder deaktivieren Sie das Kontrollkästchen Tiefenpufferfreigabe aktivieren . Die Freigabe des Tiefenpuffers aktivieren ist in neuen Projekten standardmäßig aktiviert, wurde aber in älteren Projekten möglicherweise standardmäßig deaktiviert.
Ein Tiefenpuffer kann die visuelle Qualität verbessern, solange Windows die normalisierten Tiefenwerte pro Pixel in Ihrem Tiefenpuffer mithilfe der Nah- und Fernebene, die Sie in Unity auf der Hauptkamera festgelegt haben, genau auf Entfernungen in Metern zuordnen kann. Wenn Der Rendervorgang Tiefenwerte auf typische Weise übergibt, sollten Sie hier im Allgemeinen in Ordnung sein, obwohl transluzente Renderdurchläufe, die beim Anzeigen in den Tiefenpuffer geschrieben werden, die Neuprojektion verwirren können. Wenn Sie wissen, dass ihre Renderdurchläufe viele Ihrer letzten 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 zu verwenden, um die Leistung zu verbessern. Bei Verwendung des 16-Bit-Tiefenformats funktionieren die erforderlichen Effekte für den Schablonenpuffer (wie einige Bildlaufbereiche der Unity-Benutzeroberfläche) jedoch nicht, da Unity in dieser Einstellung keinen Schablonenpuffer erstellt . Wenn Sie umgekehrt das 24-Bit-Tiefenformat auswählen, wird in der Regel ein 8-Bit-Schablonenpuffer erstellt, falls zutreffend auf der Endpunktgrafikplattform.
Verwenden von Clippingebenen
Das Rendern von Inhalten zu nah am Benutzer kann in Mixed Reality unangenehm sein. Sie können die nah und fernen Clipebenen auf der Kamerakomponente anpassen.
Wählen Sie im Hierarchiebereich die Hauptkamera aus.
Suchen Sie im Bereich Inspektor die KamerakomponenteClipping Planes , und ändern Sie das Textfeld Near von 0,3 in 0,85. Inhalte, die noch näher gerendert werden, können zu Unannehmlichkeiten beim Benutzer führen und sollten gemäß den Renderabstandsrichtlinien vermieden werden.
MRTK bietet ein im Lieferumfang enthaltenes Teleportsystem , das automatisch über gelenkige 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 Teleportationsimplementierung im XR Interaction Toolkit bereit.
Wenn Sie sich für die Implementierung eines eigenen entscheiden, sollten Sie bedenken, dass Sie die Kamera nicht direkt bewegen können. Aufgrund der Steuerung der Kamera für die Kopfverfolgung durch Unity müssen Sie der Kamera ein übergeordnetes Element in der Hierarchie zuweisen und stattdessen dieses GameObject verschieben. Dies entspricht dem Playspace von MRTK.
Es wird empfohlen, die Teleportationsimplementierung von MRTK zu verwenden.
Wenn Sie sich für die Implementierung eines eigenen entscheiden, sollten Sie bedenken, dass Sie die Kamera nicht direkt bewegen können. Aufgrund der Steuerung der Kamera für die Kopfverfolgung durch Unity müssen Sie der Kamera ein übergeordnetes Element in der Hierarchie zuweisen und stattdessen dieses GameObject verschieben. Dies entspricht dem Playspace von MRTK.
Umprojektionsmodi
Sowohl HoloLens als auch immersive Headsets projizieren jeden Frame, den Ihre App rendert, neu, um die tatsächliche Kopfposition des Benutzers bei der Ausgabe von Photonen zu korrigieren.
Standardmäßig:
Vr Immersive Headsets übernehmen die Neuprojektion der Position, wenn die App einen Tiefenpuffer für einen bestimmten Frame bereitstellt. Immersive Headsets passen Auch Ihre Hologramme an, um fehleinschätzungen sowohl in der Position als auch in der Ausrichtung zu vermeiden. Wenn kein Tiefenpuffer bereitgestellt wird, korrigiert das System nur Fehleinschätzungen in der Ausrichtung.
Holographic Headsets wie HoloLens 2 übernehmen die Neuprojektion der Position, unabhängig davon, ob die App ihren Tiefenpuffer bereitstellt oder nicht. Die Neuprojektion der Position ist ohne Tiefenpuffer auf HoloLens möglich, da das Rendern oft spärlich ist und ein stabiler Hintergrund von der realen Welt bereitgestellt wird.
Wenn Sie z. B. eine Reine Orientierungsumgebung mit festem Textkörper gesperrten Inhalten (z. B. 360-Grad-Videoinhalten) erstellen, können Sie den Neuprojektionsmodus explizit nur auf Ausrichtung festlegen, indem Sie ihn auf ReprojectionMode.OrientationOnly festlegen.
Wenn Sie z. B. eine Reine Orientierungsumgebung mit starren Inhalten mit starrem Textkörper (z. B. 360-Grad-Videoinhalten) erstellen, können Sie den Neuprojektionsmodus explizit nur auf Ausrichtung festlegen, indem Sie ihn auf HolographicReprojectionMode.OrientationOnly festlegen.
Nächster Entwicklungsprüfpunkt
Wenn Sie die Unity-Entwicklungsreise verfolgen, die wir uns vorgenommen haben, befinden Sie sich mitten in der Erkundung der MRTK-Kernbausteine. Von hier aus können Sie mit dem nächsten Baustein fortfahren: