Table of Contents

Unity kamera in ar-szenen

Die darstellung von AR in Unity ist ohne kameras nicht möglich. Im folgenden erfahren sie, welche rolle die kamera in ar-szenen spielt und wie die session kamera-eigenschaften steuert, um eine korrekte AR-erfahrung zu gewährleisten.

Voraussetzungen

  • Machen sie sich mit den grundkonzepten, komponenten und arbeitsabläufen einer session vertraut, indem sie Einführung in ARSession lesen.

Rolle der kamera in ar-szenen

In Unity wird die kamera verwendet, um dem spieler die spielwelt zu zeigen. In ar-szenen ist die rolle der kamera noch bedeutender. Sie ist nicht nur für das rendern virtueller inhalte verantwortlich, sondern muss auch mit der realen welt ausgerichtet werden, um sicherzustellen, dass virtuelle objekte korrekt über die reale szene gelegt werden.

Dieses video zeigt eine einfache AR-szene. Links ist die Scene-ansicht, rechts die Game-ansicht. Das video wurde mit simulierten laufdaten im Play-modus des Unity-editors aufgezeichnet. Der inhalt der Game-ansicht entspricht dem, was ein benutzer in der realen welt auf seinem smartphone sieht.

Wie im video zu sehen ist, 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 einen bestimmten zeitraum in der vergangenheit an. In der Game-ansicht zeigt die kamera nicht nur die virtuellen inhalte aus der Scene-ansicht, sondern überlagert diese auch mit bildern der realen welt. Dies ist die typische arbeitsweise einer kamera in ar-szenen.

Um sicherzustellen, dass virtuelle objekte korrekt über die reale szene gelegt werden, müssen bestimmte eigenschaften der kamera basierend auf dem status des AR-betriebs angepasst werden. Diese eigenschaften umfassen:

  • Das transform der kamera (position und ausrichtung)
  • Das sichtfeld (FOV), das seitenverhältnis (aspect-ratio) und die projektionsmatrix der kamera
  • Die ausblendeinstellungen der kamera (GL.invertCulling)
Warnung

Das ändern dieser eigenschaften der session-kamera während der entwicklung von anwendungen wird nicht unterstützt, da dies dazu führen kann, dass virtuelle inhalte nicht korrekt mit der realen welt ausgerichtet werden, was die benutzererfahrung beeinträchtigt. Selbst wenn diese eigenschaften durch bestimmte methoden geändert werden, überschreibt das AR-system diese änderungen während des betriebs, oder inkonsistenzen zwischen renderdaten und berechnungsdaten führen zu unerwartetem verhalten.

Je nach dem objekt, das diese eigenschaften steuert, können die von einer session verwendeten kameras in zwei kategorien unterteilt werden: von der session gesteuerte kameras und nicht von der session gesteuerte kameras.

Von der session gesteuerte kameras

Wenn die kamera der session nicht zu einem externen system gehört, wie z. B. einem headset oder AR Foundation, steuert die session automatisch die oben genannten eigenschaften der kamera, um sicherzustellen, dass die kamera korrekt mit der realen welt ausgerichtet ist.

Transform

Das transform der kamera (position und ausrichtung) wird von der session basierend auf dem betriebsstatus der AR-funktionen angepasst. Im allgemeinen aktualisiert die session die position und ausrichtung der kamera basierend auf bewegungsverfolgungsdaten und/oder verfolgungsdaten von targets, um konsistenz zwischen den inhalten, die der benutzer sieht, und den inhalten der realen welt zu gewährleisten.

In Unity wird der zentrale referenzpunkt für alle AR-verfolgungen als session-zentrum bezeichnet, und die regel, die dieses zentrum während des betriebs der session bestimmt, wird als zentrumsmodus bezeichnet. In verschiedenen zentrumsmodi verhält sich das transform der kamera unterschiedlich:

  • Im Camera-zentrumsmodus kann die kamera frei bewegt werden.

    Der Camera-modus wird von anwendungen generell selten verwendet.

  • In anderen zentrumsmodi (z. B. FirstTarget) kann die kamera nicht frei bewegt werden.

    FirstTarget ist der modus, der von den meisten AR-anwendungen verwendet wird.

Warnung

Der scale-wert des kamera-transforms sollte stets (1, 1, 1) betragen. Das ändern des scale der kamera kann zu unerwartetem verhalten führen.

Projektionsmatrix

Die projektionsmatrix der kamera wird bei jedem frame-update der session basierend auf den intrinsischen parametern der physikalischen kamera aktualisiert, um sicherzustellen, dass virtuelle inhalte korrekt über die reale szene gelegt werden.

Ausblendeinstellungen

Die ausblendeinstellungen der kamera (GL.invertCulling) werden basierend auf den spiegelseinstellungen der session angepasst, um sicherzustellen, dass virtuelle inhalte korrekt in der realen szene gerendert werden.

Wenn in HorizontalFlip die einstellung für die aktuell verwendete kamera World entspricht, wird GL.invertCulling auf true gesetzt. Dies ist die standardkonfiguration für frontkameras.

AR-hintergrund-videostream

In ar-szenen rendert die kamera typischerweise einen videostream von der physikalischen kamera als hintergrund, um das immersionserlebnis des benutzers zu verstärken. Die session verarbeitet automatisch das erfassen und rendern des videostreams und stellt sicher, dass der stream korrekt mit den virtuellen inhalten ausgerichtet ist.

Nicht von der session gesteuerte kameras

Bei der verwendung von headsets und AR Foundation sowie wenn in der implementierung IsCameraUnderControl als false angegeben ist, steuert die session die oben genannten kamera-eigenschaften nicht, sondern ein externes system ist für die steuerung verantwortlich.

Warnung

Obwohl die session in diesem fall die eigenschaften der kamera nicht steuert, werden sie von drittanbietersystemen (wie headset-sdks oder AR Foundation) gesteuert. Das ändern dieser eigenschaften während der entwicklung von anwendungen wird weiterhin nicht unterstützt.

Hinweise beim kopieren von kameras

Gelegentlich kann es notwendig sein, die parameter der session-kamera auf eine andere kamera zu kopieren. Dabei sind zwei punkte besonders zu beachten:

  • Zeitpunkt des eigenschaftsbezugs: Bei verwendung einer gesteuerten kamera muss auf Ergebnisse des session-betriebs abrufen verwiesen werden, um die parameter zum richtigen zeitpunkt zu erhalten. Bei kameras, die nicht von der session gesteuert werden, muss auf die dokumentation des drittanbietersystems verwiesen werden, um die parameter zum richtigen zeitpunkt zu erhalten.
  • Sichtfeld (FOV), seitenverhältnis (aspect-ratio) und projektionsmatrix der kamera: Es muss Camera.projectionMatrix verwendet werden, um die projektionsmatrix der kamera abzurufen und auf eine andere kamera zu kopieren. Camera.fieldOfView und Camera.aspect sind mathematisch teil der projektionsmatrix. Die verwendung von Camera.fieldOfView und Camera.aspect ist unzureichend.

Nächste schritte

  • Lesen sie Kamera-konfigurationen, um zu erfahren, wie sie die kamera für die beste AR-erfahrung konfigurieren

Verwandte themen