Créer des expériences VR immersives et photoréalistes avec le High Definition Render Pipeline

Nous apportons officiellement la réalité virtuelle au Pipeline de rendu haute définition (HDRP). Dans la version 2019.3.6f1 et après avec la version du package 7.3.1, HDRP est maintenant vérifié et peut être utilisé en VR.
Cet article de blog plonge techniquement dans l'utilisation de HDRP dans votre projet VR. Pour en savoir plus sur toutes les possibilités offertes par HDRP, jetez un œil à cet article de blog.
La VR dans HDRP est conçue de sorte que :
Toutes les fonctionnalités HDRP sont compatibles avec la VR.
HDRP est entièrement pris en charge avec le nouveau Framework de plugin XR Unity.
Le rendu en passe unique (instanciation) est la solution de rendu par défaut et recommandée pour la VR.
En utilisant HDRP pour un projet VR, vous pouvez tirer parti de toutes les fonctionnalités du pipeline de rendu pour créer des expériences limitées uniquement par votre imagination. Avec ses techniques de rendu à la pointe de la technologie, HDRP peut offrir des visuels époustouflants et photoréalistes d'une qualité rarement vue auparavant dans des environnements de réalité virtuelle.
Voici un aperçu très rapide des fonctionnalités disponibles pour vos projets VR :
- Rendu différé et en avant
- Tous les types de lumière, ombres, décalcomanies et volumétriques
- Effets d'espace écran
- Occlusion ambiante (AO)
- Réflexion en espace écran (SSR)
- Diffusion sous-surface (SSS)
- Distorsion et réfraction
- Post-traitement
- Correction des couleurs, anti-aliasing, profondeur de champ, etc.
- Tous les VFX du Visual Effect Graph
Le VR pour HDRP est actuellement disponible pour les plateformes et appareils suivants :
- Oculus Rift & Rift S (Oculus XR Plugin, Windows 10, DirectX 11)
- Windows Mixed Reality (Windows XR Plugin, Windows 10, DirectX 11)
- PlayStationVR
OpenVR: Valve développe actuellement son plugin Unity XR OpenVR pour 2019.3 et au-delà, et cela sera bientôt disponible.
Techniques de rendu stéréo
Une implémentation VR native traitera tout deux fois - une fois pour chaque œil. Nous appelons cette solution rendu multipass. HDRP prend en charge le rendu multipass, cependant, nous ne recommandons pas cette méthode car votre application utilisera deux fois plus de puissance CPU pour le rendu, doublant essentiellement votre nombre d'appels de dessin. De plus, les ombres seront rendues deux fois et pourraient consommer une portion significative de votre budget GPU.
Cela dit, il y a des cas où l'utilisation du multipass est appropriée :
- Si votre système a une petite quantité de mémoire GPU, le multipass utilise moins de mémoire pour les cibles de rendu que le rendu en simple passage.
- Si pour une raison quelconque vous devez rendre des points de vue très différents pour chaque œil.
Une solution plus rapide est d'utiliser le rendu en simple passage (instancié). Dans ce mode, chaque appel de dessin est rendu simultanément pour les deux yeux. Cela est accompli en utilisant un tableau de textures pour les cibles de rendu et des appels de dessin instanciés. De plus, le culling et les ombres ne sont traités qu'une seule fois par image.
HDRP a été conçu pour que toutes les fonctionnalités soient compatibles avec la VR et optimisées pour le rendu en passage unique.
La décision de conception clé était d'utiliser un tableau de textures pour tous les cibles de rendu (même lorsque vous ne créez pas pour la VR). Cette décision, couplée avec des macros de shader, nous a permis de créer des shaders qui sont automatiquement compatibles avec la VR, à part quelques cas spéciaux (par exemple, génération de liste de lumières, ombrage différé en tuiles indirectes, éclairage volumétrique et rendu relatif à la caméra).
Notez que le rendu en passage unique pour les textures doubles larges n'est pas pris en charge par HDRP en raison de la complexité et de la surcharge supplémentaires requises pour tous les passes et effets plein écran.
Pour commencer avec HDRP VR, consultez la section Vue d'ensemble de la VR dans la documentation de Unity. Pour vous aider à configurer HDRP avec la VR, nous fournissons également un Assistant HDRP, qui valide vos paramètres et peut vous aider à corriger tout paramètre que l'Assistant identifie comme incorrect.

Pour configurer manuellement votre projet pour la VR en utilisant le nouveau cadre de plugin XR, veuillez vous référer à la documentation. Pour configurer le rendu en passage unique, vous devez avoir les deux paramètres de projet définis sur le mode de rendu stéréo en passage unique et les paramètres de l'actif HDRP définis sur le passage unique. HDRP passera par défaut en multipass si l'une de ces deux options n'est pas activée pour le passage unique.

Anti-aliasing
Réduire l'aliasing est extrêmement important en VR afin de créer une excellente expérience utilisateur et d'éviter de briser l'immersion de l'environnement virtuel. HDRP fournit plusieurs solutions pour aider avec l'anti-aliasing.
Les modes d'anti-aliasing de la caméra sont décrits en détail dans la documentation de Unity. Ces options incluent :
- L'anti-aliasing par échantillonnage multiple (MSAA) est pris en charge avec le rendu en avant. Vous pouvez équilibrer qualité et performance en choisissant le nombre d'échantillons (2x, 4x, 8x). Cette technique peut donner d'excellents résultats, mais elle peut également être coûteuse.
- L'anti-aliasing temporel est probablement la meilleure solution pour la plupart des applications. Il est très efficace pour réduire l'aliasing, mais il peut flouter certains détails. Vous pouvez contrebalancer ce flou avec le contrôle de filtre de netteté inclus.
- Des solutions légèrement moins chères incluent l'anti-aliasing approximatif rapide (FXAA) ou l'anti-aliasing morphologique subpixel (SMAA).
- Il est également possible de combiner MSAA avec TAA, FXAA ou SMAA. Cette technique améliore la qualité visuelle, mais le coût est cumulatif.
- Il existe également un anti-aliasing d'ombrage supplémentaire disponible par matériau avec Anti-aliasing spéculaire géométrique, que vous pouvez ajuster directement sur les matériaux. Son utilisation est recommandée pour les surfaces lisses et denses.
Performance
Le rendu VR est extrêmement exigeant en raison du taux de rafraîchissement et de la résolution plus élevés nécessaires pour afficher aux deux yeux. Assurez-vous de désactiver toutes les fonctionnalités dont vous n'avez pas besoin dans les paramètres d'actif HDRP. Des fonctionnalités comme le volumétrique ne conviennent pas aux applications VR car leur performance ne répond pas aux 90 fps requis bien qu'elles soient prises en charge. Surveiller et profiler fréquemment les performances vous aidera à identifier les goulets d'étranglement dans votre projet.
Notez qu'en mode VR, la précision des effets volumétriques (tranches z) sera réduite de moitié par défaut pour maintenir des performances GPU plus acceptables. En plus de l'éclairage volumétrique, il est fortement recommandé de désactiver le support de la lumière de zone HDRP lors de la réalisation d'un projet VR. Contrairement à d'autres fonctionnalités, la lumière de zone doit être désactivée via les fichiers de configuration de shader.
Il existe deux méthodes de rendu disponibles dans HDRP, qui impactent également les performances : Mode de shader éclairé en avant et différé. Pour en savoir plus sur les différences entre ces deux modes, veuillez consulter la documentation. Choisir le bon mode pour la VR dépend des exigences du projet. Le rendu avant vous permet d'activer le MSAA et de réduire l'utilisation de la mémoire, tandis que le rendu différé est plus efficace pour les projets avec un grand nombre de lumières, mais consomme également plus de mémoire.
Un autre facteur qui influence les performances du GPU est la résolution du tampon de rendu. Cette résolution est initialement définie par le plugin d'affichage XR et dépend du casque que vous utilisez. Vous pouvez ensuite ajuster la résolution dans votre application ou utiliser la fonction résolution dynamique pour adapter la résolution en fonction du contexte de la scène actuelle. Par exemple, la résolution pourrait être adaptée en fonction du temps de trame actuel du GPU.
Pour plus de conseils, consultez cette discussion HDRP VR de Unite 2019 Copenhague.
Pour prendre en charge la VR dans HDRP, nous avons ajouté un ensemble de macros de shader pour aider à gérer l'instanciation de vue et l'utilisation des tableaux de textures pour la cible de rendu. Par exemple, vous pouvez déclarer une texture dans un shader avec le code suivant :
TEXTURE2D_X(MyTexture);
Sur les plateformes qui prennent en charge les tableaux de textures, cette macro s'étendra à TEXTURE2D_ARRAY. Si la plateforme ne prend pas en charge les tableaux de textures ou si le paramètre dans ShaderConfig.cs est désactivé, la macro s'étendra à TEXTURE2D classique. Des fonctionnalités similaires sont disponibles pour l'échantillonnage de textures.
Du côté du shader, les constantes de vue appropriées (matrice de vue, matrice de projection, etc.) sont stockées dans le tableau et indexées en fonction de l'index de l'œil, qui est dérivé de l'instanceID des primitives. Dans le cas des shaders de calcul, la dimension de dispatch z est utilisée pour identifier chaque œil. La macro UNITY_XR_ASSIGN_VIEW_INDEX est généralement utilisée pour attribuer l'index de l'œil approprié.
Les futures versions de HDRP VR se concentreront sur :
- Améliorer les performances avec de nouvelles options matérielles comme le Shading à Taux Variable
- Améliorer le support des plateformes avec Vulkan et DX12
- Améliorer le support des appareils
- Étendre le passage unique pour prendre en charge plus de deux vues
Vous pouvez commencer à profiter de la VR HDRP dès aujourd'hui. Nous aimerions avoir vos retours dans le forum HDRP alors que nous continuons à apporter des améliorations.
