Table of Contents

Kameras und input frame-Datenquellen in Unity -- frame source (Frame Source)

Frame source ist der Anbieter von Kamera- und input frame-Daten in Unity. Dieser Artikel stellt die Grundkonzepte, Typen und Auswahlmethoden von frame sources zur Laufzeit vor.

Vor dem Start

Was ist frame source

Frame source (FrameSource) ist der Anbieter von input frame (InputFrame) und abstrahiert Kameras sowie andere Geräte und Funktionen, die input frame-Daten bereitstellen.

Das folgende Diagramm zeigt die Position von frame source in der session:

flowchart LR
  F[Frame Source]
  A((Input Frame))
  B[Session]
  C([Camera])
  O([Origin])
  T([Target])
  F --> A
  A --> B
  B -. transform .-> C
  B -. transform .-> O
  B -. transform .-> T

  style F fill:#6e6ce6,stroke:#333,color:#fff

Ein frame source kann nur Daten für nachgelagerte AR-Funktionen bereitstellen oder selbst einige AR-Funktionen implementieren, beispielsweise motion tracking. Einige frame sources stellen Steuerinterfaces für Kamerageräte bereit, mit denen Benutzer Kameraparameter wie resolution, focus mode usw. auswählen können.

Typen von frame sources

Unterschieden nach dem Unity-Paket, das den frame source bereitstellt, lassen sich frame sources in zwei Hauptkategorien einteilen:

  • Built-in frame sources: frame sources, die vom EasyAR Sense Unity Plugin-Paket bereitgestellt werden und normalerweise die meisten gängigen Nutzungsszenarien sowie einige Headsets unterstützen.
  • External frame sources: frame sources, die von Erweiterungspaketen des EasyAR Sense Unity Plugin bereitgestellt werden und normalerweise bestimmte Headset-Geräte unterstützen. Häufig werden external frame sources von Headset-Herstellern oder Drittentwicklern bereitgestellt.

Im Unterschied zu external frame sources wird eine custom camera nicht unbedingt extern bereitgestellt; auch unter den built-in frame sources gibt es einige custom cameras.

Ein frame source kann motion data mit verschiedenen degrees of freedom bereitstellen: 0DoF, 3DoF, 5DoF und 6DoF. Derselbe frame source kann in unterschiedlichen Arbeitszuständen motion data mit unterschiedlichen degrees of freedom bereitstellen.

Die folgende Tabelle listet die von EasyAR bereitgestellten frame sources:

Name Built-in Custom camera Motion data Beschreibung
CameraDeviceFrameSource Ja Nein Keine (0DoF) Normale Kamera, unterstützt Front-/Rückkamera und PC
EditorCameraDeviceFrameSource Ja Nein Keine (0DoF) Normale Kamera, unterstützt Debugging nur im Editor
FramePlayer Ja Nein Durch playback-Datei bestimmt Gibt EIF-Dateien wieder, um runtime zu simulieren
ThreeDofCameraDeviceFrameSource Ja Nein 3DoF Stellt 3DoF tracking capability bereit
InertialCameraDeviceFrameSource Ja Nein 5DoF Stellt inertial navigation capability bereit
MotionTrackerFrameSource Ja Nein 6DoF Stellt von EasyAR implementiertes motion tracking bereit
ARCoreFrameSource Ja Nein 6DoF Stellt motion tracking von ARCore bereit
ARKitFrameSource Ja Nein 6DoF Stellt motion tracking von ARKit bereit
AREngineFrameSource Ja Ja 6DoF Stellt motion tracking von AR Engine bereit
VisionOSARKitFrameSource Ja Ja 6DoF Stellt motion tracking von VisionOS ARKit bereit 1
XREALFrameSource Ja Ja 6DoF Stellt motion tracking für XREAL-Geräte bereit 1
ARCoreARFoundationFrameSource Ja Ja 6DoF Stellt ARFoundation motion tracking passend zu ARCore bereit
ARKitARFoundationFrameSource Ja Ja 6DoF Stellt ARFoundation motion tracking passend zu ARKit bereit
PicoFrameSource Nein Ja 6DoF Stellt motion tracking für Pico-Geräte bereit 1
RokidFrameSource Nein Ja 6DoF Stellt motion tracking für Rokid-Geräte bereit 1
MetaXRFrameSource Nein Ja 6DoF Stellt motion tracking für Meta XR-Geräte bereit 1

Auswahl des frame source zur Laufzeit

Die scene hierarchy der session enthält eine oder mehrere frame source-Komponenten. Während die session läuft, werden nicht alle frame source-Komponenten verwendet.

Der folgende screenshot zeigt eine scene hierarchy mit nur einer frame source-Komponente:

alt text

Der folgende screenshot zeigt eine scene hierarchy mit mehreren frame source-Komponenten:

alt text

Jede Frame-Quelle hat unterschiedliche Funktionen, was auch ihre passenden Einsatzszenarien und Geräte bestimmt. Während der session-Assembly wird genau eine dieser Komponenten als Frame-Quelle der session ausgewählt.

Die Eigenschaft AssembleOptions.FrameSourceSelection definiert, wie die Frame-Quelle zur Laufzeit der session ausgewählt wird:

Name Methode
Auto (Standard) Wählt automatisch den ersten verfügbaren und active untergeordneten Knoten in transform-Reihenfolge aus.
Manual Manuell angeben. Es kann nur ein untergeordneter Knoten der session angegeben werden.
FramePlayer Verwendet FramePlayer.
Tipp

Die transform-Reihenfolge von Unity-Objekten kann mit Transform.GetSiblingIndex() geprüft werden, oder anhand der Objektreihenfolge in der Hierarchy-Ansicht. Die folgende Option muss jedoch deaktiviert sein (standardmäßig deaktiviert): Edit > Preferences > General > Enable Alphanumeric Sorting.

Während der session-Assembly wird die Frame-Quelle nach den folgenden Schritten ausgewählt:

  1. Die session durchläuft ihre untergeordneten Knoten und sammelt alle active Frame-Quellkomponenten in transform-Reihenfolge.
  2. Die Kandidatenliste wird gemäß der Quellenauswahlstrategie in AssembleOptions (AssembleOptions.FrameSource) gefiltert:
    • Auto (Standard): alle Kandidaten beibehalten.
    • Manual: nur die manuell angegebene Frame-Quelle beibehalten.
    • FramePlayer: die Kandidatenliste durch FramePlayer ersetzen.
  3. Die Kandidatenliste wird erneut gefiltert, wobei folgende Komponenten entfernt werden:
    • Komponenten, die von sich selbst deaktiviert wurden.
    • Alle benutzerdefinierten Kamerakomponenten, wenn die benutzerdefinierte Kamera deaktiviert ist (AssembleOptions.EnableCustomCamera ist false).
  4. (Android-Plattform) Wenn die Timeout-Einstellung von AssembleOptions.DeviceList größer als 0 ist und die Kandidatenliste MotionTrackerFrameSource, ARCoreFrameSource oder AREngineFrameSource enthält, wird versucht, die entsprechende neueste Geräteliste herunterzuladen. Nach dem Download-Update kann sich die Verfügbarkeit dieser Frame-Quellen ändern. Nach Abschluss des Downloads oder nach Timeout werden die nächsten Schritte fortgesetzt.
  5. Die Verfügbarkeit der verbleibenden Kandidatenkomponenten wird in Listenreihenfolge geprüft, indem FrameSource.CheckAvailability() aufgerufen und FrameSource.IsAvailable gelesen wird.
  6. Die erste Frame-Quelle, deren Prüfung verfügbar ergibt, wird ausgewählt.

Die Deaktivierungsbedingungen der Komponente selbst werden innerhalb der Komponente definiert. Häufige Fälle sind:

Wenn schließlich keine Frame-Quelle ausgewählt wird, wechselt die session in den Zustand Broken, und der Wert des Felds BrokenReason im session-Bericht ist NoAvailabileFrameSource.

Anmerkung

Nachdem die Geräteliste aktualisiert wurde, kann sich bei Änderungen der Geräteliste auch die Verfügbarkeit der Frame-Quelle ändern. Weitere Informationen zum Verhalten der session finden Sie unter Geräteunterstützung und session-Bericht.

Nächste Schritte

Verwandte Themen


  1. Informationen zur Geräteunterstützung finden Sie unter EasyAR-Headset-Unterstützung.