Up to date
This page is up to date for Godot 4.2
.
If you still find outdated information, please open an issue.
Der OpenXR-Passthrough¶
Passthrough ist eine Technik, bei der Kamerabilder verwendet werden, um die Umgebung des Benutzers als Hintergrund darzustellen. Dadurch wird ein VR-Headset zu einem AR-Headset, das oft als Mixed Reality oder MR bezeichnet wird.
Bemerkung
Da Passthrough noch relativ neu ist, gibt es keine einheitliche Methode, wie dies plattformübergreifend umgesetzt wird. Es kann in der Zukunft Ergänzungen geben, daher befindet sich dies noch in der Entwicklung.
Passthrough-Erweiterung¶
OpenXR hat eine Herstellererweiterung für Passthrough, die von Meta eingereicht wurde. Derzeit wird diese Erweiterung nur von Quest und PICO unterstützt, kann aber in Zukunft auch von anderen Headsets übernommen werden.
XRInterface hat Einstiegspunkte für Passthrough, so dass verschiedene Interfaces diese Funktion implementieren können. Für OpenXRInterface wird hier die Meta-Passthrough-Erweiterung implementiert.
Im Code können Sie mit is_passthrough_supported
prüfen, ob diese Erweiterung verfügbar ist. Wenn ja, können Sie Passthrough einfach durch den Aufruf von start_passthrough
aktivieren. Sie können stop_passthrough
aufrufen, um Passthrough zu deaktivieren.
Sie müssen sicherstellen, dass der Hintergrund transparent ist. Sie müssen die Property transparent_bg
für den Viewport aktivieren. Einige Hintergrund-Umgebungseinstellungen füllen den Hintergrund mit einer undurchsichtigen Farbe. Sie können eine benutzerdefinierte Farbe
mit einer Farbe verwenden, deren Alpha auf 0 gesetzt ist.
Die OpenXR-Runtime zeigt das Kamerabild als Hintergrund an.
Bemerkung
Aus Gründen des Datenschutzes wird kein Zugriff auf das Kamerabild gewährt.
Warnung
Nachdem Passthrough aktiviert wurde, ist es möglich, Einstellungen zu ändern, die den Passthrough unterbrechen. Achten Sie darauf, die Einstellung transparent_bg
nicht zu deaktivieren oder den Blending-Modus der Umgebung zu ändern. Dies führt dazu, dass das Kamerabild nicht mehr sichtbar ist, Sie aber trotzdem den Rechen-Overhead haben.
Verwenden Sie immer stop_passthrough
, wenn Sie den Passthrough abschalten wollen.
Schließlich müssen Sie für die Verwendung von Passthrough auf der Quest die folgende Export-Propertys festlegen:
Passthrough durch AR¶
Einige der Headsets, die seit kurzem OpenXR unterstützen, haben einen anderen Ansatz gewählt. Sie imitieren einfach die Funktion eines AR-Geräts. Das Lynx R1 ist ein solches Gerät, aber auch andere können das gleiche tun.
Das Folgende gilt also sowohl für Passthrough-Geräte, die AR imitieren, als auch für echte AR-Geräte.
Wenn is_passthrough_supported
den Wert "false" zurückgibt, ist der nächste Schritt der Aufruf von get_supported_environment_blend_modes
. Dieser gibt eine Liste der unterstützten Blending-Modi zurück, um das Haupt-Rendering-Bild an OpenXR zu übermitteln.
Wir müssen prüfen, ob XR_ENV_BLEND_MODE_ALPHA_BLEND
in dieser Liste vorhanden ist. Wenn dies der Fall ist, können wir OpenXR mitteilen, dass es ein Bild erwartet, das mit einem Hintergrund alpha-überblendet werden kann. Um dies zu tun, rufen wir einfach set_environment_blend_mode(xr_interface.XR_ENV_BLEND_MODE_ALPHA_BLEND)
auf.
Wir müssen auch transparent_bg
auf true setzen und die Umgebung anpassen, um sicherzustellen, dass wir das richtige Bild senden.
Fügen wir alles zusammen¶
Wenn wir das obige zusammenfügen, erhalten wir nun Folgendes als Code-Basis:
func enable_passthrough() -> bool:
var xr_interface: XRInterface = XRServer.primary_interface
if xr_interface and xr_interface.is_passthrough_supported():
if !xr_interface.start_passthrough():
return false
else:
var modes = xr_interface.get_supported_environment_blend_modes()
if xr_interface.XR_ENV_BLEND_MODE_ALPHA_BLEND in modes:
xr_interface.set_environment_blend_mode(xr_interface.XR_ENV_BLEND_MODE_ALPHA_BLEND)
else:
return false
get_viewport().transparent_bg = true
return true