Table of Contents

Einstiegspunkt für Unity-AR - AR Session

Eine AR-Session ist der Einstiegspunkt für alle AR-Funktionen. In diesem Dokument lernen Sie die grundlegenden Konzepte, die Zusammensetzung und den Ablauf einer AR Session kennen und erfahren, wie sie sich zur AR Session von Unity AR Foundation verhält. Außerdem erfahren Sie, wie der Datenfluss von EasyAR Sense in Unity funktioniert.

Was ist eine AR Session?

Alle AR-Abläufe, etwa Objekttracking, werden in der nativen Bibliothek, also innerhalb von EasyAR Sense, ausgeführt. Die Session ist der Haupteinstiegspunkt für AR-Funktionen in Unity. Sie verwaltet den Ablauf und den Status des AR-Systems, einschließlich des Lesens von Daten von physischer Kamera und Sensoren, der Analyse der realen Welt sowie der Bewegung und Darstellung anderer Objekte, wie etwa der virtuellen Kamera in der Szene.

flowchart LR
  A((Bilder<br>und andere Daten))
  B[Session]
  C([Camera])
  O([Origin])
  T([Target])
  A --> B
  B -. transform .-> C
  B -. transform .-> O
  B -. transform .-> T

[Optional] EasyAR-Session und AR-Foundation-Session

Die EasyAR-Session ist die Kernkomponente für die Verwendung von EasyAR in Unity und kann unabhängig von Drittanbieter- oder System-AR-Funktionen laufen. Die AR-Foundation-Session ist Teil des Unity-XR-Frameworks und kann nur die Funktionen verwenden, die von Unity-XR-Plugins wie ARKit oder ARCore bereitgestellt werden.

flowchart TD
  A1[EasyAR<br>AR Session]
  A2[EasyAR Sense]
  A1 --> A2

  B1[AR Foundation<br>AR Session]
  B2[ARKit Plugin]
  B3[ARCore Plugin]
  B1 --> B2
  B1 --> B3

Bei der Arbeit mit EasyAR ist es normalerweise nicht nötig, AR Foundation gleichzeitig zu installieren oder zu verwenden. Bildtracking, Bewegungsverfolgung und ähnliche Funktionen werden direkt von EasyAR Sense bereitgestellt.

In manchen Fällen kann es sinnvoll sein, EasyAR Sense mit AR Foundation zu kombinieren, um zusätzliche Funktionen von AR Foundation zu nutzen, etwa Ebenenerkennung auf manchen Geräten, sowie die zugehörigen Schnittstellen. In diesem Fall interagiert EasyAR Sense über die von AR Foundation bereitgestellten Schnittstellen mit der Unity-Engine.

Da EasyAR jedoch mehr Funktionen und eine umfassendere Geräteanpassung bietet als System-AR, erreicht die alleinige Nutzung von AR Foundation normalerweise nicht das gleiche Ergebnis.

Zusammensetzung der Session

Eine typische Session besteht im Wesentlichen aus den folgenden Teilen:

  • Frame Source: Komponente, die Bilder der physischen Kamera und Sensordaten bereitstellt. Manchmal liefern diese Komponenten auch Bewegungsverfolgungsdaten. Zum Beispiel CameraDeviceFrameSource und MotionTrackerFrameSource
  • Frame Filter(s): Komponenten, die bestimmte AR-Funktionen bereitstellen, zum Beispiel ImageTrackerFrameFilter
  • Kamera: das virtuelle Kameraobjekt in der Szene
  • Ursprung (Origin): das Objekt des Bewegungsverfolgungsursprungs
Anmerkung

Im Konzept von AR Foundation ist Bewegungsverfolgung eine Pflichtfunktion, daher wird immer ein Origin bereitgestellt.
Im EasyAR-System ist Bewegungsverfolgung jedoch optional, daher ist auch das Origin optional.

[Optional] Datenfluss der Session

Datenfluss ist eines der Kernkonzepte von EasyAR Sense. Es beeinflusst Ihre Entwicklung einer AR-Anwendung in Unity nicht. Wenn Sie den Arbeitsablauf der Session genauer verstehen möchten, lesen Sie diesen Abschnitt.

In Unity entspricht eine Session in der Regel einem Datenfluss von EasyAR Sense.

flowchart LR
  S[Frame Source]
  R[Input Frame Recorder<br>Video Input Frame Recorder]
  ift[iFrameThrottler]
  iff[iFrameFork]
  i2f[i2FAdapter]
  fb[fbFrameFork]  
  i2o[i2OAdapter]

  FOT[Object Tracker]
  FIT[Image Tracker]
  FMT[Mega Tracker]
  FSSM[Sparse Spatial Map]
  FST[Surface Tracker]
  FDS[Dense Spatial Map]
  FCR[Cloud Recognizer]
  
  ofj[oFrameJoin]
  off[oFrameFork]
  ofb[oFrameBuffer]

  O(( ))
  ODS(( ))
  OCR(( ))

  S ==> R ==> ift ==> iff
  iff --> i2f
  i2f --> fb
  fb -.-> FOT -.-> ofj
  fb -.-> FIT -.-> ofj
  iff ==> i2o ==> ofj ==> off ==> ofb ==> O
  iff -.-> FMT -.-> ofj
  iff -.-> FSSM -.-> ofj
  iff -.-> FST -.-> ofj
  iff -.-> FDS -.-> ODS
  iff -.-> FCR -.-> OCR
  off --> i2f
  ofb --> ift

Dieser Datenfluss wird während des Session-Starts erzeugt. Mit Ausnahme der fett hervorgehobenen Datenpfade hängt der restliche Teil davon ab, welche AR-Komponenten während des Starts aktiviert sind.

Durch Ändern der in der Session aktivierten Komponenten lässt sich die Struktur und Funktion des Datenflusses flexibel ändern. Auf diese Weise können Sie auch mehrere AR-Funktionen gleichzeitig aktivieren. Dies wird im nächsten Abschnitt im Detail erläutert.

Ablauf der Session

flowchart LR
  i[Initialisierung<br>Initialize]
  a[Zusammenstellen<br>Assemble]
  starta["Starten (der zusammengesetzten Session)<br>StartSession(Assembled)"]
  start[Starten<br>StartSession]
  update((Aktualisieren<br>update))
  stop[Stopp<br>StopSession]
  di[Deinitialisierung<br>Deinitialize]

  i --> a --> starta --> update --> stop --> di
  i --> start --> update

  • Initialisierung
    Die Initialisierung ist der Vorgang, bei dem EasyAR Sense mit einem Lizenzschlüssel gestartet wird. Vor der Initialisierung können nur sehr wenige EasyAR-Sense-Schnittstellen verwendet werden. Erst nach der Initialisierung werden AR-Funktionen aktiviert.

  • Zusammenstellen (Assembling)
    Beim Zusammenstellen werden anhand der Assemblierungsoptionen passende Komponenten aus der Szene ausgewählt und zu einer funktionalen Einheit verbunden. Dieser Vorgang wird normalerweise beim Start automatisch ausgeführt, kann aber auch vor dem Start manuell über die Zusammenstellen-Schnittstelle ausgelöst werden. Nach dem Zusammenstellen kann die bereits zusammengesetzte Session gestartet werden, um den Zusammenstellungsvorgang zu überspringen und den Start zu beschleunigen.
    Ein weiterer wichtiger Zweck des Zusammenstellens besteht darin, die Verfügbarkeit von AR-Komponenten und Eingabequellen zu prüfen und aus allen Kandidaten die passende Eingabequelle auszuwählen. Damit lässt sich auch feststellen, ob die aktuelle Session auf dem aktuellen Gerät laufen kann.

    Der Zusammenstellungsvorgang besteht aus zwei Phasen:

    1. In der ersten Phase wird die Aktualisierung der Geräteunterstützungsliste gestartet, und nach einer gemäß Konfiguration festgelegten Wartezeit beginnt das Zusammenstellen. Wenn die Liste der Geräteunterstützung nach dieser Wartezeit bereits aktualisiert ist, endet der Zusammenstellungsvorgang;
    2. Andernfalls wechselt der Vorgang in die zweite Phase. Diese Phase wird ausgeführt, sobald die Liste der Geräteunterstützung aktualisiert wurde. Wenn in dieser Phase eine verfügbare Frame Source aus der ersten Phase fehlt, aber nach der Aktualisierung verfügbar ist und der Start der Session nach der ersten Phase fehlgeschlagen ist, wird ein erneuter Startversuch unternommen.

    Unabhängig davon, ob die Geräte-Liste der ersten Phase bereits aktualisiert wurde, setzt die Session nach Abschluss der ersten Phase die weiteren Schritte fort.

  • Starten
    Das Starten ist der Vorgang, bei dem die AR-Funktionen aktiviert werden. Vor dem Start verarbeiten die AR-Funktionskomponenten keine Daten. Nach dem regulären Start steuert die Session die Bewegung einiger Objekte in der Szene und bei Verwendung bestimmter Eingabequellen auch die Darstellung der physischen Kamerabilder.

  • Aktualisieren
    Der Aktualisierungsvorgang wird in jedem Frame des Unity-Renderzyklus ausgeführt. Abhängig vom aktuellen Ausführungsergebnis der verwendeten AR-Funktion werden in jedem Frame die Transform von virtueller Kamera (bei manchen Eingabequellen), Ursprung und Tracking-Zielen angepasst. Der genaue Zeitpunkt kann je nach Gerät variieren, erfolgt aber immer vor dem Rendern.

  • Stopp
    Der Stopp beendet die Ausführung der AR-Funktionen. Die Objekte in der Szene werden danach nicht mehr von der Session gesteuert und die Daten der Eingabequellen werden nicht mehr verarbeitet.

  • Deinitialisierung
    Die Deinitialisierung gibt einige globale Ressourcen frei (die nativen Bibliotheken werden nicht entladen). Danach können die AR-Funktionskomponenten nicht mehr verwendet werden.

Anmerkung

Alle AR-Funktionen können nur nach ARSession.StartSession verwendet werden.

Standard-Lebenszyklus der Session

flowchart LR
  uload("BeforeSceneLoad")
  ustart("MonoBehaviour.Start")
  udestroy("MonoBehaviour.OnDestroy")
  oi{Initialize<br>OnStartup}
  ostart{AutoStart}
  i[Initialisierung<br>Initialize]
  start[Starten<br>StartSession]
  update((Aktualisieren<br>update))
  stop[Stopp<br>StopSession]
  
  uload -.-> ustart -.-> udestroy
  uload --> oi -. true .-> i
  ustart --> ostart -. true .-> start
  udestroy --> stop
  i --> start --> update --> stop

Der Lebenszyklus der Session wird in der Regel durch den Zeitpunkt der Schnittstellenaufrufe bestimmt. Mit den Standard-Einstellungen führt die Session die folgenden Schritte automatisch aus:

Session-Status

ARSession.State beschreibt den Status der Session. Eine Session kann folgende Zustände haben:

Status Beschreibung
None Anfangszustand, die Session wurde noch nicht gestartet oder zusammengestellt
Broken Die Session wurde beispielsweise durch einen Zusammenstellungsfehler beschädigt
Assembling Während des Zusammenstellens; dieser Vorgang kann mehrere Frames dauern
Assembled Das Zusammenstellen war erfolgreich, aber die Session wurde noch nicht gestartet
Ready Die Session wurde erfolgreich gestartet; dieser Zustand hält nur einen Frame an
Running Die Session läuft
Paused Die Session ist pausiert

Der Session-Status ändert sich normalerweise beim Aufruf von Start- und Stopp-Schnittstellen. Während der Laufzeit kann die Session bei schweren Fehlern auch in den Status Broken wechseln. Eine Session im Status Broken kann nicht fortgesetzt werden und muss gestoppt und neu gestartet werden.

Über den Status der Session können Sie erkennen, ob sie derzeit nutzbar ist. Die meisten Funktionen können nur in den Zuständen Ready oder Running verwendet werden.

Bewegungsverfolgungsstatus

ARSession.TrackingStatus beschreibt den Bewegungsverfolgungsstatus der Session und damit die Qualität der Gerätebewegungsverfolgung. Es gibt folgende Zustände:

Status Beschreibung
Optional<MotionTrackingStatus>.Empty Die Bewegungsverfolgung ist nicht aktiviert oder die Session läuft nicht
NotTracking Das Bewegungsverfolgungsergebnis ist nicht verfügbar. Mögliche Gründe: Initialisierung, verlorenes Tracking oder Re-Lokalisierung
Limited Die Bewegungsverfolgung ist vorhanden, aber das Ergebnis ist nicht gut. Mögliche Gründe: zu wenig Textur in der aktuellen Region oder zu schnelle Bewegung
Tracking Die Bewegungsverfolgung hat gute Qualität
Anmerkung

Im Konzept von AR Foundation ist Bewegungsverfolgung eine Pflichtfunktion; ihr Tracking-Status wird daher mit dem Session-Status zusammengeführt.
Im EasyAR-System ist Bewegungsverfolgung jedoch optional, daher ist der Tracking-Status separat vorhanden und kann leer sein.

Wo ist der Tracking-Status anderer AR-Funktionen?

Da AR-Funktionen mehrere Objekte gleichzeitig verfolgen können, befinden sich der Bildtracking-Status und die Tracking-Status anderer AR-Funktionen nicht in der Session, sondern in den Tracking-Ziel-Komponenten.

Mit TargetController.IsTracked können Sie prüfen, ob sich das Tracking-Ziel im Tracking-Zustand befindet, oder Sie können die Ereignisse TargetController.TargetFound und TargetController.TargetLost verwenden, um die Inhaltslogik der Anwendung bei Statusänderungen anzupassen.

Nächste Schritte

Erstellen

Ausführung steuern

Auf Komponenten und Ergebnisse zugreifen

Komponentenreferenz