Lorsque vous portez un casque de réalité mixte, il devient le centre de votre monde holographique. Le composant Appareil photo Unity gère automatiquement le rendu stéréoscopique et suit votre mouvement et rotation de la tête. Toutefois, pour optimiser entièrement la qualité visuelle et la stabilité de l’hologramme, vous devez définir les paramètres de l’appareil photo décrits ci-dessous.
Casques immersifs HoloLens et VR
Les paramètres par défaut du composant Appareil photo Unity sont destinés aux applications 3D traditionnelles, qui ont besoin d’un arrière-plan de type skybox, car ils n’ont pas de monde réel.
Lors de l’exécution sur un casque immersif, vous affichez tout ce que l’utilisateur voit, et vous voudrez probablement conserver la boîte de réception.
Toutefois, lors de l’exécution sur un casque holographique comme HoloLens, le monde réel doit apparaître derrière tout ce que l’appareil photo restitue. Définissez l’arrière-plan de l’appareil photo comme transparent (dans HoloLens, le noir s’affiche comme 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 Clear Flags 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 cette valeur à partir du code, vous pouvez utiliser les fichiers Unity Color.clear
MRTK gère automatiquement les paramètres de caméra spécifiques, en fonction de la configuration dans le profil système de la caméra.
Espace de noms :Microsoft.MixedReality.Toolkit.CameraSystem Type :MixedRealityCameraSystem
Pour vérifier l’opacité de la caméra, le système MixedRealityCamera possède une IsOpaque propriété.
CoreServices.CameraSystem.IsOpaque;
Espace de noms :UnityEngine.XR Type :XRDisplaySubsystem
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 displayOpaque sur le système XRDisplaySubsystem en cours d’exécution.
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’affichage monté sur la tête de votre appareil. Il sera plus facile de disposer votre application si vous imaginez que la position de départ de l’utilisateur est (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 que vous développiez pour HoloLens ou des casques immersifs VR. Une fois que vous l’avez obtenu, passez à la section d’installation 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 l’espace non lié 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 de travailler directement avec la classe MixedRealityPlayspace de MRTK pour Unity et de définir l’échellecible sur World :
MRTK doit gérer la position de l’espace de jeu et de la caméra automatiquement, 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 positionpar (X : 0, Y : 0, Z : 0)
Définissez votre mode d’origine de suivi sur XRInputSubsystem. Après avoir obtenu le sous-système, appelez TrySetTrackingOriginMode :
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Device);
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Unbounded); // Recommendation for OpenXR
Vous pouvez utiliser ARSession pour les applications HoloLens, qui fonctionnent mieux avec les ancres et ARKit/ARCore.
Important
La session AR et les fonctionnalités associées nécessitent l’installation d’AR Foundation.
Il est également possible d’appliquer manuellement les modifications de l’appareil photo sans utiliser ARSession :
Sélectionnez Caméra principale dans le panneau Hiérarchie
Dans le panneau Inspecteur , recherchez le composant Transformer et remplacez la positionpar (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 positionpar (X : 0, Y : 0, Z : 0)
Caméra dans le volet Inspecteur dans Unity
Accédez à la section Autres paramètres du Lecteur du Windows Store
Choisissez Windows Mixed Reality comme appareil, qui peut être répertorié comme Windows Holographique dans les versions antérieures d’Unity
Sélectionner La réalité virtuelle prise en charge
Étant donné que l’objet Main Camera est automatiquement étiqueté comme caméra, Unity alimente tout mouvement et traduction.
Remarque
Ces paramètres doivent être appliqués à la caméra dans chaque scène de votre application.
Par défaut, lorsque vous créez une scène dans Unity, elle contient un objet GameObject de caméra 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, à partir d’applications d’orientation uniquement et de mise à l’échelle assises via des 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 la mise à l’échelle de votre application cible :
Si vous créez pour HL2, nous vous recommandons de créer une expérience de niveau œil ou d’utiliser Scene Understanding pour raisonner le plancher de votre scène.
Accédez à la section Autres paramètres du Lecteur du Windows Store
Choisissez Windows Mixed Reality comme appareil, qui peut être répertorié comme Windows Holographique dans les versions antérieures d’Unity
Sélectionner La réalité virtuelle prise en charge
Étant donné que l’objet Main Camera est automatiquement étiqueté comme caméra, Unity alimente tout mouvement et traduction.
Remarque
Ces paramètres doivent être appliqués à la caméra 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 principal dans la hiérarchie qui inclut le composant Caméra, mais ne dispose pas des paramètres ci-dessous correctement appliqués.
Espace de noms :UnityEngine.XR Type :XRDevice
Pour une expérience à l’échelle debout ou à l’échelle de la salle, vous devez placer du contenu par rapport à l’étage. Vous raisonner sur l’étage de l’utilisateur à l’aide de la phase spatiale, qui représente l’origine au niveau du sol définie par l’utilisateur et la limite facultative de la salle, configurée pendant la première exécution.
Pour vous assurer que Unity fonctionne avec son système de coordonnées mondial au niveau du sol, vous pouvez définir et tester que 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 la valeur true, Unity a correctement basculé son système de coordonnées mondial pour suivre l’image intermédiaire de référence.
Si SetTrackingSpaceType retourne false, Unity n’a pas pu basculer vers le cadre intermédiaire de référence, probablement parce que l’utilisateur n’a pas configuré de plancher dans son environnement. Si une valeur de retour false n’est pas courante, elle peut se produire si la phase est configurée dans une autre salle et que l’appareil est déplacé vers la salle active 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 apparaît sur le sol. L’origine à 0, 0, 0 sera l’endroit spécifique sur l’étage où l’utilisateur se tenait pendant la configuration de la salle, avec -Z représentant la direction vers l’avant qu’ils étaient exposés lors de l’installation.
Accédez à la section Autres paramètres du Lecteur du Windows Store
Choisissez Windows Mixed Reality comme appareil, qui peut être répertorié comme Windows Holographique dans les versions antérieures d’Unity
Sélectionner La réalité virtuelle prise en charge
Étant donné que l’objet Main Camera est automatiquement étiqueté comme caméra, Unity alimente tout mouvement et traduction.
Remarque
Ces paramètres doivent être appliqués à la caméra 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 principal dans la hiérarchie qui inclut le composant Caméra, mais ne dispose pas des 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 mondial d’Unity pour suivre le cadre stationnaire de référence. Dans le mode de suivi stationnaire, le contenu placé dans l’éditeur juste devant l’emplacement par défaut de la caméra (avant est -Z) apparaît devant l’utilisateur lorsque l’application démarre.
Espace de noms :UnityEngine.XR Type :InputTracking
Pour une expérience d’orientation pure uniquement telle qu’une visionneuse vidéo de 360 degrés (où les mises à jour de la tête positionnelle ruineraient l’illusion), vous pouvez ensuite définir XR. InputTracking.disablePositionalTracking sur true :
InputTracking.disablePositionalTracking = true;
Pour une expérience de mise à l’échelle assise, pour permettre à l’utilisateur plus tard de récenter l’origine assise, vous pouvez appeler le XR. Méthode InputTracking.Recenter :
InputTracking.Recenter();
Si vous créez une expérience à l’échelle assise, vous pouvez récentiser l’origine mondiale d’Unity à la position actuelle de l’utilisateur en appelant le XR. Méthode InputTracking.Recenter .
Configuration de l’arrière-plan de l’appareil photo
Si vous utilisez MRTK, l’arrière-plan de l’appareil photo est automatiquement configuré et géré. Pour les projets WSA ou sdk XR hérités, nous vous recommandons de définir l’arrière-plan de l’appareil photo sur un noir solide sur HoloLens et de conserver la zone de ciel 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 basé sur lequel GameObject a la balise MainCamera. Dans XR hérité, il utilise également cette balise pour synchroniser le suivi de la tête. Dans le Kit de développement logiciel (SDK) XR, le suivi principal est piloté par un script TrackedPoseDriver attaché à la caméra.
Partage des mémoires tampons de profondeur
Le partage de la mémoire tampon de profondeur de votre application sur Windows chaque image donnera à votre application l’une 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 pour la mauvaise prédiction à la fois dans la position et l’orientation.
Les casques HoloLens ont quelques méthodes différentes. HoloLens 1 sélectionne automatiquement un point de focus lorsqu’une mémoire tampon de profondeur est fournie, en optimisant la stabilité de l’hologramme le long du plan qui croise le plus de contenu. HoloLens 2 stabilisera le contenu à l’aide du LSR de profondeur (voir remarques).
La boîte de dialogue de configuration de MRTK tentera de définir des paramètres de mémoire tampon de profondeur pour le SDK XR et le WSA hérité, mais il est préférable 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>la gestion des paramètres>du projet 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 génération correcte est sélectionnée, sous forme d’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 à cocher Mémoire tampon de profondeur partagée. Sélectionnez ensuite un format dans la liste déroulante Format du tampon de profondeur.
Remarque
Il est généralement recommandé d’utiliser des mémoires tampons de profondeur 16 bits pour améliorer les performances. Toutefois, si vous utilisez un format de profondeur 16 bits, les effets requis de la mémoire tampon de gabarit (comme certains panneaux de défilement de l’interface utilisateur Unity) ne fonctionnent 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 de point de terminaison.
Pour définir si votre application Unity fournira une mémoire tampon de profondeur à Windows :
Accédez à Modifier>le lecteur> des paramètres>du projet plateforme Windows universelle onglet>Paramètres XR.
Développez l’élément du Kit de développement logiciel (SDK) Windows Mixed Reality.
Cochez ou décochez la case Activer le partage de mémoire tampon de profondeur. L’activation du partage de mémoire tampon de profondeur est vérifiée par défaut dans les nouveaux projets, mais elle a peut-être été désactivée par défaut dans les projets plus anciens.
Une mémoire tampon de profondeur peut améliorer la qualité visuelle tant que Windows peut mapper avec précision les valeurs de profondeur par pixel normalisées dans votre mémoire tampon de profondeur à des 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 transmet les valeurs de profondeur de manière classique, vous devez généralement être correct ici, bien que le rendu translucide passe cette écriture dans la mémoire tampon de profondeur tout en affichant à travers les pixels de couleur existants peut confondre la reprojection. Si vous savez que vos passes de rendu laisseront un grand nombre de vos pixels de profondeur finaux avec des valeurs de profondeur inexactes, vous obtiendrez probablement une meilleure qualité visuelle en décochant « Activer le partage de mémoire tampon de profondeur ».
Remarque
Il est généralement recommandé d’utiliser des mémoires tampons de profondeur 16 bits pour améliorer les performances. Toutefois, si vous utilisez un format de profondeur 16 bits, les effets requis de la mémoire tampon de gabarit (comme certains panneaux de défilement de l’interface utilisateur Unity) ne fonctionnent 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 de point de terminaison.
Utilisation de plans de découpage
Le rendu du contenu trop proche de l’utilisateur peut être mal à l’aise dans la réalité mixte. Vous pouvez ajuster les plans de clip proche et lointain sur le composant Caméra.
Sélectionnez l’appareil photo principal dans le panneau Hiérarchie
Dans le panneau Inspecteur, recherchez les plans de découpage du composant Caméra et remplacez la zone de texte Proche de la version 0.3 par 0.85. Le contenu rendu encore plus proche peut entraîner l’inconfort de l’utilisateur et doit être évité conformément aux instructions de distance de rendu.
Recentrage de la caméra
Si vous créez une expérience à l’échelle assise, vous pouvez récentiser l’origine mondiale d’Unity à la position actuelle de l’utilisateur en appelant le XR. Méthode InputTracking.Recenter dans le XR hérité ou la méthode XRInputSubsystem.TryRecenter dans le SDK XR.
Téléportation
Cette fonctionnalité est généralement réservée aux expériences VR :
MRTK fournit un système de téléporteur intégré qui fonctionne automatiquement entre les mains et les contrôleurs articulés.
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 le XR Interaction Toolkit.
Si vous choisissez d’implémenter votre propre appareil, il est bon de garder à l’esprit que vous ne pouvez pas déplacer l’appareil photo directement. En raison du contrôle de l’appareil photo de 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 votre propre appareil, il est bon de garder à l’esprit que vous ne pouvez pas déplacer l’appareil photo directement. En raison du contrôle de l’appareil photo de 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 casques immersifs reprojetent chaque image rendue par votre application pour s’ajuster à toute mauvaise prédiction de la position réelle de la tête de l’utilisateur lorsque des photons sont émis.
Par défaut :
Les casques immersifs VR prennent soin de la reprojection positionnelle si l’application fournit une mémoire tampon de profondeur pour une trame donnée. Les casques immersifs ajustent également vos hologrammes pour la mauvaise prédiction à la fois dans la position et l’orientation. Si une mémoire tampon de profondeur n’est pas fournie, le système corrige uniquement les erreurs d’orientation.
Les casques holographiques tels que HoloLens 2 s’occupent de la reprojection positionnelle si l’application fournit sa mémoire tampon de profondeur ou non. La reprojection positionnelle est possible sans mémoire tampon de profondeur sur HoloLens, car le rendu est souvent éparse 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 verrouillé par le corps rigide (par exemple, du contenu vidéo à 360 degrés), vous pouvez définir explicitement le mode de reprojection sur l’orientation uniquement en le définissant sur ReprojectionMode.OrientationOnly.
Par exemple, si vous créez une expérience d’orientation uniquement avec du contenu verrouillé par le corps rigide (par exemple, du contenu vidéo à 360 degrés), vous pouvez définir explicitement le mode de reprojection sur l’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 MRTK. À partir d’ici, vous pouvez passer au composant suivant :