OpenXR-Einstellungen

OpenXR verfügt über einen eigenen Satz von Einstellungen, die beim Start von OpenXR angewendet werden. Während es für OpenXR-Erweiterungen, die durch Godot-Plugins implementiert werden, möglich ist, zusätzliche Einstellungen hinzuzufügen, werden wir hier nur die Einstellungen im Kern von Godot diskutieren.

../../_images/openxr_settings.webp

General settings

Aktiviert

Diese Einstellung aktiviert das OpenXR-Modul beim Start von Godot. Dies ist erforderlich, wenn das Vulkan-Backend verwendet wird. Für andere Backends können Sie OpenXR jederzeit aktivieren, indem Sie initialize für das OpenXRInterface aufrufen.

Diese Funktion muss ebenfalls aktiviert werden, um Zugriff auf den Action Map Editor zu erhalten.

Sie können den Kommandozeilen-Schalter --xr-mode on verwenden, um dies zu erzwingen.

Die Default-Action-Map

Hier wird der Pfad der Action-Map-Datei angegeben, die OpenXR lädt und an die XR-Runtime übermittelt.

Formfaktor

Hier wird angegeben, ob Ihr Spiel für die folgenden Gerätetypen bestimmt ist:

  • Head Mounted (auf dem Kopf montierte) Geräte wie Meta Quest, Valve Index oder Magic Leap,

  • Handheld-Geräte wie Telefone.

Wenn das Gerät, auf dem Sie Ihr Spiel ausführen, nicht mit der Auswahl hier übereinstimmt, kann OpenXR nicht initialisiert werden.

Konfiguration Anzeigen

Hier wird die Ansichtskonfiguration angegeben, für die Ihr Spiel ausgelegt ist:

  • Mono: Ihr Spiel bietet eine einzige Bildausgabe. Z.B. telefonbasierte AR;

  • Stereo, Ihr Spiel bietet eine Stereo-Bildausgabe. Z.B. bei am Kopf befestigten Geräten.

Wenn das Gerät, auf dem Sie Ihr Spiel ausführen, nicht mit der Auswahl hier übereinstimmt, kann OpenXR nicht initialisiert werden.

Bemerkung

OpenXR bietet zusätzliche Ansichtskonfigurationen für ganz bestimmte Geräte, die Godot noch nicht unterstützt. Varjo-Headsets haben beispielsweise eine Vierfach-Ansichtskonfiguration, die zwei Sätze von Stereobildern ausgibt. Diese werden möglicherweise in naher Zukunft unterstützt werden.

Referenzraum

In XR werden alle Elemente wie der Kopf und die Hände des Spielers innerhalb eines Tracking-Volumes verfolgt. An der Basis dieses Tracking-Volumes befindet sich unser Ursprungspunkt, der unseren virtuellen Raum auf den realen Raum abbildet. Es gibt jedoch verschiedene Szenarien, die diesen Punkt je nach verwendetem XR-System an unterschiedlichen Stellen platzieren. In OpenXR sind diese Szenarien genau definiert und werden durch die Festlegung eines Referenzraums ausgewählt.

Lokal

Der lokale Referenzraum setzt unseren Ursprungspunkt standardmäßig an den Kopf des Spielers. Einige XR-Runtimes tun dies jedes Mal, wenn das Spiel startet, andere lassen die Position über Sitzungen hinweg bestehen.

Dieser Referenzraum verhindert jedoch nicht, dass der Benutzer das Fahrzeug verlässt. Sie müssen also erkennen, ob der Benutzer dies tut, wenn Sie verhindern wollen, dass der Benutzer das von ihm gesteuerte Fahrzeug verlässt, was zu einem Spielabbruch führen könnte.

Dieser Referenzraum ist die beste Option für Spiele wie Flugsimulatoren oder Rennsimulatoren, bei denen wir den XROrigin3D-Node dort platzieren wollen, wo der Kopf des Spielers sein soll.

Wenn der Benutzer die Option "recenter" (neu zentrieren) an seinem Headset aktiviert, wobei die Methode für jede XR-Runtime unterschiedlich ist, wird die XR-Runtime den XRCamera3D- zum XROrigin3D-Node verschieben. Das OpenXRInterface wird auch das Signal pose_recentered aussenden, damit das Spiel entsprechend reagieren kann.

Bemerkung

Alle anderen XR-Trackerelemente wie Steuergeräte oder Anker werden ebenfalls entsprechend angepasst.

Warnung

Sie sollten nicht center_on_hmd aufrufen, wenn Sie diesen Referenzraum benutzen.

Stage

Der Stage-Referenzraum ist unser Standardreferenzraum und platziert unseren Ursprungspunkt in der Mitte unseres Spielraums. Bei XR-Runtimes, die es erlauben, eine Wächtergrenze zu ziehen, wird dieser Punkt und seine Ausrichtung oft vom Benutzer festgelegt. Andere XR-Runtimes können die Platzierung dieses Punktes auf andere Weise festlegen. In der realen Welt ist er jedoch ein stationärer Punkt.

Dieser Referenzraum ist die beste Option für Spiele im Raumskala, bei denen der Benutzer in einem größeren Raum herumlaufen soll, oder für Spiele, bei denen zwischen den Spielmodi gewechselt werden muss. Siehe Raumskala für weitere Informationen.

Wenn der Benutzer die Recenter-Option an seinem Headset auslöst, deren Methode je nach XR Runtime unterschiedlich ist, wird die XR Runtime den Ursprungspunkt nicht ändern. Das OpenXRInterface wird das Signal pose_recentered ausgeben und es liegt am Spiel, entsprechend zu reagieren. Wenn Sie dies nicht tun, wird Ihr Spiel in verschiedenen Stores nicht akzeptiert werden.

In Godot können Sie dies tun, indem Sie die Funktion center_on_hmd für den XRServer aufrufen:

  • Calling XRServer.center_on_hmd(XRServer.RESET_BUT_KEEP_TILT, false) will move the XRCamera3D node to the XROrigin3D node similar to the Local reference space.

  • Der Aufruf von XRServer.center_on_hmd(XRServer.RESET_BUT_KEEP_TILT, true) verschiebt den XRCamera3D-Node über den XROrigin3D-Node, wobei die Höhe des Spielers beibehalten wird, ähnlich wie bei dem Local Floor-Referenzraum.

Bemerkung

Alle anderen XR-Trackerelemente wie Steuergeräte oder Anker werden ebenfalls entsprechend angepasst.

Lokal-Boden

Der lokale Bodenreferenzraum ist dem lokalen Referenzraum ähnlich, da er den Ursprungspunkt dort positioniert, wo sich der Spieler befindet. In diesem Modus wird jedoch die Höhe des Spielers beibehalten. Genau wie beim lokalen Referenzraum behalten einige XR-Runtimes diese Position über Sitzungen hinweg bei.

Es ist also nicht garantiert, dass der Spieler auf dem Ursprungspunkt steht, sondern nur, dass er dort stand, als der Benutzer das letzte Mal zurückkam. Es steht dem Spieler also auch frei, sich zu entfernen.

Dieser Referenzraum ist die beste Option für Spiele, bei denen der Benutzer immer an der gleichen Stelle stehen muss, oder für AR-Spiele, bei denen die Benutzeroberflächenelemente an den Ursprungs-Node gebunden sind und beim erneuten Zentrieren schnell an der Position des Spielers platziert werden.

Wenn der Benutzer die Option "recenter" an seinem Headset aktiviert, deren Methode für jede XR Runtime unterschiedlich ist, wird die XR Runtime den XRCamera3D über den XROrigin3D-Node verschieben, aber die Höhe des Spielers beibehalten. Das OpenXRInterface wird auch das Signal pose_recentered ausgeben, so dass dein Spiel entsprechend reagieren kann.

Warnung

Seien Sie vorsichtig, wenn Sie diesen Modus in Kombination mit der virtuellen Bewegung des Spielers verwenden. Die Neuausrichtung des Benutzers in diesem Szenario kann unvorhersehbar sein, es sei denn, Sie wirken der Bewegung entgegen, wenn Sie das Neuausrichtungs-Signal verarbeiten. Dies kann sogar zum Spielabbruch führen, da der Spieler in diesem Szenario an einen beliebigen abstrakten Ort teleportiert wird, an dem der Ursprungspunkt während der virtuellen Bewegung platziert wurde, einschließlich der Möglichkeit, dass Spieler an Orte teleportiert werden, die eigentlich verboten sein sollten. Es ist besser, in diesem Szenario den Stage-Modus zu verwenden und das Zurücksetzen der Orientierung nur dann zuzulassen, wenn ein pose_recentered-Signal empfangen wird.

Bemerkung

Alle anderen XR-Trackerelemente wie Steuergeräte oder Anker werden ebenfalls entsprechend angepasst.

Warnung

Sie sollten nicht center_on_hmd aufrufen, wenn Sie diesen Referenzraum benutzen.

Environment-Blending-Modus

Der Environment-Blending-Modus legt fest, wie unsere gerenderte Ausgabe mit der "realen Welt" überblendet wird, sofern dies vom Headset unterstützt wird.

  • Undurchsichtig bedeutet, dass unsere Ausgabe die reale Welt verdunkelt, wir sind im VR-Modus.

  • Additiv bedeutet, dass unsere Ausgabe der realen Welt hinzugefügt wird. Dies ist ein AR-Modus, bei dem die Optik es uns nicht erlaubt, die reale Welt vollständig zu verdecken (z. B. Hololens),

  • Alpha bedeutet, dass unsere Ausgabe mit der realen Welt überblendet wird, indem die Alpha-Ausgabe verwendet wird (der Viewport sollte einen transparenten Hintergrund haben). Dies ist ein AR-Modus, bei dem die Optik die reale Welt vollständig verdecken kann (Magic Leap, alle Pass-Through-Geräte, usw.).

Wenn ein Modus ausgewählt wird, der vom Headset nicht unterstützt wird, wird der erste verfügbare Modus ausgewählt.

Bemerkung

Einige OpenXR-Geräte verfügen über separate Systeme zur Aktivierung/Deaktivierung des Passthrough. Ab Godot 4.3 führt die Auswahl des Alpha-Blend-Modus auch diese zusätzlichen Schritte aus. Dazu muss das neueste Hersteller-Plugin installiert sein.

Foveations-Ebene

Legt die Foveationsebene fest, die beim Rendern verwendet wird, sofern diese Funktion von der verwendeten Hardware unterstützt wird. Foveation ist eine Technik, bei der die Auflösung umso geringer ist, je weiter der Inhalt von der Mitte des Viewports entfernt gerendert wird. Die meisten XR Runtimes unterstützen nur feste Foveation, aber einige berücksichtigen Eye Tracking und verwenden den Fokuspunkt für diesen Effekt.

Je höher die Stufe ist, desto besser ist die Performance, aber desto stärker ist auch die Qualitätsminderung in der peripheren Sicht des Nutzers.

Bemerkung

Nur Kompatibilitäts-Renderer, für Mobile und Forward+ Renderer, setzen Sie die Property vrs_mode in Viewport auf VRS_XR.

Warnung

Diese Funktion ist deaktiviert, wenn Post-Effekte wie Glow, Bloom oder DOF verwendet werden.

Foveations-Dynamik

Wenn diese Option aktiviert ist, wird die Foveationsebene automatisch an die aktuelle GPU-Last angepasst. Sie wird zwischen niedrig und der in der vorherigen Einstellung gewählten Foveationsebene angepasst. Daher ist es am besten, diese Einstellung mit der Foveationsebene auf hoch zu kombinieren.

Bemerkung

Nur Kompatibilitäts-Renderer

Tiefenpuffer übermitteln

Wenn diese Option aktiviert ist, wird beim Rendern ein von OpenXR bereitgestellter Tiefenpuffer verwendet, der zusammen mit dem gerenderten Bild übermittelt wird. Die XR Runtime kann dies für eine verbesserte Reprojektion nutzen.

Bemerkung

Wenn Sie diese Funktion aktivieren, wird die Schablonenunterstützung während des Renderns deaktiviert. Nur wenige XR-Runtimes machen davon Gebrauch. Es wird empfohlen, diese Einstellung zu deaktivieren, es sei denn, sie bietet spürbare Vorteile für Ihren Anwendungsfall.

Startup-Alarm

Wenn diese Option aktiviert ist, wird dem Benutzer eine Warnmeldung angezeigt, wenn OpenXR nicht gestartet werden kann. Wir erhalten nicht immer eine Rückmeldung vom XR-System, warum der Start fehlschlägt. Wenn dies der Fall ist, wird dies auf der Konsole protokolliert. Häufige Fehlerursachen sind:

  • Auf dem Host-System ist keine OpenXR Runtime installiert.

  • Microsofts WMR OpenXR Runtime ist derzeit aktiv. Diese unterstützt nur DirectX und schlägt fehl, wenn OpenGL oder Vulkan verwendet wird.

  • SteamVR wird verwendet, aber es ist kein Headset angeschlossen/eingeschaltet.

Deaktivieren Sie dies, wenn Sie einen Fallback-Modus in Ihrem Spiel unterstützen, so dass es im Desktop-Modus gespielt werden kann, wenn kein VR-Headset angeschlossen ist, oder wenn Sie die Fehlerbedingung selbst behandeln, indem Sie OpenXRInterface.is_initialized() aktivieren.

Erweiterungen

This subsection allows you to enable to various optional OpenXR extensions. Keep in mind that the extensions will only work if the OpenXR runtime (SteamVR, Oculus, etc) the project is ran with supports them.

Debug Utils

Enabling this will log debug messages from the XR runtime.

Debug Message Types

This allows you to choose which debug messages are logged.

Hand-Tracking

Damit wird die Handtracking-Erweiterung aktiviert, sofern sie vom verwendeten Gerät unterstützt wird. Diese ist aus Legacy-Gründen standardmäßig aktiviert. Die Handtracking-Erweiterung ermöglicht den Zugriff auf Daten, mit denen Sie die Hände des Benutzers mit den korrekten Fingerpositionen visualisieren können. Je nach den Möglichkeiten der Plattform können die Handtracking-Daten aus den Eingaben des Controllers, aus Datenhandschuhen, aus optischen Handverfolgungssensoren oder aus jeder anderen geeigneten Quelle abgeleitet werden.

Wenn Ihr Spiel nur Controller unterstützt, sollte dies ausgeschaltet werden.

Siehe das Kapitel über Handtracking für weitere Details.

Hand Tracking Unobstructed Data Source

Enabling this means hand tracking may use the exact position of fingers, usually what a headset camera sees.

Hand Tracking Controller Data Source

Enabling this means hand tracking may use the controller itself, and infer where fingers are based on controller input or sensors on the controller.

Hand Interaction Profile

Enabling this extension allows the use of two new hand tracking poses. Pinch pose which is the location between the thumb and index finger pointing forward, and poke pose which is at the tip of the index finger.

This also allows 3 more gesture based inputs. Pinch, when the user pinches their thumb and index finger together. Aim activation, when the index finger is fully extended. And Grasps, when the user makes a fist.

When a hand interaction profile and controller interaction profile are supplied, the runtime will switch between profiles depending on if optical tracking is used or if the user is holding a controller.

If only a hand interaction profile is supplied any runtime should use hand interaction even if a controller is being held.

Blick-Interaktion

Dies ermöglicht die Erweiterung der Blick-Interaktion, wenn dies vom verwendeten Gerät unterstützt wird. Wenn diese Option aktiviert ist, erhalten wir eine Rückmeldung von der Augenverfolgung durch eine Pose, die sich zwischen den Augen des Benutzers befindet und in die Richtung ausgerichtet ist, in die der Benutzer blickt. Dies ist eine einheitliche Ausrichtung.

Um diese Funktionalität zu nutzen, müssen Sie Ihre Action Map bearbeiten und eine neue Pose-Aktion hinzufügen, zum Beispiel eye_pose. Fügen Sie nun ein neues Interaktionsprofil für die Blick-Interaktion hinzu und mappen Sie eye_pose:

../../_images/openxr_eye_gaze_interaction.webp

Vergessen Sie nicht zu speichern!

Als nächstes fügen Sie einen neuen XRController3D-Node zu Ihrem Ursprungs-Node hinzu und setzen seine tracker-Property auf /user/eyes_ext und seine pose-Property auf eye_pose.

Jetzt können Sie diesem Controller-Node Dinge hinzufügen, wie z. B. einen Raycast, und Dinge mit Ihren Augen steuern.

Binding Modifiers

These control whether or not binding modifiers can be used. Binding modifiers are used to apply thresholds or offset values.

Analog Threshold

Allow analog threshold binding modifiers.

Dpad Binding

Allow D-pad binding modifiers.