Développer

Utiliser Compositor Layers VR

Mis à jour: 17 déc 2024
Ce guide explique l’implémentation des Compositor Layers dans l’application Unity. Pour comprendre leur fonctionnement et leur débogage, consultez la section dédiée aux Compositor Layers.
Le script OVROverlay, disponible dans le dossier Oculus/VR/Scripts, active les Compositor Layers.
OVROverlay gère jusqu’à 15 couches par scène, avec une limite d’une couche cylindrique et d’une couche de cube déplié (cubemap) par scène. En cas d’échec du rendu d’une couche Compositor, seuls les quadrilatères sont rendus par défaut en tant que géométrie de scène. Les cubes dépliés et les cylindres ne s’affichent pas. Ce cas se présente notamment lorsque vous tentez de dépasser le nombre maximum de couches autorisé. Pour gérer plus de 15 objets, vous pouvez regrouper plusieurs éléments planaires dans un seul objet RenderTexture et utiliser une unique couche OVROverlay.

Ajouter une couche de superposition ou une couche sous-jacente

  1. Dans la vue Hierarchy (Hiérarchie) de l’éditeur Unity, créez un GameObject vide.
  2. Faites glisser le script OVROverlay script à partir de Packages/com.meta.xr.sdk.core/Scripts/OVROverlay.cs dans le GameObject.
    Remarque : OVROverlay utilise OVRManager.
    The OVROverlay script

Comprendre les configurations du script OVROverlay

Le script OVROverlay propose plusieurs paramètres de configuration.

Type de superposition

Sélectionnez le type de superposition. Les options disponibles sont : Overlay, Underlay et None.
  • Overlay (Couche de superposition) : type par défaut, s’affiche par-dessus le tampon d’affichage.
  • Underlay (Couche sous-jacente) : s’affiche derrière l’eye buffer. Les compositor layers sous-jacentes consomment davantage de bande passante, car le composeur doit créer une découpe dans l’eye buffer avec un masque alpha pour rendre les arrière-plans visibles. La bande passante des textures constituant souvent un goulet d’étranglement en VR, évaluez leur impact sur les performances avant toute utilisation.
  • None (Aucun) : masque la couche.

Profondeur de composition

La profondeur de composition, qui est une fonctionnalité facultative désactivée par défaut, définit la profondeur de la couche. et détermine leur ordre d’affichage dans la scène. Entre deux couches, celle ayant la plus petite valeur compositionDepth s’affiche devant l’autre. Par exemple, dans une scène comprenant plusieurs couches de superposition et couches sous-jacentes, l’organisation serait la suivante :
[Caméra] (couche de superposition) 2 / 1 / 0 [Eyebuffer] -1 / 0 / 1 (couche sous-jacente)

Activer le test du tampon de profondeur

Pour activer le test de profondeur de composition d’une couche en particulier, cochez la case Enable Depth Buffer Testing (Activer le test du tampon de profondeur).
Cette fonction s’avère utile pour les écrans de chargement ou de pause. Sans elle, votre couche OVROverlay s’affichera toujours au premier plan de la scène.
Remarque: un objet configuré comme couche de superposition sans prise en compte de la profondeur de composition peut s’afficher au premier plan alors qu’il devrait être masqué par un objet plus proche de la caméra. Cette incohérence de profondeur risque de perturber la perception de l’utilisateur·ice.

Forme de superposition

Sélectionnez la forme de la couche de superposition.
  • Quad (Quadrilatère) : textures planes à quatre sommets servant de panneaux pour afficher du texte ou des informations dans une scène.
  • Cubemap (Cube déplié) : textures composées de six carrés formant un cube autour d’un objet. Elles servent aux réflexions et aux arrière-plans de scène, et conviennent aussi aux scènes de chargement ou de démarrage peu gourmandes en ressources. Pour plus de détails, consultez la page Captures d’écran Cubemap.
  • Cylinder (Cylindre) : textures uniques enroulées en cylindre autour de la caméra, idéales pour les interfaces incurvées.
  • Les couches Equirect (Équirectangulaires) forment une seule et unique texture qui est enroulée dans une sphère et projetée pour entourer la vue de l’utilisateur·ice. Elles sont le plus souvent utilisées pour la lecture vidéo 360/180.
  • Les couches Offcenter Cubemap (Cube déplié décalé) sont des cubes dépliés dont le centroïd est déplacé de 30 degrés vers l’avant sur l’axe z, offrant ainsi à l’utilisateur·ice une meilleure fidélité, soit davantage de pixels.
  • Fisheye (Objectif ultra grand-angle) : configure OVROverlay pour l’affichage d’une image fisheye. Ajustez les paramètres de transformation pour modifier le FovX, FovY, l’horizon et le méridien de la couche Fisheye.
    • Position X : ajuste le méridien (décalage horizontal du centre de l’image, en degrés).
    • Position Y: ajuste l’horizon (décalage vertical du centre de l’image, en degrés).
    • Scale X: définit le champ de vision horizontal, en degrés.
    • Scale Y : définit le champ de vision vertical, en degrés.
    • Rotation X, Y, Z : configure l’orientation (lacet, tangage, roulis) de la couche.

Filtrage bicubique

Le filtrage bicubique matériel GPU, optimisé pour l’affichage Meta Quest, permet d’améliorer la qualité des images VR. Sur Meta Quest, le système utilise par défaut l’interpolation bilinéaire, ce qui permet d’exploiter les fonctionnalités du filtrage bicubique sans traitement particulier pour les anciens appareils.
  • Pour activer cette fonction, cochez la case Bicubic Filtering (Filtrage bicubique).
Remarque : le filtrage bicubique consomme davantage de ressources GPU à mesure que l’empreinte du noyau s’accroît, particulièrement pour la minification trilinéaire qui nécessite deux calculs bicubiques depuis différents niveaux de mip. Dans les couches Compositor, cette hausse de consommation GPU perturbe le temps de composition, risquant de provoquer des pertes d’images qui dégradent l’expérience VR. Évaluez soigneusement le rapport entre gain de qualité visuelle et ressources GPU requises pour optimiser l’expérience VR.

Filtrage des couches de composition

Activez le filtrage des couches pour optimiser la qualité d’image des couches de composition. Cette fonction intègre des méthodes de suréchantillonnage optimisées pour le système optique d’affichage Quest.
Le suréchantillonnage (image de gauche) réduit le scintillement des contours à fort contraste (image de droite) dans les couches sous-échantillonnées par Compositor pour correspondre à la résolution d’affichage.
Comparison showing supersampling reducing flicker on high contrast edges in a composition layer.
L’accentuation améliore la netteté des contours à fort contraste et compense l’effet de flou lié au suréchantillonnage nécessaire pour atteindre la résolution d’affichage.
Comparison showing sharpening improving clarity of high contrast edges in a composition layer.
Le filtrage automatique assure une qualité visuelle optimale tout en évitant les artéfacts indésirables comme les déchirures d’écran. Dans ce mode, l’environnement d’exécution n’applique les filtres de suréchantillonnage et d’accentuation sélectionnés que lorsqu’ils sont bénéfiques. En voici quelques exemples :
  • Le filtre d’accentuation atténue le flou des couches.
  • Le filtre de suréchantillonnage réduit le scintillement.
Si la couche ne nécessite aucun filtrage, l’activation du filtrage automatique n’aura aucun impact sur les performances.
Le filtrage automatique gère les interactions dynamiques et complexes avec les couches, notamment leur redimensionnement et les déplacements de la personne dans l’espace 3D. Avant d’appliquer un filtrage, il évalue les paramètres suivants :
  • Nombre de pixels rendus par degré de la couche
  • Nombre de pixels matériels par degré d’affichage
  • Utilisation du GPU
  • Visibilité de la couche.
Auto filtering dynamically applying supersampling and sharpening based on layer conditions.

Activer le filtrage de couches

Pour activer le suréchantillonnage ou l’accentuation, sélectionnez une variante normale ou intensive dans les menus déroulants Super Sample (Suréchantillonage) ou Sharpen (Accentuation). Les variantes intensives, gourmandes en ressources de calcul, ne doivent être utilisées que si l’application dispose de capacités GPU suffisantes.
Important : le filtrage des couches de composition nécessite davantage de ressources GPU, particulièrement pour les algorithmes d’accentuation et de suréchantillonnage qui utilisent des empreintes de noyau plus importantes. Sur les couches de composition, ces algorithmes augmentent la consommation des ressources GPU essentielles, ce qui perturbe la synchronisation de la composition. Des pertes d’images peuvent en résulter et dégrader l’expérience VR. Lors de l’application du filtrage, évaluez attentivement le compromis entre qualité visuelle et ressources GPU requises pour optimiser l’expérience VR. Vous pouvez également opter pour le mode de filtrage automatique qui limite les filtrages superflus Le filtrage automatique dégrade élégamment la qualité du panneau lors des instances de ressources GPU contraintes.

Activer le filtrage automatique

Pour activer le filtrage automatique, cochez la case Auto Filtering (Filtrage automatique), puis sélectionnez une variante normale ou intensive dans les menus déroulants des filtres. Par exemple, si l’application choisit une variante coûteuse d’accentuation et une variante normale de suréchantillonnage, le filtrage automatique appliquera le filtre choisi à la couche uniquement si nécessaire.

Textures

Associez la texture à afficher sur la couche de superposition. Si vous conservez l’option par défaut Aucun, le système utilisera la texture principale renderer.material lorsqu’elle existe.

Texture dynamique

Activez cette option si le contenu rendu dans la couche de superposition est dynamique, c’est-à-dire si la texture doit être actualisée à chaque image pendant la durée de la superposition. Cette option s’active automatiquement lorsqu’un objet RenderTexture est associé à la couche.

Contenu protégé

Sélectionnez l’option Is Protected Content (Contenu protégé) pour protéger la couche avec HDCP sur Rift et L1 Widevine DRM sur Meta Quest.
Pour Meta Quest : pour activer la prise en charge sur le casque, vous devez également configurer la couche OVROverlay en tant que Surface externe et activer Is Protected Content (Contenu protégé) dans Player Settings > Virtual Reality > Oculus (Paramètres du joueur ou de la joueuse > Réalité virtuelle > Oculus).

Surface externe

Cochez la case Is External Surface (Surface externe) pour identifier que la couche sera utilisée pour transmettre des textures ou des vidéos à partir d’une surface Android externe.
Cette fonctionnalité permet de créer une surface Android et à la couche TimeWarp de la gérer. Dans votre projet Unity, vous pouvez créer une superposition de quadrilatères et rendre la texture de surface directement sur la couche TimeWarp. Pour plus d’informations sur le rendu de texture en surface, consultez l’article technique Écran de chargement animé.
Utilisez les options External Surface Width (Largeur de surface externe) et External Surface Height (Hauteur de surface externe) pour définir la taille de la sortie.
OVROverlay Inspector section with Is External Surface enabled and width and height fields.

Utiliser les rectangles par défaut

Lorsque vous sélectionnez la couche Cylinder (Cylindre) ou Offcenter Cubemap (Cube déplié décalé), vous pouvez définir une texture d’entrée unique qui se compose à la fois de l’image gauche et de l’image droite. Définissez la texture en tant que Left Texture (Texture gauche). Ne définissez pas la même texture pour les deux yeux.
Le fait de décocher cette case permet d’ouvrir la boîte de dialogue Source Rects (Rectangles sources) dans laquelle définir la façon dont less texture gauche et droite sont positionnées dans la texture d’entrée unique. Les préréglages Monoscopic (Monoscopique), Stereo Left/Right (Stéréo gauche/droite) et Stereo Top/Bottom (Stéréo haut/bas) sont disponibles et peuvent être sélectionnés rapidement.
OVROverlay Source Rects settings showing left and right eye texture layout options.

Remplacer l’échelle chromatique

Cette fonction remplace les paramètres de couleur globaux de la couche. Cochez Override Color Scale (Remplacer l’échelle chromatique) pour définir les valeurs Color Scale (Échelle des couleurs) et Color Offset (Décalage des couleurs).
OVROverlay Override Color Scale section with Color Scale and Color Offset fields.

Utiliser des sous-couches

Les couches sous-jacentes dépendent du canal alpha de la cible de rendu. Suivez ces étapes pour les ajouter :
  1. Pour un objet de scène entièrement opaque devant masquer une couche sous-jacente, réglez alpha à 1 dans la fenêtre Color (Couleur). Si l’objet occultant est transparent (alpha compris entre 0 et 1), utilisez le shader Underlay Transparent Occluder.shader du dossier Packages/com.meta.xr.sdk.core/Resources/.
    Remarque : les couches de superposition ne nécessitent aucun traitement particulier pour la transparence.
  2. Créez une ouverture dans la texture une fois tous les objets rendus dans l’eye buffer.
  3. Utilisez le shader Underlay Impostor.shader du dossier Packages/com.meta.xr.sdk.core/Resources/ pour dessiner les imposteurs dans l’espace delta. Effectuez cette opération après le rendu des textures opaques, mais avant l’alpha, permettant ainsi à la couche sous-jacente d’apparaître à travers l’espace vide.

Exemple

Dans cet exemple, la majeure partie de la géométrie de la scène s’affiche dans le tampon d’affichage. L’application ajoute un curseur de visée en couche de superposition quadrilatère et un environnement (skybox) en tant que cube déplié en couche sous-jacente derrière la scène.
Example: unity ovroverlay 3.
Observez les zones pointillées du tampon d’affichage : elles indiquent les ouvertures créées par OVROverlay pour rendre visible le cube déplié sous-jacent derrière la géométrie de la scène.
Vérifiez la transparence du cube déplié. Si celui-ci est transparent, utilisez OVRUnderlayTransparentOccluder, requis pour toute couche sous-jacente dont l’alpha est inférieur à 1. Pour une vue stéréoscopique, définissez deux textures et une taille de 2.

Utiliser les superpositions de cylindre

Le centre des objets de jeu en superposition de cylindre est utilisé en tant que centre du cylindre. Les dimensions du cylindre sont codées dans transform.scale comme suit :
  • [scale.z] rayon du cylindre
  • [scale.y] hauteur du cylindre
  • [scale.x] longueur de l’arc du cylindre
Pour utiliser une superposition de cylindre, votre caméra doit être placée à l’intérieur de la sphère inscrite du cylindre. La superposition s’estompe lorsque la caméra s’approche de la surface de la sphère inscrite. Seule la moitié du cylindre peut être affichée. Aussi, l’angle de l’arc doit être inférieur à 180 degrés.

Utiliser les superpositions de cube déplié décalé

Les compositor layers de cube déplié décalé sont utiles pour augmenter la résolution des zones d’intérêt ou des zones visibles en décalant la coordonnée d’échantillonnage du cube déplié. Ils sont semblables aux compositor layers standard du cube déplié.
Attachez le script OVROverlay à un objet de jeu vide, puis spécifiez le décalage des coordonnées de texture dans le champ Position Transform (Transformation de position). Pour plus d’informations, consultez OVROverlay dans la référence du script Unity.

Positionnement des couches : fixe ou solidaire

Les couches de superposition doivent généralement être fixes dans l’espace (world-locked), c’est-à-dire conserver leur position par rapport à l’environnement.
  • Ces couches fixes utilisent TimeWarp, comme le contenu standard, et limitent les saccades.
  • Les couches solidaires de la tête (head-locked) ignorent TimeWarp et suivent précisément les mouvements de tête. Cette option convient uniquement aux petits éléments d’interface comme les curseurs de visée ou réticules de ciblage.
Par défaut, les couches sont fixes. Pour créer une couche solidaire de la tête, placez la couche (généralement un quadrilatère) comme élément enfant du point d’ancrage de l’œil central d’OVRCameraRig.

Utilisations courantes d’OVROverlay

Voici les principaux cas d’utilisation des compositor layers et des fonctionnalités d’OVROverlay.

Lecture vidéo haute qualité

Pour les applications de lecture vidéo, il est essentiel d’utiliser les compositor layers plutôt que le rendu standard dans les eye buffers Unity.
Deux méthodes sont possibles avec OVROverlay :
  • Pour lire une vidéo sur une couche de superposition générée dans le jeu, utilisez la fonction Use Default Rects (Utiliser les rectangles par défaut). Cette option permet d’utiliser une seule texture en haute résolution, évitant ainsi le coût de rendu de deux textures.
  • Pour lire une vidéo externe en haute qualité, utilisez la fonction Is External Surface (Surface externe) permettant à un plugin Android de transmettre la vidéo directement au composeur.

Écran de chargement

Un écran de chargement optimisé peut être créé avec deux couches OVROverlay.
  1. Ajoutez une couche de cube déplié qui servira d’arrière-plan à l’écran de chargement. Un fond noir s’affiche si vous ne définissez pas de texture.
  2. Ajoutez une autre couche de superposition, généralement un simple quadrilatère, avec une texture ou du texte indiquant le chargement en cours.
Pour plus de détails, consultez l’exemple OVROverlay dans la section Exemples de démarrage.

Curseur de visée ou réticule de ciblage

Pour intégrer un curseur ou un réticule de visée (ou élément similaire), ajoutez un quadrilatère OVROverlay à votre scène en tant qu’élément enfant du point d’ancrage de l’œil central d’OVRCameraRig.

Exemples de couches OVROverlay

Les fonctionnalités d’OVROverlay sont présentées dans la documentation de l’exemple OVROverlay. Pour en savoir plus sur l’exploration des scènes d’exemple, consultez la documentation des exemples de démarrage.
Logo nav.
Français (France)
©2026 Meta