Vue d’ensemble du rendu holographique

Le rendu holographique permet à votre application de dessiner un hologramme à un emplacement précis dans le monde autour de l’utilisateur, qu’il soit placé précisément dans le monde physique ou dans un domaine virtuel que vous avez créé. Les hologrammes sont des objets faits de son et de lumière. Le rendu permet à votre application d’ajouter la lumière.

Prise en charge des appareils

Fonctionnalité HoloLens (première génération) HoloLens 2 Casques immersifs
Rendu ✔️ ✔️ ✔️

Rendu holographique

La clé du rendu holographique est de savoir quel type d’appareil est utilisé. Les appareils dotés d’écrans d’affichage, tels que HoloLens, ajoutent de la lumière au monde. Les pixels noirs sont entièrement transparents, tandis que les pixels plus lumineux sont de plus en plus opaques. Étant donné que la lumière des écrans est ajoutée à la lumière du monde réel, les pixels blancs sont translucides.

Bien que le rendu stéréoscopique fournisse un repère de profondeur pour vos hologrammes, l’ajout d’effets de mise à la terre peut aider les utilisateurs à voir plus facilement la surface à proximité d’un hologramme. Une technique de mise à la terre consiste à ajouter une lueur autour d’un hologramme sur la surface voisine, puis à restituer une ombre sur cette lueur. De cette façon, votre ombre semble soustraire la lumière de l’environnement. Le son spatial est un autre indicateur de profondeur important, qui permet aux utilisateurs de raisonner sur la distance et l’emplacement relatif d’un hologramme.

Les appareils avec des écrans opaques, comme Windows Mixed Reality casques immersifs, bloquent le monde. Les pixels noirs sont un noir uni, et toute autre couleur apparaît comme cette couleur pour l’utilisateur. Votre application est responsable du rendu de tout ce que l’utilisateur voit. Cela rend encore plus important de maintenir un taux d’actualisation constant afin que les utilisateurs aient une expérience confortable.

Paramètres de rendu prédits

Les casques de réalité mixte (hololens et casques immersifs) suivent en permanence la position et l’orientation de la tête de l’utilisateur par rapport à son environnement. Lorsque votre application commence à préparer son image suivante, le système prédit l’emplacement de la tête de l’utilisateur à l’avenir au moment exact où l’image s’affiche sur les écrans. Sur la base de cette prédiction, le système calcule la vue et les transformations de projection à utiliser pour cette image. Votre application doit utiliser ces transformations pour produire des résultats corrects. Si les transformations fournies par le système ne sont pas utilisées, l’image résultante ne sera pas alignée sur le monde réel, ce qui entraîne un inconfort pour l’utilisateur.

Notes

Pour prédire avec précision quand une nouvelle image atteindra les écrans, le système mesure constamment la latence effective de bout en bout du pipeline de rendu de votre application. Pendant que le système s’ajuste à la longueur de votre pipeline de rendu, vous pouvez améliorer la stabilité de l’hologramme en conservant ce pipeline aussi court que possible.

Les applications qui utilisent des techniques avancées pour augmenter la prédiction système peuvent remplacer les transformations de la vue système et de la projection. Ces applications doivent toujours utiliser des transformations fournies par le système comme base pour leurs transformations personnalisées afin de produire des résultats significatifs.

Autres paramètres de rendu

Lors du rendu d’une image, le système spécifie la fenêtre d’affichage de la mémoire tampon arrière dans laquelle votre application doit dessiner. Cette fenêtre d’affichage est souvent plus petite que la taille totale de la mémoire tampon d’image. Quelle que soit la taille de la fenêtre d’affichage, une fois le cadre rendu par l’application, le système met à l’échelle l’image pour remplir l’intégralité des affichages.

Pour les applications qui se trouvent dans l’impossibilité d’effectuer un rendu à la fréquence d’actualisation requise, les paramètres de rendu système peuvent être configurés pour réduire la pression de la mémoire et le coût de rendu au prix d’une augmentation de l’aliasing de pixels. Le format de mémoire tampon arrière peut également être modifié, ce qui, pour certaines applications, peut aider à améliorer la bande passante mémoire et le débit de pixels.

Le frustum de rendu, la résolution et la fréquence d’image dans lesquels votre application est demandée peuvent également changer d’image en image, et peuvent différer d’un œil gauche et d’un œil droit à l’autre. Par exemple, lorsque la capture de réalité mixte (CRM) est active et que la configuration de l’affichage photo/vidéo n’est pas activée, un œil peut être rendu avec un FOV ou une résolution plus grande.

Pour une image donnée, votre application doit effectuer un rendu à l’aide de la transformation d’affichage, de la transformation de projection et de la résolution de la fenêtre d’affichage fournies par le système. En outre, votre application ne doit jamais supposer qu’un paramètre de rendu ou de vue reste fixe d’une image à l’autre. Les moteurs comme Unity gèrent toutes ces transformations pour vous dans leurs propres objets de caméra afin que le mouvement physique de vos utilisateurs et l’état du système soient toujours respectés. Si votre application permet de déplacer virtuellement l’utilisateur à travers le monde (par exemple, à l’aide du stick sur un boîtier de commande), vous pouvez ajouter un objet de plateforme parente au-dessus de la caméra qui le déplace. Cela fait que la caméra reflète à la fois le mouvement virtuel et physique de l’utilisateur. Si votre application modifie la transformation d’affichage, la transformation de projection ou la dimension de fenêtre d’affichage fournie par le système, elle doit en informer le système en appelant l’API de remplacement appropriée.

Pour améliorer la stabilité de votre rendu holographique, votre application doit fournir à Windows chaque image la mémoire tampon de profondeur qu’elle a utilisée pour le rendu. Si votre application fournit une mémoire tampon de profondeur, elle doit avoir des valeurs de profondeur cohérentes, avec la profondeur exprimée en mètres de la caméra. Cela permet au système d’utiliser vos données de profondeur par pixel pour mieux stabiliser le contenu si la tête de l’utilisateur finit légèrement décalée par rapport à l’emplacement prédit. Si vous n’êtes pas en mesure de fournir votre mémoire tampon de profondeur, vous pouvez fournir un point de focus et normal, en définissant un plan qui coupe la plupart de votre contenu. Si la mémoire tampon de profondeur et un plan de focus sont fournis, le système peut utiliser les deux. En particulier, il est utile de fournir à la fois la mémoire tampon de profondeur et un point de focus qui comprend un vecteur de vitesse lorsque votre application affiche des hologrammes en mouvement.

Pour plus d’informations sur cette rubrique, reportez-vous à l’article Rendu dans DirectX .

Caméras holographiques

Windows Mixed Reality introduit le concept d’une caméra holographique. Les caméras holographiques sont similaires à la caméra traditionnelle que l’on trouve dans les textes graphiques 3D ; ils définissent à la fois les propriétés extrinsèques (position et orientation) et intrinsèques de la caméra. (Par exemple, le champ d’affichage est utilisé pour afficher une scène 3D virtuelle.) Contrairement aux caméras 3D traditionnelles, l’application ne contrôle pas la position, l’orientation et les propriétés intrinsèques de la caméra. Au lieu de cela, la position et l’orientation de la caméra holographique sont implicitement contrôlées par le mouvement de l’utilisateur. Le déplacement de l’utilisateur est relayé à l’application sur une base image par image via une transformation d’affichage. De même, les propriétés intrinsèques de la caméra sont définies par l’optique étalonnée de l’appareil et relayées image par image via la transformation de projection.

En général, votre application s’affiche pour une seule caméra stéréo. Une boucle de rendu robuste prend en charge plusieurs caméras et prend en charge les caméras mono et stéréo. Par exemple, le système peut demander à votre application de rendre d’un autre point de vue lorsque l’utilisateur active une fonctionnalité telle que la capture de réalité mixte (CRM), en fonction de la forme du casque. Les applications qui peuvent prendre en charge plusieurs caméras les obtiennent en optant pour le type de caméras qu’elles peuvent prendre en charge.

Rendu du volume

Lors du rendu d’IRM médicaux ou d’ingénierie de volumes en 3D, les techniques de rendu de volume sont souvent utilisées. Ces techniques peuvent être intéressantes dans la réalité mixte, où les utilisateurs peuvent naturellement voir un tel volume sous des angles clés, simplement en déplaçant leur tête.

Résolutions prises en charge sur HoloLens (première génération)

  • La taille maximale de la fenêtre d’affichage est une propriété de HolographicDisplay. HoloLens est défini sur la taille maximale de la fenêtre d’affichage, qui est 720p (1268x720), par défaut.
  • La taille de la fenêtre d’affichage peut être modifiée en définissant le ViewportScaleFactor sur holographicCamera. Ce facteur d’échelle est dans la plage de 0 à 1.
  • La taille de la fenêtre d’affichage prise en charge la plus faible sur HoloLens (première génération) est de 50 % de 720p, soit 360p (634x360). Il s’agit d’un ViewportScaleFactor de 0,5.
  • Tout ce qui est inférieur à 540p n’est pas recommandé en raison de la dégradation visuelle, mais peut être utilisé pour identifier les goulots d’étranglement dans le taux de remplissage en pixels.

Résolutions prises en charge sur HoloLens 2

  • Les tailles cibles de rendu actuelles et maximales prises en charge sont des propriétés de la configuration de l’affichage. HoloLens 2 est défini sur la taille cible de rendu maximale, qui est 1440x936, par défaut.
  • Les applications peuvent modifier la taille des mémoires tampons cibles de rendu en appelant la méthode RequestRenderTargetSize pour demander une nouvelle taille cible de rendu. Une nouvelle taille cible de rendu est choisie, qui respecte ou dépasse la taille cible de rendu demandée. Cette API modifie la taille de la mémoire tampon cible de rendu, ce qui nécessite une réaffectation de la mémoire sur le GPU. Les implications de ceci incluent : la taille de la cible de rendu peut être réduite pour réduire la pression mémoire sur le GPU, et cette méthode ne doit pas être appelée à haute fréquence.
  • Les applications peuvent toujours modifier la taille de la fenêtre d’affichage comme elles l’ont fait pour HoloLens 1. Il n’y a pas de réallocation de mémoire ajoutée sur le GPU, il peut donc être modifié à haute fréquence, mais il ne peut pas être utilisé pour réduire la pression de la mémoire sur le GPU.
  • La taille de la fenêtre d’affichage prise en charge la plus faible sur HoloLens 2 est 634x412, un ViewportScaleFactor d’environ 0,44 lorsque la taille cible de rendu par défaut est en cours d’utilisation.
  • Si une taille cible de rendu est fournie qui est inférieure à la taille de la fenêtre d’affichage prise en charge la plus faible, le facteur d’échelle de la fenêtre d’affichage est ignoré.
  • Tout ce qui est inférieur à 540p n’est pas recommandé en raison de la dégradation visuelle, mais peut être utilisé pour identifier les goulots d’étranglement dans le taux de remplissage en pixels.

Voir aussi