Toute l'actualité Gaming, Esports et jeux vidéo sur consoles et PC. Toutes les news des jeux fraîchement servies par la rédaction du site de référence : annonces, sorties, bons plans... ne manquez plus une info essentielle. Votre Magazine #1 des Jeux Vidéo. News, tests, émissions, trailers, vidéos, soluces et astuces.

Comment Enlighten aborde le lancer de rayons dans les jeux vidéo

Comment Enlighten aborde le lancer de rayons dans les jeux vidéo

jeudi 1er octobre 2020

Si vous avez prêté attention aux lancements de la nouvelle génération de consoles de jeux, vous avez probablement entendu parler de ray tracing.

Le lancer de rayons est une technique de rendu pour les graphiques photoréalistes en simulant la réfraction et la réflexion de la lumière. En d’autres termes, il fait en sorte que la lumière se comporte dans les jeux vidéo comme elle le ferait dans la vraie vie. Il simule des rayons lumineux et trace le chemin qu’un faisceau de lumière emprunterait dans le monde physique. Cela a l’air très impressionnant, et avec l’amélioration du GPU, cela devient une réalité dans les jeux modernes.

Il a cependant des inconvénients. Si les développeurs n’utilisent que le lancer de rayons, un grand nombre de rayons doivent être projetés pour garantir un éclairage global de haute qualité. Compte tenu du fait que les jeux nécessitent des environnements hautement interactifs, un calcul suffisant peut être difficile même lorsque vous utilisez les dernières cartes GPU haut de gamme.

C’est là que nous intervenons. Nous avons recherché un moyen de rendre des images photoréalistes en utilisant notre technologie d’éclairage dynamique Enlighten et le traçage de rayons en temps réel pour développer une méthode hybride, qui permettra de meilleures performances tout en maximisant les effets de traçage de rayons.

Il s’agit toujours d’un projet en cours de développement, et nous prévoyons que les résultats finaux seront différents, avec des performances et des résultats améliorés à tous les niveaux.

Commençons par la démo que nous avons créée d’une gare de triage. Nous l’avons construit dans Unreal Engine 4 (bien que la technique puisse être appliquée à d’autres moteurs), et les seules sources de lumière proviennent d’une seule lumière directionnelle et d’un seul puits de lumière.

Reflet du lancer de rayons avec Enlighten

Notre premier sujet porte sur le ray tracing Reflection avec Enlighten.

Haut diffus (indépendant de la vue), Spéculaire/Réflexion (dépendant de la vue) ci-dessus

En termes de réflexion, les lumières indirectes sont séparées en deux parties lors du rendu : diffuse et spéculaire/réflexion. La partie diffuse est indépendante de la vue et n’a aucun rapport avec le mouvement de la caméra, vous obtiendrez donc les mêmes résultats sous n’importe quel angle. Spéculaire/Réflexion dépend de la vue, où la direction de la réflexion change en fonction de la direction de la caméra. Ce premier sujet se concentre sur la spéculaire/réflexion.

L’approche la plus courante pour la réflexion est l’environnement cubemap, appelé Reflection Capture dans UE4.

Une autre approche est la réflexion de l’espace d’écran (SSR). Cela peut apporter de beaux résultats si sa réflexion se trouve dans l’image, bien que cela dépende des angles de caméra. Si ces réflexions se trouvent en dehors de l’écran visible, des artefacts sont susceptibles de se produire.

Et puis il y a le lancer de rayons. Les rayons de réflexion sont transmis à partir des surfaces, lorsqu’un rayon atteint une zone, son matériau est calculé et les résultats sont renvoyés. Il n’a pas de limites comme avec SSR, et sa réflexion remplit toute la scène, donnant de beaux résultats.

Dans son implémentation actuelle, Enlighten adopte l’approche du cubemap environnemental mis à jour en temps réel. Lorsque l’angle de la lumière change, les lumières directes et indirectes sur le cubemap sont mises à jour en temps réel par le CPU. Côté GPU il suffit de sampler les cubemaps générés par le CPU, le coût global d’Enlighten est suffisamment faible pour que les performances ne soient pas impactées.

Avec la réflexion par lancer de rayons, toute la scène est mise à jour en temps réel, y compris les objets hors écran. Cela crée des résultats de haute précision, mais dans le cas de reflets brillants, plusieurs rayons doivent être transmis, et dans certains cas, l’ajout d’un deuxième rebond peut être nécessaire, ce qui a un impact sur les performances.

Notre objectif est de mettre à jour l’intégralité de la scène en temps réel, d’inclure des objets hors écran dans les réflexions et de générer des résultats de haute précision grâce à la réflexion par lancer de rayons, combinés à l’éclairage indirect d’Enlighten pour obtenir des résultats plus réalistes et ajouter un retour à Enlighten où les performances seraient trop élevées pour le lancer de rayons uniquement.

Avec la fonction de repli, les utilisateurs peuvent revenir aux cubemaps d’Enlighten si la rugosité dépasse un seuil spécifique ou si le nombre de rebonds requis affecte trop les performances. Regardez les captures d’écran, celle du haut indique le résultat après l’ajout d’Enlighten. Celui du bas montre le résultat après l’introduction de la fonction Fallback to Enlighten. Les boules de droite ont dépassé le seuil de rugosité et ont donc été remplacées par les cubemaps d’Enlighten. Les parties noires entre les boules indiquent les deuxièmes rebonds manquants, elles sont donc également remplacées par les cubemaps d’Enlighten. Cette fonction de repli peut atténuer le bruit généré par les reflets brillants, et cela signifie que moins de rayons doivent être transmis, ce qui améliore les performances.

Maintenant, regardons le résultat. La boule au centre montre une réflexion spéculaire. Vous pouvez voir comment les lumières indirectes sont mises à jour.

De plus, regardez le rail en bas à droite. Les valeurs de rugosité sont modifiées de sorte que la texture supérieure soit lisse et la texture inférieure rugueuse. La partie approximative revient à Enlighten cubemaps. Les résultats du lancer de rayons et les résultats de cubemap Enlighten changent de manière transparente.

En termes de performances, nous avons utilisé la même scène pour comparer les performances avant et après l’ajout d’Enlighten. Sans Enlighten, la réflexion du suivi des rayons est de 1,72 ms, mais elle n’atteint que 1,87 ms après l’introduction d’Enlighten, de sorte que le coût de l’ajout d’Enlighten est assez faible. Si vous utilisez la fonction Fallback to Enlighten, les performances sont grandement améliorées à mesure que la rugosité maximale diminue.

Visibilité éclairée par lancer de rayons

Lors de l’exécution, le moteur de jeu doit fournir à Enlighten non seulement les informations sur la source lumineuse, mais également les informations sur l’ombre de cette source lumineuse. Ces informations d’ombre sont appelées visibilité éclairée.

Il est nécessaire de disposer de données de visibilité appropriées pour éviter les fuites de lumière de la source lumineuse, permettant ainsi à Enlighten de fournir un éclairage indirect plus précis.

Pour collecter ces données de visibilité, Enlighten prédéfinit à l’avance des points d’échantillonnage dans la scène (voir le schéma à droite). Avec l’implémentation actuelle, l’échantillonnage de la carte d’ombre ou la projection de rayons sont des moyens courants de générer des données de visibilité Enlighten. Grâce à la capacité matérielle de lancer de rayons, nous introduisons la visibilité éclairée par lancer de rayons, une nouvelle méthode pour générer ces données.

Pour cette méthode, nous traçons un rayon depuis les points d’échantillonnage jusqu’à la source de lumière, et s’il croise un objet entre les deux, il définit la valeur de visibilité sur zéro. Cela signifie que même si la position de la source lumineuse change ou si un objet en mouvement interfère avec la scène, la visibilité est mise à jour en temps réel. Cette méthode a l’avantage de supporter tous les types de sources lumineuses, et s’adapte simplement à tous les moteurs de jeux supportant le ray tracing.

Sur la vidéo ci-dessus, vous pouvez remarquer que l’éclairage indirect s’assombrit en temps réel avec la fermeture de la fenêtre de toit, et si vous vous concentrez sur le tunnel, à mesure que la quantité de lumière directe diminue, moins d’éclairage indirect atteint l’intérieur du tunnel, ce qui le rend plus foncé.

En termes de performances, le type de rayons transmis est désormais limité aux seuls rayons d’ombre. Le nombre de rayons est déterminé par le nombre de lumières mobiles et le nombre de points d’échantillonnage affectés par chaque lumière. Dans la démo que nous avons montrée, une seule lumière directionnelle est placée qui affecte toute la scène. Cela a créé 40 000 points d’échantillonnage, ce qui signifie que vous avez 40 000 rayons d’ombre, et en utilisant une GeForce RTX 2060, le traitement a pris 0,04 ms.

Ray tracing Rassemblement final avec Enlighten

Après spéculaire/réflexion dans le premier sujet, il convient maintenant d’expliquer comment l’éclairage indirect diffus est calculé. Dans ce diagramme, vous avez un projecteur et une boîte grise. Le spot éclaire une partie du plafond, c’est la lumière directe. Les zones où se trouvent les points d’interrogation restent noires, cependant, elles sont censées être éclairées par une lumière indirecte, c’est là qu’intervient Enlighten.

Au cours de la phase initiale de précalcul, Enlighten génère des données d’exécution optimisées sur les acteurs statiques (acteurs avec une forme et une position fixes). Au moment de l’exécution, Enlighten prend ces données en entrée, ainsi que les informations d’éclairage direct et de matériau fournies par le moteur pour générer un éclairage indirect à partir de rebonds de lumière sans fin.

Voici le résultat :

Dans cette section, nous parlons spécifiquement de l’éclairage diffus, c’est donc le résultat de l’éclairage uniquement. Ici, nous ne rendons que la partie éclairage :

Avec Enlighten, les lumières indirectes de la lumière directionnelle et du puits de lumière sont mises à jour en temps réel. Cependant, le train bleu étant un objet en mouvement, les données précalculées n’en tiennent pas compte, de sorte que la lumière réfléchie par le train n’est pas rendue.

Passons maintenant à la fonction d’éclairage Final Gather. Final Gather transmet les rayons d’un point de rendu et résume les informations d’éclairage de l’endroit où ils ont frappé. Comme il ne simule que le premier rebond de lumière, il est souvent utilisé en conjonction avec une autre illumination globale.

Dans l’implémentation Final Gather d’UE4, les rayons sont transmis à partir de pixels sur l’écran. Lorsque les rayons de ces pixels atteignent une zone, cela déclenche un point de rassemblement. Ensuite, le rayon d’ombre est transmis à la source lumineuse à partir du point de collecte. Le processus est généralement appelé « estimation de l’événement suivant » dans le traçage de chemin. Plutôt que de transmettre des rayons au hasard, il transmet directement sur la source lumineuse, ce qui peut entraîner une convergence plus rapide.

Vous obtenez alors un éclairage par Gather Points et les résumez en Screen Pixels. Vous pouvez alors obtenir des résultats de lumière indirecte du Screen Pixel. Vous pouvez voir le résultat ci-dessous, où la lumière rebondit sur un objet en mouvement.

Alors, comparons l’éclairage d’Enlighten avec Final Gather d’UE4. Enlighten a un rebond infini, des résultats d’éclairage stables et la charge GPU n’est pas lourde. Cependant, les détails sont limités en fonction de la taille des pixels de la carte lumineuse et il n’y a pas de rebond sur les objets en mouvement. Avec Final Gather d’UE4, vous obtenez un beau premier rebond, et il rebondit sur des objets en mouvement. Cependant, il ne s’agit que d’un premier rebond et est bruyant.

Comme vous pouvez probablement le constater par ces avantages et limitations, les deux approches se complètent. En combinant les deux, vous pouvez obtenir le rebond infini d’Enlighten aux côtés des magnifiques premiers rebonds de Final Gather, et la lumière peut rebondir sur des objets en mouvement.

Pour ce faire, il existe deux approches. Vous ajoutez les résultats d’Enlighten à Screen Pixel ou à Gather Point. Pour plus de facilité, nous avons décidé de nous concentrer sur les résultats à Gather Point. Cela signifie que les résultats d’Enlighten sont renvoyés une fois de plus et que vous pouvez obtenir un deuxième rebond à partir d’objets mobiles. Vous obtiendrez des résultats d’éclairage plus lumineux à partir du Gather Point, vous pouvez donc vous attendre à moins de bruit.

Comme vous pouvez le voir sur les résultats, toute la scène devient plus lumineuse grâce au rebond sans fin d’Enlighten. Examinez maintenant les zones encerclées ci-dessous.

Par rapport au résultat Unreal Engine 4 Final Gather, le deuxième rebond et les rebonds suivants ont été ajoutés. Les briques rouges à droite sont rebondies et la rougeur a été appliquée sur le côté droit et le côté supérieur du train. Vous pouvez également voir les rebonds du train, qui est l’objet en mouvement.

Regardez maintenant les captures d’écran de comparaison ci-dessous :

Le coin inférieur gauche montre le résultat de Path Tracing comme référence, et si vous le comparez au résultat Unreal Engine 4 Final Gather, et ajoutez la réflexion d’Enlighten, le résultat est très proche de ceux de Path Tracing. Par rapport au résultat Final Gather, vous avez moins de bruit, mais vous en avez toujours.

En termes de performances, avec Final Gather seul, nous voyons un 3,06 ms pour le chemin Create Gather Points, alors qu’avec Enlighten qui monte à 3,58 ms, les coûts sont donc, encore une fois, relativement insignifiants.

Tout cela est encore en cours et nous prévoyons d’en révéler plus en temps voulu. À partir de la version 3.12 d’Enlighten, la prise en charge de la visibilité Enlighten par lancer de rayons et la combinaison de la réflexion et de l’illumination du lancer de rayons seront proposées en accès anticipé. La combinaison du regroupement final du lancer de rayons avec Enlighten sera proposée en tant qu’expérimentation.

Pour plus de détails sur Enlighten, cliquez ici. Vous pouvez également consulter les vidéos récentes du didacticiel Enlighten sur YouTube ici.

Découvrez d’avantage plus d’articles dans nos catégories Astuce, Consoles et Jeux.

Merci pour votre visite on espère que notre article Comment Enlighten aborde le lancer de rayons dans les jeux vidéo
, on vous invite à partager l’article sur Facebook, twitter et whatsapp avec les hashtag ☑️ #Comment #Enlighten #aborde #lancer #rayons #dans #les #jeux #vidéo ☑️!

You might also like
Leave A Reply

Your email address will not be published.