Table of Contents

Implémentation de caméra personnalisée dans unity —— Source de données d'images externes

Grâce à la source de données d'images externes (ExternalFrameSource), les développeurs peuvent étendre l'implémentation de caméra d'EasyAR Sense pour prendre en charge des appareils de réalité virtuelle spécifiques ou d'autres périphériques d'entrée. Le contenu suivant décrit la structure de type et les définitions d'interface de la source de données d'images externes.

Avant de commencer

  • Comprendre les concepts fondamentaux d'une caméra personnalisée.
  • Comprendre les concepts fondamentaux, les types et la méthode de sélection lors de l'exécution d'une source de trames.

Types de sources de trames externes

---
  config:
    class:
      hideEmptyMembersBox: true
---
classDiagram
  class FrameSource {
    <<abstract>>
  }
  class ExternalFrameSource {
    <<abstract>>
  }
  class ExternalDeviceFrameSource  {
    <<abstract>>
  }
  class ExternalDeviceMotionFrameSource:::EasyAR {
    <<abstract>>
  }
  class ExternalDeviceRotationFrameSource:::EasyAR {
    <<abstract>>
  }
  class ExternalImageStreamFrameSource:::EasyAR {
    <<abstract>>
  }

  ExternalFrameSource --|> FrameSource
  ExternalDeviceFrameSource --|> ExternalFrameSource
  ExternalDeviceMotionFrameSource --|> ExternalDeviceFrameSource
  ExternalDeviceRotationFrameSource --|> ExternalDeviceFrameSource
  ExternalImageStreamFrameSource --|> ExternalFrameSource
  
  classDef EasyAR fill:#6e6ce6,stroke:#333,color:#fff

Le diagramme ci-dessus illustre la structure de type des sources de trames externes.

Selon les données d'entrée, les sources de trames externes peuvent être divisées en deux catégories principales :

  • Extension d'entrée d'image et de données de mouvement des périphériques
    • Implémenté en héritant de ExternalDeviceMotionFrameSource : le périphérique et son SDK fournissent un suivi de mouvement 6DoF. La transformation de la caméra virtuelle et les autres contrôles sont effectués par le SDK du périphérique.
    • Implémenté en héritant de ExternalDeviceRotationFrameSource : le périphérique et son SDK fournissent un suivi de rotation 3DoF. La transformation de la caméra virtuelle et les autres contrôles sont effectués par le SDK du périphérique.
  • Extension d'entrée d'image
    • Implémenté en héritant de ExternalImageStreamFrameSource : fournit uniquement une entrée d'image. La transformation de la caméra virtuelle et les autres contrôles sont effectués par EasyAR.

Lors de l'intégration de ces sources de trames externes, les fonctionnalités AR disponibles diffèrent :

  • Extension d'entrée d'image et de données de mouvement des périphériques ExternalDeviceMotionFrameSource
    • Mega
    • Suivi de mouvement (fourni par le périphérique lui-même)
    • Carte spatiale éparse
    • Carte spatiale dense
    • Suivi d'image (avec fusion de mouvement)
    • Reconnaissance d'image cloud
    • Suivi d'objet (avec fusion de mouvement)
  • Extension d'entrée d'image et de données de mouvement des périphériques ExternalDeviceRotationFrameSource
    • Mega
    • Suivi d'image (sans fusion de mouvement)
    • Reconnaissance d'image cloud
    • Suivi d'objet (sans fusion de mouvement)
  • Extension d'entrée d'image ExternalImageStreamFrameSource
    • Suivi d'image (sans fusion de mouvement)
    • Reconnaissance d'image cloud
    • Suivi d'objet (sans fusion de mouvement)

Définition d'interface pour les sources de données de trame externes

Lors de la création d'une source de données de trame externe, les interfaces correspondantes doivent être implémentées. Les définitions de ces interfaces et leur mode d'utilisation sont présentées ci-dessous.

Définition de l'appareil

  • FrameSource.IsHMD : Définit s'il s'agit d'un casque de réalité virtuelle
    Défini sur true uniquement sur les appareils de type casque.
    Si l'appareil est un casque, les informations de diagnostic s'afficheront sur une planche 3D devant la caméra plutôt que sur l'écran. Certaines fonctionnalités AR fonctionnent légèrement différemment sur les casques.

  • FrameSource.Display : Définit le système d'affichage
    Fournit des informations comme la rotation de l'affichage actuel.
    Utilisez Display.DefaultSystemDisplay ou Display.DefaultHMDDisplay pour obtenir les informations d'affichage par défaut.
    Généralement, Display.DefaultHMDDisplay peut être utilisé sur les casques.

Aucun paramètre supplémentaire.

Disponibilité

  • FrameSource.IsAvailable : Disponibilité
    Utilisé pour déterminer si la source d'images (frame source) est utilisable.
    Si une source d'images n'est pas disponible sur l'appareil d'exécution actuel ou dans l'environnement actuel, cette valeur doit être false.
    Si cette valeur est égale à Optional<bool>.Empty, la coroutine FrameSource.CheckAvailability() sera appelée ; FrameSource.IsAvailable doit être mise à jour avant la fin de cette coroutine.
    L'interface de disponibilité est utilisée lors de l'assemblage de la session (session) ; les composants non disponibles ne seront pas sélectionnés et leurs méthodes ne seront pas appelées pendant l'exécution de la session.
  • FrameSource.CheckAvailability() (optionnel) : Coroutine pour vérifier la disponibilité de la source d'images
    Appelée lorsque FrameSource.IsAvailable est égal à Optional<bool>.Empty. Le processus d'assemblage de la session est bloqué jusqu'à la fin de cette coroutine.

Origine de session

  • ExternalDeviceFrameSource.OriginType : Type d'origine

    • XROrigin : Le SDK de l'appareil utilise Unity.XR.CoreUtils.XROrigin comme origine.
    • Custom : Le SDK de l'appareil utilise une origine personnalisée. Spécifiez ExternalDeviceFrameSource.Origin.
    • None : Le SDK de l'appareil ne définit pas d'origine. L'origine sera alors automatiquement sélectionnée ou créée à partir de la scène, mais ne se déplacera pas.
      La session ne prendra en charge que le mode centre SessionOrigin. Les développeurs d'applications doivent être très prudents quant à la façon dont ils placent les objets virtuels, car toutes les cibles et leur contenu se déplaceront toujours dans le système de coordonnées Unity, et certaines parties du contenu utilisateur (comme le système physique) ne fonctionneront pas correctement. Les objets placés dans le système de coordonnées mondial Unity ne pourront jamais apparaître au bon endroit dans aucune configuration.
  • ExternalDeviceFrameSource.Origin : Objet d'origine
    Définissez votre origine uniquement et seulement lorsque ExternalDeviceFrameSource.OriginType est Custom. Ne le redéfinissez pas dans les autres cas.

Caméra virtuelle

  • FrameSource.CameraCaméra virtuelle
    La caméra n'est pas contrôlée par la session. La transform et la matrice de projection de la caméra, ainsi que le rendu de l'arrière-plan de l'image, doivent être contrôlés par un code externe.
    Cette caméra est uniquement utilisée sur les casques de réalité virtuelle pour afficher du texte de diagnostic dans le champ de vision.
    Non requis lorsque ExternalDeviceFrameSource.OriginType est XROrigin. EasyAR utilisera automatiquement la caméra définie dans le framework XR d'Unity.

Caméra physique

  • FrameSource.DeviceCameras : Paramètres de la caméra physique
    Caméras physiques fournissant des trames de données. Si les données proviennent de plusieurs caméras, la liste doit inclure toutes les caméras physiques.
    Garantir que les paramètres sont accessibles lorsque FrameSource.CameraFrameStarted est true.
  • FrameSource.CameraFrameStarted : Entrée de trame démarrée
    Retourne true lorsque la caméra physique est prête à transmettre des données à EasyAR, et false après son arrêt. EasyAR ne fonctionne pas si cette valeur est false. Lorsqu'elle est true, les données de FrameSource.DeviceCameras doivent être accessibles et les trames transmises sans interruption. EasyAR émet un avertissement après une absence prolongée de trames pour faciliter le diagnostic.

Les paramètres doivent correspondre à ceux de la caméra physique réelle.

Session démarrage et arrêt

  • FrameSource.OnSessionStart(ARSession) : traite l'événement de démarrage de session
    Prend effet lorsque cette source d'images est sélectionnée lors de l'assemblage de la session.
    Peut être utilisé pour une initialisation différée, effectuant ici les travaux d'initialisation spécifiques à la RA.
  • FrameSource.OnSessionStop() : traite l'événement d'arrêt de session
    Prend effet lorsque cette source d'images est sélectionnée lors de l'assemblage de la session.
    Peut être utilisé pour détruire les ressources créées dans FrameSource.OnSessionStart(ARSession) et pendant l'exécution de la session, et restaurer l'état interne. L'appel de cette méthode est garanti avant la destruction de la session. Si la source d'images est détruite avant la session, cette méthode ne sera pas appelée et la session passera à l'état Broken.
  • ExternalFrameSource.TryAcquireBuffer(int) : Tente d'acquérir un bloc mémoire depuis le pool
    Ce bloc mémoire est généralement utilisé pour stocker les données d'image de la trame de caméra et les transmettre à EasyAR.
  • ExternalFrameSource.ReceivedFrameCount : Nombre de trames de caméra reçues par EasyAR
    EasyAR l'utilise pour vérifier l'intégrité de l'entrée des trames de caméra de l'appareil. Peut être utilisé pour le débogage. Si ce nombre cesse d'augmenter, cela indique généralement que l'appareil a cessé d'envoyer des données à EasyAR.

Unity messages

Lors de l'utilisation des messages suivants dans un script, assurez-vous que l'implémentation de la classe de base est appelée :

Prochaines étapes

Thèmes connexes