Le Chapitre 4 de Fortnite Battle Royale adopte l'éclairage global en temps réel de Lumen

Daniel Wright, ingénieur associé (graphismes) et Krzysztof Narkowicz, directeur technique (graphismes) |
26 janvier 2023
Bonjour, nous sommes Daniel Wright et Krzysztof Narkowicz, ingénieurs sur Lumen. Lumen est le système d'éclairage global dynamique et de reflets de l'Unreal Engine 5, activé par défaut. Dans cette publication, nous allons vous expliquer comment Lumen fonctionne dans le Chapitre 4 de Fortnite Battle Royale et mettre en avant les améliorations que l'équipe a apportées à Lumen lors de la production de ce chapitre (disponibles dès maintenant pour tous les développeurs dans l'Unreal Engine 5.1). Nous avions déjà publié un article sur le blog technologie qui présentait Lumen et que nous vous recommandons de lire pour prendre connaissance du système.

Le Chapitre 4 de Fortnite Battle Royale intègre Lumen par défaut sur PlayStation 5, Xbox Series X et Xbox Series S. Lumen est activé sur PC et Cloud Gaming quand le paramètre de qualité "Éclairage global" est réglé sur "Élevé" ou "Épique", avec la possibilité en option d'utiliser un ray tracing matériel pour une qualité encore accrue lorsque la carte graphique le permet.
 

Lumen dans le Chapitre 4 de Fortnite Battle Royale

Avant le Chapitre 4, sur les consoles de nouvelle génération, Fortnite était limité aux technologies d'éclairage dynamiques de l'Unreal Engine 4. L'éclairage ambiant était assuré par l'occlusion ambiante du champ de distance, ce qui rendait les intérieurs froids à cause de la lumière naturelle de couleur bleue qui pénétrait dans les bâtiments. Dans le Chapitre 4, Lumen calcule l'éclairage global en haute qualité, en y ajoutant le reflet chaleureux des rayons du soleil ainsi que des ombres indirectes détaillées.
Occlusion ambiante du champ de distance vs éclairage global de Lumen. L'exposition automatique est activée avec l'éclairage global de Lumen.
Grâce à un éclairage global réaliste, les zones en intérieur deviennent nettement plus sombres que l'extérieur, puisque la lumière naturelle est correctement bloquée. Il faut donc que l'exposition automatique soit activée.

Dans les précédentes versions de Fortnite, les reflets sur les consoles de nouvelle génération étaient limités aux reflets de l'espace écran (SSR). Cette fonctionnalité ne reflète que ce qui se trouve à l'écran, ce qui ne suffit pas pour empêcher la lumière naturelle de déborder à l'intérieur des bâtiments. Le SSR ne fournit par ailleurs de bons résultats que sur les surfaces miroitantes. Les reflets sommaires faisaient donc défaut. Les artistes de Fortnite avaient dû contourner ces limitations en évitant presque systématiquement les effets spéculaires sur les matériaux utilisés en intérieur ! Les reflets de Lumen génèrent des reflets en ray tracing réalistes sur les surfaces brillantes et un rendu des métaux et matériaux lisses adéquat, même en intérieur. Les artistes peuvent maintenant observer en temps réel la réaction de tous les matériaux à l'éclairage.
Reflets de l'espace écran (SSR) vs reflets de Lumen sur la glace.
Les reflets de Lumen prévalent également sur l'eau, où ils sont beaucoup plus précis que le SSR et ne se limitent pas à ce qui se trouve à l'écran.
Reflets de l'espace écran (SSR) vs reflets de Lumen sur l'eau.
Dans Fortnite Battle Royale, de nombreux événements de jeu requièrent un éclairage dynamique : l'heure de la journée change, les joueurs peuvent construire et détruire des structures, ouvrir des portes, etc. Lumen est totalement dynamique et réagit à ces changements en temps réel. Lumen amortit ses calculs sur plusieurs images pour réduire leur coût, mais avec la fréquence d'images élevée visée par Fortnite, les artefacts d'accumulation temporelle sont minimisés.

Les défis du Chapitre 4

Une fois notre travail sur l'Unreal Engine 5.0 terminé, notre attention s'est portée sur le Chapitre 4 de Fortnite Battle Royale et les défis qu'il présentait. Fortnite vise une fréquence d'images minimale de 60 FPS sur console, c'est-à-dire seulement 16,67 millisecondes par image, et même encore moins si on garde un peu de marge pour la résolution dynamique et les coûts de gameplay lors des combats intenses. Au vu de toutes les fonctionnalités de rendu que nous voulions implémenter, nous n'allions disposer que de quatre millisecondes pour l'éclairage global dynamique et les reflets combinés. C'est un budget extrêmement limité, étant donné qu'il n'est pas rare pour les jeux triple A de dépenser quatre millisecondes rien que pour les reflets en ray tracing. Il allait falloir qu'on réalise toutes les optimisations possibles sans compromettre la qualité de l'éclairage de nouvelle génération.

La première décision que nous avons dû prendre concernait la méthode de ray tracing à utiliser pour le Chapitre 4 de Fortnite Battle Royale. Nous avions déjà publié La Matrice s'éveille : une expérience Unreal Engine 5 avec Lumen et le ray tracing matériel sur consoles. Cette démo technique incluait des optimisations conséquentes, mais disposait d'un budget de 30 FPS. Après nos premiers tests, nous avons conclu que le ray tracing logiciel de Lumen, moins coûteux, serait nécessaire pour tenir le budget des 60 FPS. Cependant, le caractère approximatif du ray tracing logiciel présentait plusieurs inconvénients, en particulier dans la qualité de la végétation et les reflets sur l'eau.

Dans le Chapitre 4 de Fortnite Battle Royale, on trouve des forêts et des collines recouvertes d'herbe. Aucun de nos précédents projets avec Lumen n'incluait de végétation notable, nous n'avions donc encore jamais travaillé dessus. L'un des principaux problèmes rencontrés était lié à la surocclusion de la végétation.

Le ray tracing logiciel de Lumen recourt à un champ de distance signé global pour représenter les surfaces de la scène. Les champs de distance signés ne peuvent représenter qu'une surface opaque et y faire défiler les rayons ne donne que deux résultats : touché ou manqué. En résulte une surocclusion prononcée des maillages de la végétation, modélisés sous forme d'agrégats. Nous avons développé une nouvelle façon d'intersecter les champs de distance signés : à chaque étape du ray marching, on choisit s'il y a ou non intersection. La technique en devient stochastique et nous permet de modéliser de façon plus réaliste la géométrie de l'agrégat tout en conservant la représentation du champ de distance signé qui fonctionne bien pour le reste de la scène.
Surocclusion de la végétation résolue par des intersections de champ de distance stochastiques semi-transparentes.
Certains problèmes ont été plus faciles à résoudre. Lumen emploie le screen tracing pour ajouter des détails là où le ray tracing logiciel fait défaut, mais l'herbe est tellement détaillée que cette méthode générait énormément de crénelage. Il nous a suffi d'ignorer des impacts du screen tracing sur la végétation pour nous débarrasser de ces artefacts.
Bruit extrême lié au screen tracing sur l'herbe résolu en ignorant des impacts sur la végétation.
L'autre gros problème lié au ray tracing logiciel était la faible résolution de l'éclairage mis en cache sur les surfaces apparaissant dans les reflets. Lumen conserve un cache de surface en assez haute résolution pour chaque maillage afin de générer efficacement l'éclairage à l'impact des rayons, mais nous les réunissions dans une représentation voxélisée beaucoup plus diffuse. Nous avons développé une structure de recherche inversée qui nous a permis d'échantillonner le cache de surface de chaque maillage directement à l'impact des rayons, ce qui donnait un éclairage émissif plus réaliste et des reflets sur l'eau plus précis.
Reflets plus précis avec le ray tracing logiciel lorsque les rayons échantillonnent directement le cache de surface de Lumen (screen tracing désactivé pour l'illustration).
À propos des reflets de l'eau, nous avions des artefacts verticaux à chaque fois que le screen tracing de Lumen était bloqué par un objet au premier plan. C'était extrêmement gênant pour un personnage en mouvement. Le screen tracing de Lumen ne connaît pas l'épaisseur des objets, nous devons donc passer au ray tracing logiciel pour le reste du rayon, ce qui produit souvent une couleur différente. C'était une régression par rapport au SSR, qui employait une méthode d'intersection des rayons moins précise, mais moins coûteuse, et qui permettait de continuer derrière les objets au premier plan. Nous avons pu supprimer ces traits verticaux en échantillonnant la couleur à l'écran même pour les impacts du ray tracing logiciel, ce qui a réduit les incohérences. Il s'agit d'une optimisation de toute dernière minute. Elle ne fait donc pas partie de la version 5.1 de l'Unreal Engine.
Traits verticaux résultant d'incohérences entre le screen tracing et le ray tracing logiciel minimisés par l'échantillonnage de la couleur à l'écran à l'impact du rayon.
D'autres améliorations de qualité sont arrivées par surprise. L'éclairage global de Lumen sous-échantillonne massivement afin d'entrer dans un budget de quatre millisecondes. Le bruit est par conséquent plus prononcé, ce qui nuit à l'expérience de jeu. Nous avons pu nettement réduire ce bruit en intégrant la technologie Spatiotemporal Blue Noise de NVIDIA, qui préoptimise les motifs de bruit pour les annuler rapidement lorsqu'ils s'accumulent sur plusieurs images. On obtient ainsi un éclairage indirect beaucoup plus net sans avoir besoin de tracer davantage de rayons.
L'éclairage naturel pénètre par la porte en générant moins de bruit grâce à la technologie Spatiotemporal Blue Noise.

Contrôles de direction artistique

Les artistes disposent déjà d'outils qui leur permettent de diriger artistiquement l'éclairage indirect, comme "Indirect Lighting Intensity" pour l'éclairage directionnel. Les artistes de Fortnite utilisaient une valeur de 2,0 pour amplifier l'éclairage par rebond et conférer au jeu une atmosphère plus chaude. Les zones en intérieur présentaient toutefois un problème : elles devenaient extrêmement sombres sous un éclairage global réaliste lorsqu'il n'y avait ni fenêtre ni source de lumière à proximité. Il en résultait d'importantes variations d'exposition lorsqu'on passait de l'intérieur à l'extérieur. Les artistes pouvaient contourner ce problème en ajoutant des sources de lumière, mais le coût des ombres s'en trouvait accru.

Nous avons développé de nouveaux contrôles sur l'éclairage indirect de Lumen : "Skylight Leaking" et "Diffuse Color Boost" sur le volume de post-traitement. "Skylight Leaking" permet d'ajouter une petite quantité d'éclairage ambiant en intérieur et de limiter la plage d'exposition. "Diffuse Color Boost" permet quant à lui d'amplifier la quantité d'éclairage indirect par rebonds multiples. Aucune de ces options ne pèse véritablement sur le budget du processeur graphique, contrairement à l'ajout de lumières. Les artistes de Fortnite ont finalement utilisé le débordement de lumière naturelle pour éviter les zones intérieures trop sombres qui peuvent nuire au gameplay.
Le débordement de lumière naturelle permet d'éviter les zones totalement noires.
Un éclairage global réaliste crée un fort contraste avec lequel aucune valeur d'exposition unique ne fonctionne. Les zones claires de l'image, en particulier le ciel et les surfaces illuminées par le soleil, sont surexposées, alors que les zones sombres sont sous-exposées. L'Unreal Engine 5.0 intègre une nouvelle fonctionnalité appelée Local Exposure (exposition locale), que les artistes de Fortnite ont utilisée pour conserver la lumière d'accentuation et le détail des ombres dans ces délicates conditions d'éclairage à plage dynamique élevée.
Lumière d'accentuation et détails des ombres préservés avec l'exposition locale, une nouvelle fonctionnalité de l'UE 5.0. L'exposition locale doit toujours être configurée lorsque Lumen est utilisé !

Performance

Lumen s'appuie massivement sur le suréchantillonnage temporel grâce au système Temporal Super Resolution (TSR) de l'Unreal Engine 5 pour une sortie en 4K. Générer un rendu en 1080p en interne avec le TSR permet d'obtenir une meilleure qualité d'image qu'en exécutant Lumen en 4K native avec des paramètres de qualité inférieurs.

Lumen peut être configuré de façon à viser 60 FPS sur les consoles de nouvelle génération en réglant les groupes de qualité "Éclairage global" et "Reflets" sur "Élevé" dans le profil matériel de la plateforme :

; Qualité reflets et GI Lumen sur Élevé, cible 60 FPS
+CVars=sg.GlobalIlluminationQuality=2
+CVars=sg.ReflectionQuality=2

L'éclairage global de Lumen applique un sous-échantillonnage encore plus important que d'ordinaire pour descendre jusqu'à 1/16e de rayon par pixel. L'éclairage indirect devient moins stable temporellement lorsqu'aussi peu de rayons sont tracés, et le bruit s'accentue dans les zones sombres. Le débordement de lumière naturelle est un bon outil pour masquer cette accentuation du bruit.
Lumen paramétré à 60 FPS vs Lumen paramétré à 30 FPS. Lumen capture mieux les petits détails et se montre bien plus stable temporellement quand il est paramétré à 30 FPS, ce qui n'est pas perceptible sur une capture d'écran comparative.
Nous avons procédé à de nombreuses optimisations mineures pour l'éclairage global de Lumen en travaillant sur le Chapitre 4 de Fortnite Battle Royale, mais c'est en déplaçant l'intégralité de la méthode dans le pipeline de calcul asynchrone que nous avons gagné le plus de temps : 0,8 milliseconde. Lumen accumule de nombreuses demandes de calcul pour ses différents algorithmes, entre lesquelles le processeur graphique est brièvement inactif.

Par ailleurs, les demandes liées au ray tracing s'étendent souvent à cause de rayons dont le calcul est plus long. En faisant passer ce travail dans le pipeline de calcul asynchrone, le processeur graphique peut combler les trous avec les autres tâches de l'image, ce qui optimise l'utilisation de sa puissance de calcul. Lumen asynchrone sera activé par défaut sur console dans l'UE 5.2, puisque certaines corrections nécessaires n'étaient pas prêtes pour l'UE 5.1.
Le travail de Lumen est désormais exécuté sur le pipeline de calcul asynchrone, ce qui optimise l'utilisation de la puissance de calcul du processeur graphique.
Les reflets de Lumen s'adaptent au budget des 60 FPS en générant un rendu à la moitié de la résolution, excepté sur l'eau. L'éclairage global de Lumen produit des reflets sommaires, mais les reflets de Lumen doivent tracer des rayons supplémentaires pour plus de précision. Le coût des reflets peut grandement varier en fonction du nombre de matériaux à l'écran assez lisses pour requérir des rayons de reflet. L'une des optimisations les plus efficaces (une à deux millisecondes) a été d'ignorer plus souvent les rayons de reflet dans la végétation. Leur coût dans la passe de base et la profondeur des ombres était important et la différence de qualité n'était pas notable.

La Xbox Series S constitue un défi particulier. Son processeur graphique est limité à quatre téraflops, contre douze pour celui de la Xbox Series X. Une résolution interne inférieure était donc requise, mais pas seulement. Nous ne voulions pas revenir à une occlusion ambiante du champ de distance, qui aurait radicalement altéré le visuel. Au lieu de cela, nous avons développé un mode dans lequel l'éclairage global de Lumen génère des reflets sommaires et dans lequel les reflets de l'espace écran (SSR) se chargent des effets de miroir. On gagne ainsi une milliseconde en désactivant les reflets de Lumen, tout en affichant une image de qualité supérieure à ce que donnerait l'utilisation seule des reflets de l'espace écran (SSR).
L'éclairage global de Lumen génère des reflets sommaires même lorsque les reflets de Lumen sont désactivés pour s'adapter aux limites matérielles.
Au bout du compte, nous sommes parvenus à faire entrer l'éclairage global et les reflets de Lumen dans la fenêtre du budget de quatre millisecondes à 60 FPS sur les consoles de nouvelle génération. Le Chapitre 4 de Fortnite Battle Royale affiche une résolution interne moyenne entre 55 et 60% de la 4K sur les consoles de nouvelle génération, avec une fréquence stable de 60 FPS.

Mise à l'échelle

Fortnite est disponible sur une grande variété de plateformes. Seules les plus performantes prennent en charge Lumen. L'expérience de jeu doit être aussi homogène que possible, sans que nos artistes aient à retravailler la lumière sur chaque plateforme. Nous adaptons l'éclairage ambiant en fonction du réglage de qualité "Éclairage global" :

Épique et Élevé
  • Lumen est activé et offre un éclairage global intégral.
  • Le débordement de lumière naturelle de Lumen est utilisé pour éviter que les zones sombres soient totalement noires.
  • L'exposition automatique est activée pour corriger l'exposition en intérieur.
  • L'exposition locale est activée.

Moyen
  • L'occlusion ambiante du champ de distance est activée à la place de Lumen pour l'occlusion ambiante à grande échelle.
  • L'occlusion ambiante de l'espace écran (SSAO) est activée pour l'occlusion ambiante à petite échelle.
  • L'exposition automatique est désactivée.

Faible
  • Lumière naturelle sans ombres.
  • L'intensité de la lumière naturelle est réduite avec r.SkylightIntensityMultiplier=0.7 pour se rapprocher du réglage Moyen, puisqu'il n'y a aucune ombre générée par la lumière naturelle.

Nous espérons que ce récapitulatif des améliorations de Lumen pour le Chapitre 4 de Fortnite Battle Royale vous sera utile et répondra à vos questions sur le développement d'un jeu multiplateforme avec Lumen. Les développeurs qui travaillent avec l'Unreal Engine peuvent déjà accéder à la grande majorité de ces améliorations dans l'UE 5.1. Pour de plus amples informations, consultez la documentation de Lumen.

    Obtenez l'Unreal Engine dès maintenant !

    Procurez-vous l'outil de création le plus ouvert et le plus avancé au monde.
    L'Unreal Engine est prêt à l'emploi, avec toutes les fonctionnalités et un accès complet au code source.