Table of Contents

Unity-Kamera in AR-Szenen

AR-Erlebnisse in Unity hängen von der Kamera ab. Dieser Artikel erklärt die Rolle der Kamera in AR-Szenen und wie Sessions die Kameraeigenschaften steuern, um das richtige AR-Erlebnis sicherzustellen.

Vor dem Start

Die Rolle der Kamera in AR-Szenen

In Unity wird die Kamera verwendet, um dem Spieler die Spielwelt anzuzeigen, doch in AR-Szenen ist ihre Rolle noch wichtiger. Sie rendert nicht nur virtuelle Inhalte, sondern muss sich auch mit der realen Welt ausrichten, damit virtuelle Objekte korrekt über die reale Szene gelegt werden.

Dieses Video zeigt eine einfache AR-Szene. Links ist die Ansicht Scene, rechts die Ansicht Game. Das Video wurde im Play-Modus des Unity Editors mit Simulationsdaten aufgezeichnet. Der Inhalt in der Ansicht Game ist derselbe wie das, was der Benutzer auf dem Telefon in der realen Welt sieht.

In diesem Video bewegt sich die Kamera, die den Benutzer repräsentiert (Kamera-Symbol), entsprechend der Bewegung des Benutzers in der realen Welt. Der weiße Kegel zeigt die Position und Ausrichtung der Kamera über den vergangenen Zeitraum. In der Ansicht Game zeigt die Kamera nicht nur den virtuellen Inhalt aus der Ansicht Scene, sondern legt auch das reale Bild am unteren Rand des virtuellen Inhalts darüber. Das ist das typische Verhalten einer Kamera in einer AR-Szene.

Damit virtuelle Objekte korrekt über die reale Szene gelegt werden, müssen einige Kameraeigenschaften an den Laufzeitstatus von AR angepasst werden. Dazu gehören:

  • das Kamera-Transform (Position und Ausrichtung)
  • das Sichtfeld (FOV), das Seitenverhältnis und die Projektionsmatrix der Kamera
  • die Culling-Einstellungen der Kamera (<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>)
Warnung

Beim Entwickeln einer Anwendung wird das Ändern dieser Kameraeigenschaften an der Session-Kamera nicht unterstützt, da dies dazu führen kann, dass virtuelle Inhalte falsch mit der realen Welt ausgerichtet werden und die Benutzererfahrung beeinträchtigen. Selbst wenn diese Eigenschaften auf irgendeine Weise geändert werden, überschreibt das AR-System diese Änderungen zur Laufzeit, oder es kann aufgrund inkonsistenter gerenderter und berechneter Daten zu unerwartetem Verhalten kommen.

Je nachdem, welches Objekt diese Eigenschaften steuert, kann die von der Session verwendete Kamera in zwei Typen unterteilt werden: von der Session gesteuerte Kameras und nicht von der Session gesteuerte Kameras.

Von der Session gesteuerte Kameras

Wenn die Session-Kamera keinem externen System wie einem Headset oder AR Foundation angehört, steuert die Session die oben genannten Kameraeigenschaften automatisch, um sicherzustellen, dass die Kamera korrekt mit der realen Welt ausgerichtet ist.

transform

Das Kamera-Transform (Position und Ausrichtung) wird von der Session entsprechend dem Laufzeitstatus der AR-Funktion angepasst. Im Allgemeinen aktualisiert die Session die Kameraposition und -ausrichtung auf Basis von Motion-Tracking-Daten und/oder Target-Tracking-Daten, damit der vom Benutzer gesehene Inhalt der realen Welt entspricht.

In Unity wird der zentrale Referenzpunkt aller AR-Tracker Session-Origin genannt, und die Regel, die diesen Origin während der Session-Laufzeit bestimmt, heißt Center Mode. Das Kamera-Transform verhält sich in verschiedenen Center Modes unterschiedlich:

  • Im Center Mode <xref:u:easyar.ARSession.ARCenterMode.Camera> kann sich die Kamera frei bewegen.

    Im Allgemeinen wird der Modus <xref:u:easyar.ARSession.ARCenterMode.Camera> selten von Anwendungen verwendet.

  • In anderen Center Modes, etwa <xref:u:easyar.ARSession.ARCenterMode.FirstTarget>, kann sich die Kamera nicht frei bewegen.

    <xref:u:easyar.ARSession.ARCenterMode.FirstTarget> ist der Modus, der von den meisten AR-Anwendungen verwendet wird.

Warnung

Der Scale-Wert des Kamera-Transforms sollte immer (1, 1, 1) bleiben. Das Ändern des Kamera-Scales kann zu unerwartetem Verhalten führen.

Projektionsmatrix

Die Projektionsmatrix der Kamera wird von der Session bei jedem Frame entsprechend den physikalischen Kameraintrinsics aktualisiert, um sicherzustellen, dass virtuelle Inhalte korrekt über die reale Szene gelegt werden.

Culling-Einstellungen

Die Culling-Einstellungen der Kamera (<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>) werden entsprechend den Spiegelungseinstellungen der Session angepasst, damit virtuelle Inhalte in der realen Szene korrekt gerendert werden.

Wenn die Einstellung für die aktuelle Kamera in <xref:u:easyar.ARSession.HorizontalFlip> <xref:u:easyar.ARSession.ARHorizontalFlipMode.World> ist, wird <xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType> auf true gesetzt. Das ist die Standardkonfiguration für die Frontkamera.

AR-Hintergrundvideostream

In AR-Szenen rendert die Kamera normalerweise den Videostream der physischen Kamera als Hintergrund, um die Immersion zu verbessern. Die Session übernimmt automatisch das Erfassen und Rendern des Videostreams und stellt sicher, dass er korrekt mit dem virtuellen Inhalt ausgerichtet ist.

Nicht von der Session gesteuerte Kameras

Wenn ein Headset oder AR Foundation verwendet wird oder wenn die Implementierung für <xref:u:easyar.FrameSource> <xref:u:easyar.FrameSource.IsCameraUnderControl> auf false setzt, steuert die Session die obigen Kameraeigenschaften nicht. Stattdessen werden sie vom externen System gesteuert.

Warnung

Auch wenn die Session in diesem Fall die Kameraeigenschaften nicht steuert, werden sie weiterhin von einem Drittanbietersystem wie einem Headset-SDK oder AR Foundation gesteuert. Das Ändern dieser Eigenschaften während der Entwicklung wird daher weiterhin nicht unterstützt.

Hinweise beim Kopieren von Kameras

Manchmal müssen Sie die Parameter der Session-Kamera auf eine andere Kamera kopieren. Achten Sie dann besonders auf die folgenden zwei Punkte:

  • Zeitpunkt des Eigenschaftsabrufs: Bei einer gesteuerten Kamera lesen Sie in Session-Ausgabe abrufen nach, um diese Parameter zum richtigen Zeitpunkt zu erhalten; bei einer nicht von der Session gesteuerten Kamera lesen Sie in der Dokumentation des Drittanbietersystems nach, um sie zum richtigen Zeitpunkt zu erhalten.
  • Sichtfeld (FOV), Seitenverhältnis und Projektionsmatrix der Kamera: Verwenden Sie <xref:UnityEngine.Camera.projectionMatrix?displayProperty=nameWithType>, um die Projektionsmatrix der Kamera zu erhalten und auf die andere Kamera zu kopieren. <xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType> und <xref:UnityEngine.Camera.aspect?displayProperty=nameWithType> sind mathematisch Teil der Projektionsmatrix, daher reicht die Verwendung nur von <xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType> und <xref:UnityEngine.Camera.aspect?displayProperty=nameWithType> nicht aus.

Nächste Schritte

  • Lesen Sie Kamerakonfiguration, um zu erfahren, wie Sie die Kamera für das beste AR-Erlebnis konfigurieren

Verwandte Themen