MegaLights est une toute nouvelle méthode d'éclairage direct dans l'Unreal Engine 5 qui permet aux artistes de placer beaucoup plus de lumières de zone dynamiques et ombragées qu'auparavant.
MegaLights prend en charge les consoles de génération actuelle et fait appel au ray tracing pour générer des ombres douces réalistes à partir de différents types de lumières de zone.
MegaLights réduit non seulement le coût de l'occultation dynamique, mais également celui de l'évaluation de la lumière sans ombres, ce qui permet de recourir à des sources de lumière coûteuses, notamment à des lumières de zone texturées, sur les consoles.
MegaLights prend également en charge le brouillard volumétrique.
Utiliser MegaLights
Vous pouvez activer MegaLights pour votre projet dans les paramètres du projet, dans la catégorie Rendu > Éclairage direct. Vous êtes également invité à activer le paramètre Ray tracing matériel, recommandé pour MegaLights.
Une fois activé, toutes les lumières locales sont gérées par le système MegaLights. Vous pouvez activer MegaLights pour chaque lumière à l'aide de la propriété de composant d'éclairage Autoriser MegaLights. Vous pouvez également définir le paramètre Méthode d'ombre MegaLights de manière à sélectionner la source d'occultation, à savoir Ray tracing (par défaut) ou Textures d'ombre virtuelles (VSM).
Bien que les textures d'ombre virtuelles projettent des ombres directement à partir de la géométrie Nanite non simplifiée, elles ne fournissent qu'une approximation des ombres de zone. Préparer à l'avance les profondeurs des textures d'ombre suppose un coût supplémentaire en termes de processeur, de mémoire et de temps de processeur graphique.
Pour un contrôle plus précis au sein d'un même projet, vous pouvez activer ou désactiver MegaLights à l'aide des paramètres du volume de post-traitement.
Il est possible de désactiver MegaLights par niveau d'évolutivité ou profil d'appareil avec r.MegaLights.Allow 0.
Présentation de la technique
MegaLights est une technique d'éclairage direct aléatoire qui résout l'éclairage direct grâce à l'échantillonnage des lumières importantes. Cette technique trace un nombre fixe de rayons par pixel vers les sources de lumière importantes. Si une source de lumière est touchée par un rayon, la contribution de cette lumière est ajoutée au pixel actuel.
Cette approche a des implications importantes :
L'éclairage direct est géré de manière unifiée en une seule passe, remplaçant ainsi diverses techniques existantes d'occultation et d'ombrage de l'outil de rendu différé.
MegaLights permet de réduire non seulement le coût de l'occultation, mais également celui de l'ombrage proprement dit.
MegaLights présente un coût de performance constant, mais la qualité peut diminuer à mesure que la complexité de l'éclairage augmente pour un pixel donné.
Alors que l'ombrage différé offre une qualité d'éclairage constante, le coût de processeur graphique augmente en fonction du nombre de lumières. En revanche, MegaLights offre des performances constantes, mais la qualité dépend de la complexité de l'éclairage au niveau d'un pixel donné.
MegaLights remplace les fonctionnalités suivantes :
Textures d'ombre et ombres de champ de distance
Ombres par ray tracing
Ombrage différé (BRDF et évaluation de la lumière)
Occultation du brouillard volumétrique et évaluation de la lumière
Projection de textures d'ombre virtuelles
Il est toujours possible d'utiliser les textures d'ombre virtuelles avec MegaLights si elles sont sélectionnées comme méthode d'ombrage dans les paramètres de l'acteur d'éclairage individuel.
Par défaut, MegaLights commence par tracer un rayon d'espace écran court et standard afin de récupérer de petits détails, qui peuvent ne pas être disponibles dans la scène de ray tracing simplifiée. Si un tel rayon sort de l'écran, passe derrière un objet ou atteint simplement sa durée maximale, MegaLights poursuit le traçage à partir de la dernière position valide à l'aide du ray tracing matériel ou logiciel. Il est par ailleurs possible de configurer MegaLights pour effectuer le ray tracing d'une texture d'ombre virtuelle, mais ses ombres supposent un coût en amont supplémentaire, car les textures d'ombre doivent être générées pour chaque lumière, tandis que la scène de ray tracing (BVH) est générée une seule fois pour toutes les lumières de la scène.
Le ray guiding dans MegaLights est utile pour sélectionner les sources lumineuses importantes, et est essentiel pour envoyer davantage d'échantillons aux lumières susceptibles d'influencer un pixel donné. En revanche, le ray guiding envoie moins d'échantillons vers les lumières qui ont moins d'influence, comme celles qui sont susceptibles d'être occultées. Il s'agit d'un élément important de la technique, qui permet d'obtenir la meilleure qualité d'éclairage possible à partir du budget fixe d'échantillons de lumière par pixel. Bien que le ray guiding permette de réduire le nombre de rayons envoyés vers les sources de lumière occultées, il est nécessaire de les échantillonner périodiquement afin de vérifier s'ils sont devenus visibles dans l'image actuelle. Dans cette optique, évitez de placer des sources de lumière avec des limites trop importantes ayant une incidence sur l'ensemble de la scène.
Enfin, tous les éclairages accumulés passent par un débruiteur qui tente de reconstruire un éclairage direct de haute qualité à partir des données d'entrée aléatoires et susceptibles de générer du bruit. À mesure que la complexité de l'éclairage augmente dans la scène, le débruiteur doit redoubler d'efforts pour tenir compte de cette évolution. Une complexité accrue de l'éclairage peut entraîner un flou ou provoquer des images fantômes, ce que vous pouvez éviter en fusionnant les sources de lumière de petite taille en zones de lumière plus grandes et en réduisant avec précaution les limites des sources de lumière afin d'améliorer la qualité finale de l'éclairage.
Complexité de l'éclairage
Nous avons défini une limite du nombre de lumières importantes pouvant affecter un seul pixel avant que celui-ci ne dépende fortement du débruiteur, car le budget et le nombre d'échantillons par pixel sont fixes, ce qui peut entraîner un éclairage flou et, à terme, du bruit ou des images fantômes dans la scène. Il est toujours important d'optimiser le placement de l'éclairage en réduisant la plage d'atténuation de la lumière et en remplaçant les groupes de sources de lumière par un éclairage de zone unique.
Pour que MegaLights fonctionne correctement dans une scène, il est préférable d'éviter de placer des lumières à l'intérieur de la géométrie de la scène et d'optimiser les limites d'une lumière. Vous pouvez utiliser la commande de console r.MegaLights.Debug 1 pour savoir où les rayons sont envoyés à partir d'un pixel sélectionné. Vous pouvez figer un rayon sélectionné à l'aide de la commande de console r.ShaderPrint.Lock 1, ce qui vous permet de vous déplacer dans la scène pour inspecter les rayons tracés.
Des outils de visualisation supplémentaires seront mis à disposition dès que MegaLights sera une fonctionnalité prête à l'emploi dans l'Unreal Engine.
Dans l'exemple ci-dessous, une partie de la lumière rectangulaire texturée se trouve à l'intérieur du mur et, même si elle ne sera jamais visible, MegaLights doit l'échantillonner. Ce phénomène est visible dans la visualisation, qui montre certains rayons tracés sur le mur. Dans l'idéal, vous devez réduire la largeur de la source et la hauteur de la source de la lumière rectangulaire texturée afin que la source de lumière remplisse cette arche, sans aller au-delà.
Pour minimiser le bruit, évitez de placer des lumières à l'intérieur de la géométrie, et optimisez la plage d'atténuation de la lumière, les angles du cône du projecteur et les coupe-flux de la lumière rectangulaire pour réduire l'influence de la lumière.
Scène de ray tracing
Par défaut, MegaLights utilise le ray tracing et la qualité des ombres dépend de la qualité de la représentation de la scène de tracing. À des fins de performances, la scène de ray tracing est créée à l'aide de maillages Nanite automatiquement simplifiés et dispose de paramètres d'élimination plus agressifs que la vue principale. Cela peut engendrer des artefacts d'ombre, des fuites ou des ombres manquantes.
Les visualisations de la scène de ray tracing constituent un bon point de départ pour analyser les problèmes d'occultation. Elles illustrent la représentation de la scène actuelle sur laquelle MegaLights effectue le ray tracing. Vous pouvez visualiser la scène de ray tracing avec :
L'un des modes d'affichage du débogage par ray tracing, qui se trouvent dans le hublot du niveau, dans le menu Modes d'affichage. Les modes d'affichage du débogage par ray tracing sont également disponibles via des commandes de console
show RayTracingDebug 1etr.RayTracing.DebugVisualizationMode = "World Normal".Le mode d'affichage Aperçu du système Lumen, qui permet une visualisation image par image dans laquelle vous pouvez afficher simultanément la scène de ray tracing et la vue principale. Le mode d'affichage Aperçu du système Lumen est également disponible via la commande de console
r.Lumen.Visualize 1.
Si certaines ombres sont manquantes ou disparaissent avec la distance, cela peut être dû au paramètre d'élimination de la scène de ray tracing. Vous pouvez ajuster le paramètre d'élimination en utilisant les commandes de console sous r.RayTracing.Culling.*. Penchons-nous sur le mode d'élimination, le rayon et les variables d'angle solide.
À des fins d'élimination, vous pouvez fusionner les objets de plus petite taille à l'aide du paramètre Ray tracing - Identifiant de groupe, afin qu'ils soient éliminés ensemble à l'aide de leurs limites fusionnées.
Pour en savoir plus sur les commandes d'élimination de la scène de ray tracing, consultez le Guide sur les performances du ray tracing.
La scène de ray tracing repose sur des maillages de rechange Nanite simplifiés automatiquement. Les paramètres par défaut peuvent parfois donner lieu à des maillages de rechange dont la qualité est trop faible à des fins d'occultation et qui peuvent nécessiter un ajustement manuel. Pour ce faire, procédez comme suit :
Ouvrez le maillage dans l'éditeur de maillage statique.
Dans le panneau Détails, sous Paramètres Nanite, définissez le paramètre Cible de repli sur Erreur relative.
Un nouveau paramètre nommé Erreur relative au maillage de rechange apparaît. Vous pouvez définir sa valeur. Réduire la valeur de ce paramètre augmente le nombre de triangles et le réalisme du maillage de rechange Nanite.
Lorsque vous avez terminé, cliquez sur Appliquer les modifications pour recréer le maillage de rechange Nanite.
Pour en savoir plus sur la configuration des maillages de rechange Nanite, consultez la page Géométrie virtualisée Nanite.
Le nombre de triangles du maillage de rechange Nanite et le nombre d'instances incluses dans la scène de ray tracing auront une incidence sur les délais de création BVH par ray tracing, la mémoire utilisée et les performances de ray tracing. Nous vous recommandons de les augmenter progressivement en fonction des performances et du budget mémoire de votre projet.
Pour le rendu en temps réel, il est également possible d'utiliser r.RayTracing.Nanite.Mode 1, qui créé la scène de ray tracing à partir de maillages Nanite détaillés. Cette commande a un coût important en termes de performances et de mémoire, et peut entraîner des ralentissements lors de l'animation de la scène ou de la caméra lorsque le niveau de détail Nanite change et que son BVH doit être recréé.
Tracés d'espace écran
MegaLights utilise la scène de ray tracing lors de la projection d'ombres pour des détails de géométrie plus vastes, mais fait appel aux tracés d'espace écran pour la géométrie à plus petite échelle qui peut être absente de la scène de ray tracing simplifiée. Les tracés d'espace écran utilisent la profondeur de scène et ont une incidence sur tout ce qui est visible à l'écran. Cela peut entraîner des problèmes avec certaines modifications artistiques, telles que les projecteurs d'ombres invisibles qui n'ont pas d'incidence sur la profondeur de scène et n'existent que dans la scène de ray tracing.
Pour les tracés qui s'étendent au-delà de la zone de couverture de la scène de ray tracing (ou lorsque la représentation du champ lointain est trop grossière), MegaLights prend en charge les tracés d'écran distants. La durée des tracés d'écran distants est définie en pourcentage de l'écran à l'aide de r.MegaLights.DistantScreenTraces.Length.
Méthodes d'occultation
MegaLights expose deux méthodes d'occultation, que vous pouvez sélectionner pour chaque lumière en utilisant les propriétés du composant d'éclairage :
Ray tracing est la méthode par défaut et la méthode recommandée. Elle n'implique aucun coût supplémentaire par lumière et permet d'obtenir des ombres de zone correctes. En revanche, la qualité des ombres dépend de la simplification de la scène de ray tracing.
Textures d'ombre virtuelles trace les rayons par rapport à une texture d'ombre virtuelle. Les textures d'ombre virtuelles sont générées par source de lumière à l'aide de la rastérisation et peuvent capturer tous les détails du maillage Nanite. L'inconvénient est qu'elles ne peuvent approximer que les ombres de zone et qu'elles entraînent un coût supplémentaire important par source de lumière en termes de mémoire, de processeur et de processeur graphique utilisés pour générer les profondeurs d'ombre. Utilisez cette méthode avec parcimonie.
Par défaut, toutes les lumières, en particulier les sources de lumière de grande taille avec des ombres plus douces ou les lumières moins importantes, doivent utiliser le ray tracing, car les lumières plus douces ne nécessitent pas de projecteurs d'ombres précis. Il est également judicieux d'allouer un budget légèrement supérieur à la scène de ray tracing, car une représentation en ray tracing de meilleure qualité permet d'intégrer davantage de lumières dans le chemin de ray tracing moins coûteux.
Fonctions d'éclairage
Les fonctions d'éclairage sont prises en charge à condition qu'elles soient compatibles avec l'atlas de fonctions de lumière et que l'atlas de fonctions de lumière soit activé dans les paramètres du projet.
Masquage alpha
Par défaut, seul le tracé d'espace écran peut traiter correctement les surfaces à masque alpha. Vous pouvez activer la prise en charge du masquage alpha pour le ray tracing à l'aide de la commande de console r.MegaLights.HardwareRayTracing.EvaluateMaterialMode 1. L'activation de cette option implique un coût supplémentaire en termes de performances non négligeable. Il convient donc d'éviter le masquage alpha dans le contenu.
Éclairages directionnels
Par défaut, les éclairages directionnels sont désactivés et doivent être activés manuellement à l'aide de r.MegaLights.DirectionalLights 1. Cela est dû à diverses limitations, ce qui le rend plus adapté aux lumières faibles et douces (telles que le clair de lune) qu'aux ombres nettes et de haute qualité projetées par le soleil à l'horizon.
La qualité des ombres de l'éclairage directionnel dépend fortement de la représentation du ray tracing au loin, ce qui peut s'avérer complexe en raison des coûts supplémentaires de la création de BVH et du système de déplacement. Certains de ces problèmes peuvent être masqués en activant le paramètre Champ distant.
Les éclairages directionnels puissants peuvent également générer du bruit à l'intérieur, en redirigeant certains échantillons vers un éclairage directionnel invisible, qui ne contribue pas aux pixels finaux. Pour contourner ce problème, vous pouvez placer des volumes de post-traitement, qui atténuent l'éclairage directionnel à l'intérieur, voire le désactivent.
Champ distant
MegaLights implémente le tracé Champ distant, qui permet d'étendre la plage des rayons d'ombre au-delà de la plage d'élimination TLAS, pour un coût relativement faible, en traçant des maillages HLOD1 fusionnés et simplifiés à l'extrême.
Les tracés de champ distant sont activés par la variable de console r.MegaLights.HardwareRayTracing.FarField dans le fichier de configuration DefaultEngine.ini. Ils requièrent l'utilisation du niveau de détail hiérarchique (HLOD) de World Partition. Pour être généré, le champ distant requiert l'utilisation de HLOD1.
Translucidité lumineuse et brouillard volumétrique
MegaLights s'intègre au volume de translucidité lumineuse et au brouillard volumétrique pour évaluer de façon aléatoire l'éclairage et l'occultation sur ces volumes.
L'occultation est calculée à l'aide d'un volume de froxel unifié dont la résolution est définie à l'aide der.MegaLights.Volume.GridPixelSize et de r.MegaLights.Volume.GridSizeZ. La couverture du volume est automatiquement étendue en fonction de r.TranslucencyLightingVolume.OuterDistance et de la distance d'affichage du composant de brouillard à hauteur exponentielle actif.
La modification de ces paramètres a une incidence sur la qualité de l'occultation à la fois sur la translucidité lumineuse et sur le brouillard volumétrique.
Ombrage direct
L'ombrage direct est actuellement calculé en utilisant le même volume que celui utilisé pour la translucidité lumineuse. En particulier, l'éclairage spéculaire est approximé en extrayant une seule lumière à partir d'harmoniques sphériques qui se rapprochent de l'éclairage global autour de la surface.
Lumières de particules
MegaLights prend en charge les lumières de particules, mais uniquement celles générées par les systèmes Niagara. Il est également possible de les utiliser pour projeter des ombres lorsqu'elles sont gérées par MegaLights.
Par défaut, les lumières de particules ne sont gérées par MegaLights que si les utilisateurs l'activent explicitement dans les ressources. Vous pouvez modifier ce comportement à l'aide de la variable de console r.MegaLights.SimpleLightMode. Lorsque vous définissez cette variable sur 2, MegaLights gère toutes les lumières de particules (bien que vous deviez activer la projection d'ombre pour chaque ressource) ; lorsque vous la définissez sur 0, les lumières de particules sont désactivées dans MegaLights.
Pour activer MegaLights pour un émetteur Niagara :
Sélectionnez le module Outil de rendu de lumière sous l'émetteur.
Dans le panneau Détails, activez les options Autoriser MegaLights et Ombres projetées MegaLights.
Lorsque vous activez la deuxième option, les lumières de particules projettent des ombres.
Lorsque vous activez la première option, vous activez MegaLights pour les lumières générées.
Étant donné qu'un émetteur peut générer un grand nombre de lumières, il est important de veiller à éviter qu'un nombre excessif de lumières intenses n'affectent simultanément un pixel d'écran. Dans le cas contraire, la qualité peut nettement se dégrader. Nous recommandons de conserver des lumières de petite taille, peu nombreuses dans l'espace, et de n'activer la projection des ombres que sur un nombre restreint de lumières de particules.
Scalability
Voici les principaux contrôles permettant d'assurer l'évolutivité de MegaLights :
r.MegaLights.DownsampleModecontrôle le facteur de sous-échantillonnage pour l'échantillonnage et le tracé.r.MegaLights.NumSamplesPerPixelcontrôle le nombre d'échantillons et de tracés par pixel.
L'adaptation de la qualité d'éclairage à celle des PC haut de gamme ou du rendu hors-ligne est en cours de développement. Cependant, vous pouvez essayer d'utiliser les commandes r.MegaLights.DownsampleMode 0 et r.MegaLights.NumSamplesPerPixel 16 pour obtenir la meilleure qualité possible.
Pour adapter l'éclairage des nuages volumétriques et des mèches de cheveux, vous pouvez utiliser les variables de console sous r.megalights.volume.* afin de modifier la qualité de l'éclairage.
MegaLights ne prend pas encore en charge Movie Render Queue, mais vous pouvez obtenir de bons résultats en utilisant la méthode d'anticrénelage Super résolution temporelle (TSR) ou en définissant le paramètre Nombre d'échantillons temporels sur 8, ce qui permet de résoudre correctement l'éclairage.
Performances
Lorsque l'on compare les performances, il est important de comprendre que MegaLights résout tous les problèmes d'éclairage direct et remplace diverses passes de rendu différé, telles que :
Profondeurs d'ombre : si vous utilisez des textures d'ombre ou des textures d'ombre virtuelles
RenderDeferredLighting::Lights
InjectTranslucencyLightingVolume
VolumetricFog::Shadowed Lights
Removes light evaluation from VolumetricFog::LightScattering
Facteurs ayant un impact sur les performances :
Les performances dépendent en grande partie de la résolution de rendu interne.
Le ray tracing est la deuxième composante la plus importante du coût de MegaLights. Le coût dépend de plusieurs facteurs : le nombre d'instances dans la scène de ray tracing, leur complexité, la quantité d'instances qui se chevauchent et la quantité de triangles dynamiques qui doivent être mis à jour à chaque image. Pour en savoir plus sur l'optimisation de la scène de ray tracing, consultez le Guide sur les performances du ray tracing.
La génération des profondeurs des textures d'ombre pour chaque lumière, qui utilise une texture d'ombre virtuelle pour l'occultation au lieu du ray tracing, implique un coût supplémentaire en termes de mémoire, processeur et processeur graphique.
Les pixels à l'écran avec des BRDF complexes et affectés par des types de lumière intense (lumières rectangulaires texturées) impliquent aussi un coût en termes de performances, bien que moindre.
Le coût de MegaLights est généralement constant, et il n'y a pas de différence significative entre les lumières sans et avec ombre. Par conséquent, vous pouvez activer les ombres sur toutes les lumières de la scène.
Dans l'idéal, vous devez utiliser MegaLights avec le système Lumen HWRT, qui permet de partager les coûts de la scène de ray tracing entre les deux systèmes.
Stat GPU affiche un aperçu de la synchronisation du processeur graphique, notamment la passe MegaLights. Des synchronisations détaillées peuvent être obtenues à l'aide de ProfileGPU ou de profileurs tiers.
L'Unreal Engine utilise le calcul asynchrone pour superposer plusieurs demandes de rendu provenant de fonctionnalités différentes. Les synchronisations Stat GPU et ProfileGPU sont altérées tant que vous ne désactivez pas le calcul asynchrone avec la commande de console r.RDG.AsyncCompute 0.
Bien que MegaLights soit entièrement piloté par le GPU, il subsiste un coût de processeur hérité par source de lumière. Si toutes les lumières sont des MegaLights qui utilisent le ray tracing, la majeure partie du coût de processeur par lumière peut être supprimée avec la commande de console r.Visibility.LocalLightPrimitiveInteraction 0.
Contraintes
Limitations générales :
MegaLights n'est pas compatible avec l'outil de rendu direct
Limitations actuelles et améliorations souhaitées :
Un coût de processeur par lumière subsiste, permettant d'effectuer le suivi des interactions de primitives, qui n'est pas nécessaire pour MegaLights.
Les ombres des nuages de l'éclairage directionnel ne sont pas prises en charge.
L'estimation de l'épaisseur de diffusion de sous-surface n'est pas prise en charge.
L'eau, les nuages, les volumes homogènes et les volumétries locales ne sont pas pris en charge.
Prise en charge de la plateforme
MegaLights est conçu pour les consoles de génération actuelle (comme PlayStation 5, Xbox Series X | S) et les PC compatibles avec le ray tracing.
MegaLights n'est pas compatible avec les plateformes mobiles, la Switch ou les consoles de génération précédente (comme PlayStation 4 et Xbox One).