Caméras et sources de données input frame dans Unity -- frame source (Frame Source)
Frame source est le fournisseur des données de caméra et input frame dans Unity. Cet article présente les concepts de base, les types et la méthode de sélection des frame sources au runtime.
Avant de commencer
- Comprendre les concepts de base, la composition et le workflow de AR Session.
- Comprendre les concepts de base tels que caméra, input frame.
Qu'est-ce qu'un frame source
Frame source (FrameSource) est le fournisseur des input frames (InputFrame), qui abstrait les caméras ainsi que d'autres appareils et fonctions fournissant des données input frame.
Le diagramme ci-dessous montre la position du frame source dans la 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
Un frame source peut simplement fournir des données aux fonctions AR downstream, ou bien implémenter lui-même certaines fonctions AR, comme motion tracking. Certains frame sources fournissent des interfaces de contrôle pour les appareils caméra, permettant aux utilisateurs de choisir des paramètres caméra tels que resolution, focus mode, etc.
Types de frame sources
Selon le package Unity qui fournit le frame source, les frame sources peuvent être divisés en deux grandes catégories :
- Built-in frame sources : frame sources fournis par le package EasyAR Sense Unity Plugin, qui prennent généralement en charge la plupart des scénarios courants et certains casques.
- External frame sources : frame sources fournis par les packages d'extension EasyAR Sense Unity Plugin, généralement utilisés pour prendre en charge des appareils casque spécifiques. Souvent, les external frame sources sont fournis par les fabricants de casques ou des développeurs tiers.
Contrairement aux external frame sources, une custom camera n'est pas nécessairement fournie de l'extérieur ; certains built-in frame sources sont aussi des custom cameras.
Un frame source peut fournir des motion data avec différents degrees of freedom : 0DoF, 3DoF, 5DoF et 6DoF. Un même frame source peut fournir des motion data avec différents degrees of freedom selon son état de fonctionnement.
Le tableau ci-dessous liste les frame sources fournis par EasyAR :
| Nom | Built-in | Custom camera | Motion data | Description |
|---|---|---|---|---|
| CameraDeviceFrameSource | Oui | Non | Aucun (0DoF) | Caméra ordinaire, prend en charge les caméras avant/arrière et PC |
| EditorCameraDeviceFrameSource | Oui | Non | Aucun (0DoF) | Caméra ordinaire, prend seulement en charge le debug dans l'éditeur |
| FramePlayer | Oui | Non | Déterminé par le fichier playback | Relit des fichiers EIF pour simuler le runtime |
| ThreeDofCameraDeviceFrameSource | Oui | Non | 3DoF | Fournit une capacité de tracking 3DoF |
| InertialCameraDeviceFrameSource | Oui | Non | 5DoF | Fournit une capacité de inertial navigation |
| MotionTrackerFrameSource | Oui | Non | 6DoF | Fournit le motion tracking implémenté par EasyAR |
| ARCoreFrameSource | Oui | Non | 6DoF | Fournit le motion tracking d'ARCore |
| ARKitFrameSource | Oui | Non | 6DoF | Fournit le motion tracking d'ARKit |
| AREngineFrameSource | Oui | Oui | 6DoF | Fournit le motion tracking d'AR Engine |
| VisionOSARKitFrameSource | Oui | Oui | 6DoF | Fournit le motion tracking de VisionOS ARKit 1 |
| XREALFrameSource | Oui | Oui | 6DoF | Fournit le motion tracking pour les appareils XREAL 1 |
| ARCoreARFoundationFrameSource | Oui | Oui | 6DoF | Fournit le motion tracking d'ARFoundation correspondant à ARCore |
| ARKitARFoundationFrameSource | Oui | Oui | 6DoF | Fournit le motion tracking d'ARFoundation correspondant à ARKit |
| PicoFrameSource | Non | Oui | 6DoF | Fournit le motion tracking pour les appareils Pico 1 |
| RokidFrameSource | Non | Oui | 6DoF | Fournit le motion tracking pour les appareils Rokid 1 |
| MetaXRFrameSource | Non | Oui | 6DoF | Fournit le motion tracking pour les appareils Meta XR 1 |
Sélection du frame source au runtime
La scene hierarchy de la session contient un ou plusieurs composants frame source. Pendant le runtime de la session, tous les composants frame source ne seront pas utilisés.
La screenshot ci-dessous montre une scene hierarchy ne contenant qu'un seul composant frame source :
![]()
La screenshot ci-dessous montre une scene hierarchy contenant plusieurs composants frame source :

Chaque source de frames possède des fonctions différentes, ce qui détermine aussi ses scénarios d'utilisation et ses appareils applicables. Lors de l'assemblage de session, un seul de ces composants est sélectionné comme source de frames de la session.
La propriété AssembleOptions.FrameSourceSelection définit la méthode de sélection de la source de frames lorsque session s'exécute:
| Nom | Méthode |
|---|---|
| Auto (par défaut) | Sélectionne automatiquement le premier nœud enfant disponible et active dans l'ordre transform. |
| Manual | Spécification manuelle. Seul un nœud enfant de session peut être spécifié. |
| FramePlayer | Utilise FramePlayer. |
Astuce
L'ordre transform des objets Unity peut être vérifié avec Transform.GetSiblingIndex(), ou à partir de l'ordre des objets dans la vue Hierarchy, mais l'option suivante doit être désactivée (elle l'est par défaut): Edit > Preferences > General > Enable Alphanumeric Sorting.
Pendant l'assemblage de session, la source de frames est sélectionnée après les étapes suivantes:
- Session parcourt ses nœuds enfants et collecte tous les composants de source de frames active dans l'ordre transform.
- La liste des candidats est filtrée selon la stratégie de sélection de source dans AssembleOptions (AssembleOptions.FrameSource):
- Auto (par défaut): conserve tous les candidats.
- Manual: conserve uniquement la source de frames spécifiée manuellement.
- FramePlayer: remplace la liste des candidats par FramePlayer.
- La liste des candidats est filtrée à nouveau, en supprimant les composants suivants:
- Les composants désactivés par les composants eux-mêmes.
- Tous les composants de caméra personnalisée lorsque la caméra personnalisée est désactivée (AssembleOptions.EnableCustomCamera vaut false).
- (Plateforme Android) Si le délai d'expiration de AssembleOptions.DeviceList est supérieur à 0 et que la liste des candidats contient MotionTrackerFrameSource, ARCoreFrameSource ou AREngineFrameSource, le téléchargement de la liste correspondante la plus récente des appareils pris en charge est tenté. Après cette mise à jour téléchargée, la disponibilité de ces sources de frames peut changer. Une fois le téléchargement terminé ou le délai expiré, les étapes suivantes continuent.
- Vérifiez la disponibilité des composants candidats restants dans l'ordre de la liste en appelant FrameSource.CheckAvailability() et en accédant à FrameSource.IsAvailable.
- Sélectionnez la première source de frames dont le résultat de vérification est disponible.
Les conditions de désactivation propres au composant sont définies dans le composant. Les cas courants comprennent:
- Exécution sur un système non pris en charge, par exemple AREngineFrameSource est désactivé sur les systèmes non Android.
- Un SDK tiers nécessaire n'est pas installé, par exemple XREALFrameSource est désactivé lorsque XREAL SDK n'est pas installé.
- Les conditions configurées ne sont pas satisfaites, par exemple MotionTrackerFrameSource est désactivé lorsque le MotionTrackerCameraDeviceQualityLevel de l'appareil est inférieur à MotionTrackerFrameSource.DeviceQualityLevel.
Si aucune source de frames n'est finalement sélectionnée, session entre dans l'état Broken, et la valeur du champ BrokenReason dans le rapport de session est NoAvailabileFrameSource.
Note
Une fois la liste des appareils mise à jour, si cette liste change, la disponibilité des sources de frames peut aussi changer. Vous pouvez consulter prise en charge des appareils et rapport de session pour comprendre le comportement de session dans ce cas.
Étapes suivantes
- Essayez d'ajouter un groupe de frame sources dans la scene
Rubriques connexes
- Prise en charge des appareils et session report
- Prise en charge des casques EasyAR
- Créer un external frame source pour utiliser une custom camera