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:

../../_images/xr_export_passthrough.webp

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