Der eintrittspunkt für unity ar – AR Session
Die AR-Sitzung (session) ist der Einstiegspunkt für alle AR-Funktionen. Durch die folgenden Inhalte erfahren Sie mehr über die grundlegenden konzepte, die zusammensetzung und den ablauf einer AR-Session sowie deren beziehung zur AR Session von Unity AR Foundation. Sie erfahren auch, wie der Datenfluss von EasyAR Sense in Unity genau funktioniert.
Was ist eine ar-session
Alle AR-Prozesse (wie Objektverfolgung) werden in der nativen Bibliothek, also innerhalb von EasyAR Sense, ausgeführt. Die Session ist der Hauptzugangspunkt für AR-Funktionen in Unity. Sie verwaltet den Betriebsablauf und den Zustand des AR-Systems, einschließlich des Lesens von Daten von der physischen Kamera und Sensoren, der Analyse der realen Welt, der Steuerung der Bewegung und des Renderns der virtuellen Kamera in der Szene sowie anderer Teile.
flowchart LR
A((Bild<br>und andere Daten))
B[Session]
C([Kamera])
O([Ursprung])
T([Ziel])
A --> B
B -. transform .-> C
B -. transform .-> O
B -. transform .-> T
[Optional] EasyAR's session und AR Foundation's session
EasyARs Session ist die Kernkomponente für die Nutzung von EasyAR in Unity und kann unabhängig von Drittanbieter- oder System-AR-Funktionen betrieben werden. Wohingegen AR Foundation's session Teil des Unity XR-Frameworks ist und nur Funktionen nutzen kann, 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 Verwendung von EasyAR ist es generell nicht notwendig, AR Foundation parallel zu installieren und zu nutzen. Funktionen wie Bildverfolgung, Bewegungsverfolgung etc. werden eigenständig von EasyAR Sense bereitgestellt.
In bestimmten Szenarien kann eine Kombination von EasyAR Sense mit AR Foundation sinnvoll sein, um zusätzliche Funktionen (z.B. Ebenenerkennung auf manchen Geräten) und Schnittstellen von AR Foundation zu nutzen. 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äteunterstützung bietet als systemeigenes AR, erreicht die alleinige Nutzung von AR Foundation üblicherweise nicht dieselbe Leistung wie EasyAR.
Bestandteile einer session
Eine typische session besteht hauptsächlich aus folgenden Komponenten:
- frame source: Eine Komponente, die physikalische Kamerabilder und Sensordaten bereitstellt. Manchmal liefern diese Komponenten auch Bewegungsverfolgungsdaten. Zum Beispiel CameraDeviceFrameSource und MotionTrackerFrameSource.
- frame filter(s): Komponenten, die spezifische AR-Funktionen bereitstellen, wie z.B. ImageTrackerFrameFilter.
- camera: Das virtuelle Kameramodell in der Szene.
- origin: Das Ursprungsobjekt für die Bewegungsverfolgung.
Anmerkung
Im Konzept von AR Foundation wird die Bewegungsverfolgung als obligatorische Funktion betrachtet, daher stellt sie immer einen origin bereit. Im EasyAR-System hingegen ist die Bewegungsverfolgung eine optionale Funktion, daher ist der origin ebenfalls optional.
[Optional] Datenfluss einer session
Datenfluss ist eines der Kernkonzepte von EasyAR Sense. Es beeinflusst nicht Ihre Entwicklung von AR-Apps in Unity. Wenn Sie die Funktionsweise einer session genauer verstehen möchten, können Sie diesen Abschnitt lesen.
In Unity repräsentiert eine session typischerweise einen 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 Starts der session erstellt. Ob Teile außer den fett markierten Datenpfaden verbunden sind, hängt von den während des Starts aktivierten AR-Komponenten ab.
Daher können Sie durch Ändern der aktivierten Komponenten in der session die Struktur und Funktion des Datenflusses flexibel anpassen und mehrere AR-Funktionen gleichzeitig aktivieren. Diese Methode wird in den folgenden Absätzen ausführlich beschrieben.
Sitzungsablauf
flowchart LR
i[Initialisierung<br>Initialize]
a[Zusammenbau<br>Assemble]
starta["Start (zusammengebaut)<br>StartSession(Assembled)"]
start[Start<br>StartSession]
update((Aktualisierung<br>update))
stop[Stopp<br>StopSession]
di[Deinitialisierung<br>Deinitialize]
i --> a --> starta --> update --> stop --> di
i --> start --> update
Initialisierung
Initialisierung ist der Prozess zum Starten von EasyAR Sense mit einem Lizenzschlüssel. Vor der Initialisierung sind nur sehr wenige Schnittstellen von EasyAR Sense nutzbar. Nach der Initialisierung werden AR-Funktionen aktiviert.Zusammenbau (Assembling)
Der Zusammenbau wählt basierend auf den Konfigurationsoptionen geeignete Komponenten aus der Szene aus und verbindet sie zu einer funktionalen Einheit. Dieser Prozess erfolgt normalerweise automatisch beim Start, kann aber auch manuell vor dem Start durch Aufruf der Assemblierungsschnittstelle durchgeführt werden. Nach dem Zusammenbau kann durch Starten der zusammengebauten Sitzung der Assemblierungsschritt übersprungen werden, um den Startvorgang zu beschleunigen.
Der Zusammenbau dient auch zur Überprüfung der Verfügbarkeit von AR-Komponenten und Eingabequellen sowie zur Auswahl der am besten geeigneten Eingabequelle aus allen Kandidaten. Dieser Schritt kann auch bestimmen, ob die aktuelle Sitzung auf dem Gerät ausgeführt werden kann.Der Zusammenbau erfolgt in zwei Phasen:
- Die erste Phase startet die Aktualisierung der Geräteunterstützungsliste und beginnt den Zusammenbau nach einer konfigurierten Wartezeit. Wenn die Geräteunterstützungsliste nach der ersten Wartezeit vollständig aktualisiert ist, ist der Zusammenbau abgeschlossen;
- Andernfalls geht der Prozess in die zweite Phase über, die nach Abschluss der Geräteunterstützungslisten-Aktualisierung ausgeführt wird. Wenn in dieser Phase eine Frame-Quelle verfügbar wird, die in Phase 1 nicht verfügbar war, und die Sitzung nach Phase 1 nicht starten konnte, wird ein erneuter Startversuch unternommen.
Unabhängig vom Aktualisierungsstatus der Geräteliste in Phase 1 setzt die Sitzung nach Abschluss von Phase 1 die weiteren Schritte fort.
Start
Der Start beginnt die Ausführung der AR-Funktionen. Vor dem Start verarbeiten AR-Komponenten keine Daten. Nach erfolgreichem Start steuert die Sitzung Bewegungen von Objekten in der Szene und rendert bei Verwendung bestimmter Eingabequellen Bilder der physikalischen Kamera.Aktualisierung
Die Aktualisierung erfolgt bei jedem Frame im Renderzyklus von Unity. Dieser Prozess passt den Transform der virtuellen Kamera (bei bestimmten Eingabequellen), des Ursprungs und der Tracking-Ziele basierend auf den AR-Ergebnissen an. Der Zeitpunkt der Aktualisierung variiert zwischen Geräten, erfolgt jedoch stets vor dem Rendering.Stopp
Das Stoppen beendet die AR-Funktionen. Objekte in der Szene werden nicht mehr von der Sitzung gesteuert und Eingabedaten werden nicht verarbeitet.Deinitialisierung
Die Deinitialisierung gibt globale Ressourcen frei (entlädt jedoch keine dynamischen Bibliotheken). Nach der Deinitialisierung sind AR-Funktionskomponenten nicht mehr nutzbar.
[!HINWEIS] Alle AR-Funktionen können erst nach ARSession.StartSession verwendet werden.
Standard-Lebenszyklus einer Sitzung
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((Aktualisierung<br>update))
stop[Beenden<br>StopSession]
uload -.-> ustart -.-> udestroy
uload --> oi -. true .-> i
ustart --> ostart -. true .-> start
udestroy --> stop
i --> start --> update --> stop
Der Lebenszyklus einer Sitzung wird üblicherweise durch den Zeitpunkt von API-Aufrufen bestimmt. Bei Standardeinstellungen führt die Sitzung automatisch folgende Aktionen aus:
Initialisierung (EasyARSettings.InitializeOnStartup ==
true)
Die automatische Initialisierung erfolgt beim Unity-Zeitpunkt BeforeSceneLoad.Start (ARSession.AutoStart ==
true)
Der automatische Start erfolgt beim MonoBehaviour.Start()-Zeitpunkt der Sitzung.Beenden
Das automatische Beenden erfolgt beim MonoBehaviour.OnDestroy()-Zeitpunkt der Sitzung.
Sitzungsstatus
ARSession.State beschreibt den Status der Sitzung. Eine Sitzung kann folgende Zustände haben:
| Status | Beschreibung |
|---|---|
| None | Anfangszustand, Sitzung nicht gestartet oder zusammengebaut |
| Broken | Sitzung ist beschädigt, z.B. durch fehlgeschlagenen Zusammenbau |
| Assembling | Während des Zusammenbauprozesses, der typischerweise mehrere Frames dauern kann |
| Assembled | Zusammenbau erfolgreich abgeschlossen, aber noch nicht gestartet |
| Ready | Sitzung erfolgreich gestartet, dieser Zustand dauert nur einen Frame |
| Running | Sitzung läuft |
| Paused | Sitzung ist pausiert |
Normalerweise ändert sich der Status der Sitzung beim Aufruf von Schnittstellen wie Start oder Stop. Während des Betriebs kann die Sitzung bei schwerwiegenden Fehlern auch in den Zustand Broken wechseln. Eine Sitzung im Zustand Broken kann nicht fortgesetzt werden; sie muss gestoppt und neu gestartet werden.
Der Status der Sitzung zeigt an, ob sie aktuell verwendbar ist. Die meisten Funktionen sind nur im Zustand Ready oder Running verfügbar.
Zustand der Bewegungsverfolgung
ARSession.TrackingStatus beschreibt den Verfolgungszustand der Bewegungsverfolgung der Session. Es gibt die Qualität der Bewegungsverfolgung des Geräts an und kann folgende Zustände haben:
| Zustand | Beschreibung |
|---|---|
Optional<MotionTrackingStatus>.Empty |
Die Funktion zur Bewegungsverfolgung ist nicht aktiviert oder die Session läuft nicht |
NotTracking |
Ergebnisse der Bewegungsverfolgung sind nicht verfügbar, möglicherweise aufgrund von Initialisierung, Verlust der Verfolgung oder Neuausrichtung |
Limited |
Die Bewegungsverfolgung ist aktiv, aber die Ergebnisse sind eingeschränkt, möglicherweise aufgrund einer zu schwachen Textur im aktuellen Bereich oder zu schneller Bewegung |
Tracking |
Die Qualität der Bewegungsverfolgung ist gut |
Anmerkung
Im Konzept von AR Foundation wird die Bewegungsverfolgung als erforderliche Funktion behandelt, daher ist ihr Verfolgungszustand mit dem Session-Status zusammengeführt.
Im EasyAR-System hingegen ist die Bewegungsverfolgung eine optionale Funktion, daher existiert ihr Verfolgungszustand unabhängig und kann leer sein.
Wo befindet sich der tracking-status anderer AR-funktionen
Da AR-Funktionen möglicherweise mehrere Objekte gleichzeitig tracken, befindet sich der Bild-Tracking-Status und der Tracking-Status anderer AR-Funktionen nicht in der Session, sondern in der Zielkomponente.
Sie können TargetController.IsTracked verwenden, um festzustellen, ob sich das Ziel im Tracking-Status befindet, oder die Ereignisse TargetController.TargetFound und TargetController.TargetLost nutzen, um die Anwendungsinhaltslogik anzupassen, wenn sich der Tracking-Status ändert.
Nächste schritte
- Verwendung von sessions in der Anwendung
- Schnelltest
- Weitere grundkomponenten
- Mehr über die Funktionsweise von session
- Unity XR und AR Foundation
- Sense grundprinzip
Erstellen
- Versuchen Sie, eine session zu erstellen
Laufsteuerung
- Verstehen Sie die Methoden und Funktionen der Initialisierung
- Verstehen Sie, wie Verfügbarkeit und Geräteunterstützung beurteilt werden
- Verstehen Sie Methoden zur Steuerung der session-Ausführung
Zugriff auf Komponenten und Ergebnisse
- Versuchen Sie, auf AR-Funktionskomponenten zuzugreifen
- Erfahren Sie, wie die Ausführungsergebnisse der session abgerufen werden
Komponentenreferenz
- ARSession-Komponentenreferenz