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
- Découvrez les concepts de base, les composants et le flux de travail des sessions dans Introduction à ARSession.
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
Sceneet la partie droite à la vueGame. La vidéo a été enregistrée dans le modePlayde Unity Editor à l'aide de simulation data. Le contenu de la vueGameest 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 vueScene, 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
- Lisez Configuration de la caméra pour apprendre à configurer la caméra pour la meilleure expérience AR