Lorsque vous portez un casque de réalité mixte, il devient le centre de votre monde holographique. Le composant Unity Camera gère automatiquement le rendu stéréoscopique et suit le mouvement et la rotation de votre tête. Toutefois, pour optimiser entièrement la qualité visuelle et la stabilité des hologrammes, vous devez définir les paramètres de la caméra décrits ci-dessous.
Casques immersifs HoloLens et VR
Les paramètres par défaut du composant Appareil photo Unity concernent les applications 3D traditionnelles, qui ont besoin d’un arrière-plan de type skybox, car elles n’ont pas de monde réel.
Lorsque vous exécutez sur un casque immersif, vous affichez tout ce que l’utilisateur voit, et vous voudrez donc probablement conserver la skybox.
Toutefois, lorsque vous exécutez sur un casque holographique comme HoloLens, le monde réel doit apparaître derrière tout ce que la caméra affiche. Définissez l’arrière-plan de la caméra sur transparent (dans HoloLens, le rendu noir est transparent) au lieu d’une texture Skybox :
Sélectionnez l’appareil photo principal dans le panneau Hiérarchie
Dans le panneau Inspecteur, recherchez le composant Caméra et modifiez la liste déroulante Effacer les indicateurs de Skybox en Couleur unie
Sélectionnez le sélecteur de couleurs d’arrière-plan et remplacez les valeurs RVBA par (0, 0, 0, 0)
Si vous définissez ce paramètre à partir du code, vous pouvez utiliser unity Color.clear
Espace de noms :UnityEngine.XR.WSA Type:HolographicSettings
Vous pouvez utiliser du code de script pour déterminer au moment de l’exécution si le casque est immersif ou holographique en vérifiant HolographicSettings.IsDisplayOpaque.
Installation de l'appareil photo
Quel que soit le type d’expérience que vous développez, la caméra principale est toujours le composant de rendu stéréo principal attaché à l’écran monté sur la tête de votre appareil. Il sera plus facile de disposer votre application si vous imaginez la position de départ de l’utilisateur comme (X: 0, Y: 0, Z: 0). Étant donné que la caméra principale suit le mouvement de la tête de l’utilisateur, la position de départ de l’utilisateur peut être définie en définissant la position de départ de la caméra principale.
Le choix central que vous devez faire est de savoir si vous développez pour des casques immersifs HoloLens ou VR. Une fois que vous avez cela, passez à la section de configuration qui s’applique.
Configuration de la caméra HoloLens
Pour les applications HoloLens, vous devez utiliser des ancres pour tous les objets que vous souhaitez verrouiller dans l’environnement de scène. Nous vous recommandons d’utiliser un espace illimité pour optimiser la stabilité et créer des ancres dans plusieurs salles.
Suivez ce tutoriel pas à pas pour ajouter et configurer automatiquement Mixed Reality Toolkit dans votre projet Unity. Il est également possible d’utiliser directement la classe MixedRealityPlayspace de MRTK pour Unity et de définir l’échelle cible sur World :
MRTK doit gérer automatiquement la position de l’espace de jeu et de la caméra, mais il est bon de vérifier :
Dans le panneau Hierarchy, développez MixedRealityPlayspace GameObject et recherchez l’objet enfant Main Camera
Dans le panneau Inspecteur , recherchez le composant Transformer et remplacez la position par (X: 0, Y: 0, Z: 0)
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Device);
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Unbounded); // Recommendation for OpenXR
Vous pouvez utiliser ARSession pour les applications HoloLens, ce qui fonctionne mieux avec les ancres et ARKit/ARCore.
Important
AR Session et les fonctionnalités associées nécessitent l’installation d’AR Foundation.
Il est également possible d’appliquer les modifications de la caméra manuellement sans utiliser ARSession :
Sélectionnez Caméra principale dans le panneau Hiérarchie .
Dans le panneau Inspecteur , recherchez le composant Transformer et remplacez la position par (X: 0, Y: 0, Z: 0)
Caméra dans le volet Inspecteur dans Unity
Ajouter un TrackedPoseDriver à la caméra principale
Sélectionnez Caméra principale dans le panneau Hiérarchie .
Dans le panneau Inspecteur , recherchez le composant Transformer et remplacez la position par (X: 0, Y: 0, Z: 0)
Caméra dans le volet Inspecteur dans Unity
Accédez à la section Autres paramètres du Windows Store Player Settings
Choisissez Windows Mixed Reality comme appareil, qui peut être répertorié comme Windows Holographique dans les versions antérieures d’Unity
Sélectionnez Réalité virtuelle prise en charge
Étant donné que l’objet Main Camera est automatiquement étiqueté comme caméra, Unity alimente tous les mouvements et la traduction.
Notes
Ces paramètres doivent être appliqués à l’appareil photo dans chaque scène de votre application.
Par défaut, lorsque vous créez une scène dans Unity, elle contient un GameObject d’appareil photo principal dans la hiérarchie qui inclut le composant Caméra, mais peut ne pas avoir les paramètres correctement appliqués.
Configuration de la caméra VR
Windows Mixed Reality prend en charge les applications sur un large éventail d’échelles d’expérience, depuis les applications d’orientation uniquement et de mise à l’échelle assise jusqu’aux applications à l’échelle de la salle. Sur HoloLens, vous pouvez aller plus loin et créer des applications à l’échelle mondiale qui permettent aux utilisateurs de marcher au-delà de 5 mètres, en explorant un étage entier d’un bâtiment et au-delà.
La première étape de la création d’une expérience de réalité mixte dans Unity consiste à déterminer l’expérience de mise à l’échelle que votre application ciblera :
Si vous créez pour HL2, nous vous recommandons de créer une expérience au niveau des yeux, ou d’utiliser La compréhension de la scène pour raisonner l’étage de votre scène.
Accédez à la section Autres paramètres du Windows Store Player Settings
Choisissez Windows Mixed Reality comme appareil, qui peut être répertorié comme Windows Holographique dans les versions antérieures d’Unity
Sélectionnez Réalité virtuelle prise en charge
Étant donné que l’objet Main Camera est automatiquement étiqueté comme caméra, Unity alimente tous les mouvements et la traduction.
Notes
Ces paramètres doivent être appliqués à l’appareil photo dans chaque scène de votre application.
Par défaut, lorsque vous créez une scène dans Unity, elle contient un GameObject de caméra principale dans la hiérarchie qui inclut le composant Caméra, mais qui n’a pas les paramètres ci-dessous correctement appliqués.
Espace de noms :UnityEngine.XR Type :XRDevice
Pour une expérience à l’échelle permanente ou à l’échelle de la salle, vous devez placer le contenu par rapport à l’étage. Vous raisonnerez l’étage de l’utilisateur à l’aide de la phase spatiale, qui représente l’origine au niveau de l’étage définie par l’utilisateur et la limite de salle facultative, configurées lors de la première exécution.
Pour vous assurer qu’Unity fonctionne avec son système de coordonnées mondiales au niveau du plancher, vous pouvez définir et tester qu’Unity utilise le type d’espace de suivi RoomScale :
if (XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale))
{
// RoomScale mode was set successfully. App can now assume that y=0 in Unity world coordinate represents the floor.
}
else
{
// RoomScale mode was not set successfully. App cannot make assumptions about where the floor plane is.
}
Si SetTrackingSpaceType retourne true, Unity a correctement basculé son système de coordonnées mondiales pour suivre le cadre de référence de l’étape.
Si SetTrackingSpaceType retourne la valeur false, Unity n’a pas pu basculer vers le cadre de référence, probablement parce que l’utilisateur n’a pas configuré d’étage dans son environnement. Bien qu’une valeur de retour false ne soit pas courante, cela peut se produire si la phase est configurée dans une autre salle et que l’appareil est déplacé vers la salle actuelle sans que l’utilisateur configure une nouvelle étape.
Une fois que votre application a correctement définit le type d’espace de suivi RoomScale, le contenu placé sur le plan y=0 s’affiche au sol. L’origine à 0, 0, 0 sera l’emplacement spécifique sur l’étage où l’utilisateur s’est tenu pendant la configuration de la salle, avec -Z représentant la direction vers l’avant qu’il ait été orienté pendant la configuration.
Accédez à la section Autres paramètres du Windows Store Player Settings
Choisissez Windows Mixed Reality comme appareil, qui peut être répertorié comme Windows Holographique dans les versions antérieures d’Unity
Sélectionnez Réalité virtuelle prise en charge
Étant donné que l’objet Main Camera est automatiquement étiqueté comme caméra, Unity alimente tous les mouvements et la traduction.
Notes
Ces paramètres doivent être appliqués à l’appareil photo dans chaque scène de votre application.
Par défaut, lorsque vous créez une scène dans Unity, elle contient un GameObject de caméra principale dans la hiérarchie qui inclut le composant Caméra, mais qui n’a pas les paramètres ci-dessous correctement appliqués.
Espace de noms :UnityEngine.XR Type :XRDevice
Pour créer une expérience d’orientation uniquement ou d’échelle assise, vous devez définir Unity sur le type d’espace de suivi stationnaire. L’espace de suivi stationnaire définit le système de coordonnées mondiales d’Unity pour suivre le cadre de référence stationnaire. En mode de suivi stationnaire, le contenu placé dans l’éditeur juste devant l’emplacement par défaut de la caméra (avant est -Z) s’affiche devant l’utilisateur au lancement de l’application.
Espace de noms :UnityEngine.XR Type :InputTracking
Pour une expérience d’orientation pure, telle qu’une visionneuse vidéo à 360 degrés (où les mises à jour de la tête de position gâcheraient l’illusion), vous pouvez ensuite définir XR. InputTracking.disablePositionalTracking to true :
InputTracking.disablePositionalTracking = true;
Pour une expérience de mise à l’échelle assise, pour permettre à l’utilisateur de recentrer ultérieurement l’origine des sièges, vous pouvez appeler le XR. Méthode InputTracking.Recenter :
Si vous utilisez MRTK, l’arrière-plan de la caméra est automatiquement configuré et géré. Pour les projets sdk XR ou WSA hérités, nous vous recommandons de définir l’arrière-plan de l’appareil photo sur un noir uni sur HoloLens et de conserver la skybox pour vr.
Utilisation de plusieurs caméras
Lorsqu’il existe plusieurs composants caméra dans la scène, Unity sait quelle caméra utiliser pour le rendu stéréoscopique en fonction de l’étiquette MainCamera dans GameObject. Dans XR hérité, il utilise également cette balise pour synchroniser le suivi de la tête. Dans le SDK XR, le suivi de la tête est piloté par un script TrackedPoseDriver attaché à la caméra.
Partage de mémoires tampons de profondeur
Le partage de la mémoire tampon de profondeur de votre application sur Windows pour chaque image donnera à votre application l’un des deux améliorations de la stabilité de l’hologramme, en fonction du type de casque pour lequel vous effectuez le rendu :
Les casques immersifs VR peuvent prendre en charge la reprojection positionnelle lorsqu’une mémoire tampon de profondeur est fournie, en ajustant vos hologrammes en cas de mauvaise dépréciation à la fois dans la position et l’orientation.
Les casques HoloLens ont plusieurs méthodes différentes. HoloLens 1 sélectionne automatiquement un point de focus lorsqu’une mémoire tampon de profondeur est fournie, ce qui optimise la stabilité de l’hologramme le long du plan qui croise le plus de contenu. HoloLens 2 stabilisera le contenu à l’aide de depth LSR (voir Les remarques).
La boîte de dialogue de configuration de MRTK tente de définir les paramètres de mémoire tampon de profondeur pour le SDK XR et le WSA hérité, mais il est judicieux de vérifier ces onglets et de vérifier les paramètres dans Unity.
Pour définir si votre application Unity fournira une mémoire tampon de profondeur à Windows :
Accédez à Modifier les> paramètres >du projetGestion du plug-in XR et vérifiez que l’élément de menu est développé.
Cliquez sur l’élément de menu correspondant au runtime XR que vous avez choisi, Windows Mixed Reality ou OpenXR. En outre, vérifiez que la plateforme de build appropriée est sélectionnée, car les onglets pour Windows autonome et plateforme Windows universelle sont disponibles.
Pour activer et configurer :
Pour OpenXR, sélectionnez un format de profondeur ou « Aucun » dans la liste déroulante Mode de soumission de profondeur .
Pour Windows Mixed Reality, cochez ou décochez la case Mémoire tampon de profondeur partagée. Sélectionnez ensuite un format dans la liste déroulante Format de la mémoire tampon de profondeur .
Notes
Il est généralement recommandé d’utiliser des mémoires tampons de profondeur de 16 bits pour améliorer les performances. Toutefois, si vous utilisez le format de profondeur 16 bits, la mémoire tampon de gabarit nécessite des effets (comme certains panneaux de défilement de l’interface utilisateur Unity) ne fonctionne pas, car Unity ne crée pas de mémoire tampon de gabarit dans ce paramètre. La sélection du format de profondeur 24 bits à l’inverse crée généralement une mémoire tampon de gabarit 8 bits , le cas échéant, sur la plateforme graphique du point de terminaison.
Pour définir si votre application Unity fournira une mémoire tampon de profondeur à Windows :
Accédez à Modifier>les paramètres> dulecteur>project plateforme Windows universelle onglet>Paramètres XR.
Développez l’élément sdk Windows Mixed Reality.
Activez ou décochez la case Activer le partage de mémoire tampon de profondeur . Activer le partage de mémoire tampon de profondeur est coché par défaut dans les nouveaux projets, mais peut avoir été désactivé par défaut dans les anciens projets.
Une mémoire tampon de profondeur peut améliorer la qualité visuelle tant que Windows peut mapper avec précision les valeurs de profondeur normalisées par pixel de votre mémoire tampon de profondeur aux distances en mètres, à l’aide des plans proches et lointains que vous avez définis dans Unity sur la caméra principale. Si votre rendu réussit à gérer les valeurs de profondeur de manière classique, vous devez généralement être correct ici, bien que le rendu translucide passe que l’écriture dans la mémoire tampon de profondeur tout en affichant à travers les pixels de couleur existants peut perturber la reprojection. Si vous savez que vos passes de rendu laisseront la plupart de vos pixels de profondeur finaux avec des valeurs de profondeur inexactes, vous êtes susceptible d’obtenir une meilleure qualité visuelle en décochant « Activer le partage de mémoire tampon de profondeur ».
Notes
Il est généralement recommandé d’utiliser des mémoires tampons de profondeur de 16 bits pour améliorer les performances. Toutefois, si vous utilisez le format de profondeur 16 bits, la mémoire tampon de gabarit nécessite des effets (comme certains panneaux de défilement de l’interface utilisateur Unity) ne fonctionne pas, car Unity ne crée pas de mémoire tampon de gabarit dans ce paramètre. La sélection du format de profondeur 24 bits à l’inverse crée généralement une mémoire tampon de gabarit 8 bits , le cas échéant, sur la plateforme graphique du point de terminaison.
Utilisation de plans de découpage
Le rendu du contenu trop proche de l’utilisateur peut être inconfortable dans la réalité mixte. Vous pouvez ajuster les plans de découpage proches et lointains sur le composant Caméra.
Sélectionnez l’appareil photo principal dans le panneau Hiérarchie
Dans le panneau Inspecteur , recherchez le composant CaméraPlans de découpage et remplacez la zone de texte Près de 0,3 par 0,85. Le contenu rendu encore plus proche peut entraîner une gêne de l’utilisateur et doit être évité conformément aux recommandations de distance de rendu.
MRTK fournit un système de téléportation intégré qui fonctionne automatiquement entre les mains articulées et les contrôleurs.
Nous vous recommandons d’utiliser l’implémentation de téléportation de MRTK.
Si vous choisissez de ne pas utiliser MRTK, Unity fournit une implémentation de téléportation dans XR Interaction Toolkit.
Si vous choisissez d’implémenter la vôtre, il est bon de garder à l’esprit que vous ne pouvez pas déplacer la caméra directement. En raison du contrôle de la caméra par Unity pour le suivi de la tête, vous devez donner à la caméra un parent dans la hiérarchie et déplacer ce GameObject à la place. Il s’agit de l’équivalent du Playspace de MRTK.
Nous vous recommandons d’utiliser l’implémentation de téléportation de MRTK.
Si vous choisissez d’implémenter la vôtre, il est bon de garder à l’esprit que vous ne pouvez pas déplacer la caméra directement. En raison du contrôle de la caméra par Unity pour le suivi de la tête, vous devez donner à la caméra un parent dans la hiérarchie et déplacer ce GameObject à la place. Il s’agit de l’équivalent du Playspace de MRTK.
Modes de reprojection
HoloLens et les casques immersifs reprojetent chaque image rendue par votre application pour s’adapter à toute mauvaise interprétation de la position réelle de la tête de l’utilisateur lors de l’émission de photons.
Par défaut :
Les casques immersifs VR prennent en charge la reprojection positionnelle si l’application fournit une mémoire tampon de profondeur pour un cadre donné. Les casques immersifs ajustent également vos hologrammes en cas de mauvaise dépréciation à la fois dans la position et l’orientation. Si aucune mémoire tampon de profondeur n’est fournie, le système ne corrige que les erreurs d’orientation.
Les casques holographiques comme HoloLens 2 s’occupent de la reprojection positionnelle, que l’application fournisse ou non sa mémoire tampon de profondeur. La reprojection positionnelle est possible sans tampons de profondeur sur HoloLens, car le rendu est souvent partiellement alloué avec un arrière-plan stable fourni par le monde réel.
Par exemple, si vous créez une expérience d’orientation uniquement avec du contenu strictement verrouillé au corps (par exemple, du contenu vidéo à 360 degrés), vous pouvez définir explicitement le mode de reprojection sur orientation uniquement en le définissant sur ReprojectionMode.OrientationOnly.
Par exemple, si vous créez une expérience d’orientation uniquement avec du contenu strictement verrouillé au corps (par exemple, du contenu vidéo à 360 degrés), vous pouvez définir explicitement le mode de reprojection sur orientation uniquement en le définissant sur HolographicReprojectionMode.OrientationOnly.
Point de contrôle de développement suivant
Si vous suivez le parcours de développement Unity que nous avons mis en place, vous êtes en train d’explorer les blocs de construction principaux de MRTK. À partir de là, vous pouvez passer au module suivant :