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:
- 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;
- 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:
Initialisierung (EasyARSettings.InitializeOnStartup ==
true)
Die automatische Initialisierung wird zum Zeitpunkt BeforeSceneLoad von Unity ausgeführt.Starten (ARSession.AutoStart ==
true)
Der automatische Start wird zum Zeitpunkt MonoBehaviour.Start() der Session ausgeführt.Stopp
Der automatische Stopp wird zum Zeitpunkt MonoBehaviour.OnDestroy() der Session ausgeführt.
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
- Session in der Anwendung verwenden
- Schneller Test
- Weitere Grundkomponenten
- Weitere Prinzipien der Session-Ausführung
- Unity XR und AR Foundation
- Grundprinzipien von Sense
Erstellen
- Versuchen Sie, eine Session in der Szene zu erstellen
Ausführung steuern
- Lernen Sie die Methoden und Wirkungen der Initialisierung
- Lernen Sie, wie Sie Verfügbarkeit und Geräteunterstützung prüfen
- Lernen Sie, wie Sie die Ausführung der Session steuern
Auf Komponenten und Ergebnisse zugreifen
- Versuchen Sie, AR-Funktionskomponenten abzurufen
- Lernen Sie, wie Sie Laufergebnisse der Session abrufen
Komponentenreferenz
- Komponentenreferenz für ARSession