Table of Contents

Caméra Unity dans les scènes AR

L'expérience AR dans Unity repose sur la caméra. Cet article explique le rôle de la caméra dans les scènes AR et la manière dont les sessions contrôlent les propriétés de la caméra pour garantir une expérience AR correcte.

Avant de commencer

Le rôle de la caméra dans les scènes AR

Dans Unity, la caméra sert à montrer le monde du jeu au joueur, mais dans les scènes AR son rôle est encore plus important. Elle ne rend pas seulement le contenu virtuel, elle doit aussi s'aligner sur le monde réel afin que les objets virtuels soient correctement superposés à la scène réelle.

Cette vidéo montre une scène AR simple. La partie gauche correspond à la vue Scene et la partie droite à la vue Game. La vidéo a été enregistrée dans le mode Play de Unity Editor à l'aide de simulation data. Le contenu de la vue Game est le même que ce que l'utilisateur voit sur le téléphone dans le monde réel.

Dans cette vidéo, la caméra représentant l'utilisateur (icône de caméra) se déplace en fonction du mouvement de l'utilisateur dans le monde réel. Le cône blanc montre la position et l'orientation de la caméra sur la période précédente. Dans la vue Game, la caméra n'affiche pas seulement le contenu virtuel de la vue Scene, elle superpose également l'image du monde réel sous le contenu virtuel. C'est le comportement typique d'une caméra dans une scène AR.

Pour garantir que les objets virtuels soient correctement superposés à la scène réelle, certaines propriétés de la caméra doivent être ajustées en fonction de l'état d'exécution d'AR. Ces propriétés incluent :

  • le transform de la caméra (position et orientation)
  • le champ de vision (FOV), le ratio d'aspect et la matrice de projection de la caméra
  • les paramètres de culling de la caméra (<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>)
Avertissement

Lors du développement d'une application, modifier ces propriétés de caméra sur la session camera n'est pas pris en charge, car cela peut empêcher l'alignement correct du contenu virtuel avec le monde réel et nuire à l'expérience utilisateur. Même si ces propriétés sont modifiées par un moyen quelconque, le système AR écrasera ces changements pendant l'exécution, ou un comportement inattendu peut survenir en raison d'une incohérence entre les données rendues et les données calculées.

Selon l'objet qui contrôle ces propriétés, la caméra utilisée par la session peut être divisée en deux types : les caméras contrôlées par la session et celles qui ne le sont pas.

Caméras contrôlées par la session

Si la session camera n'appartient à aucun système externe, comme un headset ou AR Foundation, la session contrôle automatiquement les propriétés de caméra ci-dessus afin de garantir un alignement correct avec le monde réel.

transform

Le transform de la caméra (position et orientation) est ajusté par la session en fonction de l'état d'exécution de la fonctionnalité AR. En général, la session met à jour la position et l'orientation de la caméra à partir des données de motion tracking et/ou des données de tracking target afin que le contenu vu par l'utilisateur corresponde au monde réel.

Dans Unity, le point de référence central de tout le tracking AR est appelé session origin, et la règle qui détermine cet origin pendant l'exécution de la session est appelée center mode. Le transform de la caméra se comporte différemment selon le center mode :

  • En center mode <xref:u:easyar.ARSession.ARCenterMode.Camera>, la caméra peut se déplacer librement.

    En général, le mode <xref:u:easyar.ARSession.ARCenterMode.Camera> est rarement utilisé par les applications.

  • Dans d'autres center mode, comme <xref:u:easyar.ARSession.ARCenterMode.FirstTarget>, la caméra ne peut pas se déplacer librement.

    <xref:u:easyar.ARSession.ARCenterMode.FirstTarget> est le mode utilisé par la plupart des applications AR.

Avertissement

La valeur scale du transform de la caméra doit toujours rester (1, 1, 1). Modifier le scale de la caméra peut entraîner un comportement inattendu.

Matrice de projection

La matrice de projection de la caméra est mise à jour à chaque frame par la session en fonction des intrinsics de la caméra physique afin de garantir que le contenu virtuel soit correctement superposé à la scène réelle.

Paramètres de culling

Les paramètres de culling de la caméra (<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>) sont ajustés en fonction des paramètres mirror de la session afin de garantir que le contenu virtuel soit correctement rendu dans la scène réelle.

Lorsque le paramètre correspondant à la caméra actuelle dans <xref:u:easyar.ARSession.HorizontalFlip> est <xref:u:easyar.ARSession.ARHorizontalFlipMode.World>, <xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType> est défini sur true. Il s'agit de la configuration par défaut pour la front camera.

Flux vidéo d'arrière-plan AR

Dans les scènes AR, la caméra rend généralement le flux vidéo de la caméra physique comme arrière-plan pour renforcer l'immersion. La session gère automatiquement l'acquisition et le rendu du flux vidéo, et garantit qu'il est correctement aligné avec le contenu virtuel.

Caméras non contrôlées par la session

Lors de l'utilisation d'un headset ou d'AR Foundation, ou lorsque l'implémentation spécifie <xref:u:easyar.FrameSource.IsCameraUnderControl> à false pour <xref:u:easyar.FrameSource>, la session ne contrôle pas les propriétés de caméra ci-dessus. Elles sont alors contrôlées par le système externe.

Avertissement

Bien que la session ne contrôle pas les propriétés de la caméra dans ce cas, elles restent contrôlées par un système tiers comme un SDK de headset ou AR Foundation, de sorte que leur modification pendant le développement reste non prise en charge.

Considérations lors de la copie de caméras

Il peut parfois être nécessaire de copier les paramètres de la session camera vers une autre caméra. Dans ce cas, faites particulièrement attention aux deux points suivants :

  • Moment de récupération des propriétés : avec une caméra contrôlée, référez-vous à Obtenir la sortie de session pour obtenir ces paramètres au bon moment ; avec une caméra non contrôlée par la session, référez-vous à la documentation du système tiers pour les obtenir au bon moment.
  • Champ de vision (FOV), ratio d'aspect et matrice de projection de la caméra : utilisez <xref:UnityEngine.Camera.projectionMatrix?displayProperty=nameWithType> pour obtenir la matrice de projection de la caméra et la copier vers l'autre caméra. <xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType> et <xref:UnityEngine.Camera.aspect?displayProperty=nameWithType> font mathématiquement partie de la matrice de projection, donc utiliser seulement <xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType> et <xref:UnityEngine.Camera.aspect?displayProperty=nameWithType> n'est pas suffisant.

Étapes suivantes

Sujets connexes