L'éclairage global en temps réel (Real-time GI) a toujours été le Saint Graal de l'infographie.
Au fil des années, l'industrie a également proposé diverses méthodes pour résoudre ce problème.
Les packages de méthodes couramment utilisés limitent le domaine du problème en utilisant certaines hypothèses, telles que la géométrie statique, la représentation approximative de la scène ou le suivi de sondes approximatives, et l'interpolation de l'éclairage entre les deux.
Dans Unreal Engine, la technologie globale d'éclairage et de réflexion Lumen a été fondée par Krzysztof Narkowicz et Daniel Wright.
L'objectif est de construire une solution différente des précédentes, capable d'obtenir un éclairage unifié et une qualité d'éclairage semblable à celle d'une pâtisserie.
Récemment, au SIGGRAPH 2022, Krzysztof Narkowicz et l'équipe ont parlé de leur parcours dans la création de la technologie Lumen.
Le ray tracing matériel actuel ne dispose pas d'une puissante prise en charge de la puissance de calcul GPU. Nous ne savons pas à quelle vitesse le lancer de rayons matériel sera, ni même si les consoles de nouvelle génération le prendront en charge.
Par conséquent, la méthode logicielle de ray tracing est utilisée. Il s'avère être un outil très utile pour mettre à l'échelle ou prendre en charge des scènes avec de nombreuses instances qui se chevauchent.
Le logiciel de traçage de rayons offre la possibilité d'utiliser une variété de structures de suivi, telles que des triangles, des champs de distance, des surfels ou des champs de hauteur.
Ici, Krzysztof Narkowicz abandonne l'étude des triangles et étudie brièvement les surfels, mais pour les géométries qui nécessitent une densité assez élevée pour être représentées, il est assez coûteux de les mettre à jour ou de suivre les surfels.
Après l'exploration initiale, les champs de hauteur étaient les plus appropriés car ils s'intègrent bien dans le matériel et fournissent une représentation de surface et des LOD continus simples.
Parce que nous pouvons utiliser tous les algorithmes POM, tels que min-max quadtree, sa vitesse de suivi est très rapide.
De plus, plusieurs champs de hauteur peuvent représenter des géométries complexes, similaires aux hiérarchies de volumes englobants rastérisées.
Il est également très intéressant de le considérer comme une structure d'accélération de surfels. Un seul texel est un surfel contraint par une grille régulière.
En plus du champ de hauteur, Lumen possède également d'autres propriétés, telles que l'albédo ou l'éclairage, afin de pouvoir calculer l'éclairage à chaque fois.
Dans Lumen, le développeur a nommé cette projection de décalcomanie complète avec des cartes de données de surface, qui est la position de capture.
Triangles rastérisés
Cartes Raymarched (champ de hauteur)
Pour chaque carte de la scène, effectuez des rayons Le pas est trop lent. Par conséquent, une structure d’accélération de carte est nécessaire et les développeurs ont choisi un BVH à 4 nœuds. Il est conçu pour une scène complète, avec chaque image sur le CPU et téléchargée sur le GPU.
Ensuite, dans le trace shader, nous effectuerons un parcours basé sur la pile et ordonnerons dynamiquement les nœuds afin que les nœuds les plus proches soient traversés en premier.
Vue de débogage BVH
La partie la plus délicate ici est de savoir comment placer le champ de hauteur afin qu'il capture l'intégralité du maillage. Krzysztof Narkowicz a déclaré : « L'une des idées est un champ de distance global basé sur le GPU. À chaque image, nous traçons un petit ensemble de rayons primaires pour trouver les rayons qui ne sont pas couverts par la carte.
Ensuite, pour chaque rayon non découvert. , Nous utiliserons le gradient de surface pour parcourir le champ de distance global afin de déterminer une orientation et une portée optimales de la carte, ce qui donnera une nouvelle carte
La position de capture du champ de distance global
Sur le D'une part, il a été prouvé qu'il générait des cartes pour l'ensemble de la scène fusionnée sans avoir à générer de cartes pour chaque maillage. D'autre part, cela s'est avéré assez capricieux en pratique car il produisait des résultats différents à chaque fois que la caméra bougeait. L'idée est d'importer les cartes de chaque maillage sous forme de maillage. Faites cela en construisant un BVH géométrique, où chaque nœud sera converti en N cartes
comme suit :
Triangles rastérisés
.
Ray Step Card (High Field)
Card Position View
Cette méthode a du mal à trouver un bon emplacement car le nœud BVH n'est pas un bon proxy pour placer cartes
Puis les chercheurs ont eu une autre idée : suivre la technique de dépliage UV et essayer de regrouper les éléments de surface
Parce qu'ils avaient affaire à des millions de polygones fournis par Nanite, ils ont troqué les triangles contre des surfels
Dans le même temps, ils sont également passés à une carte de guidage gratuite moins contrainte pour essayer de mieux correspondre à la surface. OK
Positions de cartes guidées gratuites
J'ai essayé cette méthode qui a très bien fonctionné pour les simples. formes, mais a eu des problèmes pour converger vers des formes plus complexes
Finalement, Narkowicz est revenu aux cartes alignées sur les axes, mais cette fois générées à partir de clusters de bacs et par maillage
Suivi du cône
Les propriétés uniques du suivi de la hauteur les champs permettent également le suivi du cône.Le traçage du cône est très efficace pour réduire le bruit car une seule trace de cône pré-filtrée représente des milliers de rayons individuels
Le traçage des rayons
. . Suivi du cône
Pour chaque carte, les développeurs stockent également une chaîne complète de mip-map pré-filtrée avec la hauteur de la surface, l'éclairage et les propriétés des matériaux. Lors du traçage, sélectionnez le rayon pas à pas approprié en fonction de l'empreinte du cône et effectuez un traçage de rayons dessus. Suivi avec et sans bords collés Le traçage d'un grand nombre de rayons incohérents dans le logiciel est très lent. Idéalement, une seule structure globale serait utilisée au lieu de plusieurs champs de hauteur. Lorsque l'empreinte du cône devient de plus en plus grande, une représentation exacte de la scène n'est pas réellement nécessaire et peut être remplacée par une représentation plus approximative pour des vitesses plus rapides. Une scène plus complexe avec des dizaines de cartes pour tracer chaque rayon La première approche réussie a été d'implémenter un suivi pur du cône de voxel et la scène entière au moment de l'exécution a été voxélisée, comme implémenté dans le article classique « Illumination indirecte interactive utilisant le traçage de cônes voxel ». "Triangles rastérisés" Suivi Le pas des rayons La carte continue avec le suivi du cône voxel La première technique pour réduire les fuites d'images consiste à suivre le champ de distance global et à échantillonner uniquement les voxels proches de la surface. Pendant le processus d'échantillonnage, l'opacité s'accumule à mesure que la plage d'échantillonnage s'étend et lorsque le suivi est arrêté, l'opacité atteint 1. Cela effectue toujours un échantillonnage précis à proximité de la géométrie pour réduire les fuites graphiques. La deuxième technique consiste à voxéliser l'intérieur du maillage. Cela réduit considérablement les fuites au niveau des parois plus épaisses, même si cela peut également provoquer une occlusion excessive. D'autres expériences incluent le suivi de patchs de bits de voxels clairsemés et de voxels par canal de transparence de face. Le but des deux expériences est de résoudre le problème d’interpolation des voxels dans la direction des rayons, c’est-à-dire qu’un mur solide aligné sur un axe deviendra transparent pour les rayons qui ne sont pas normaux au mur. Les tuiles de bits Voxel stockent un bit par voxel dans une tuile 8x8x8 pour indiquer si un voxel donné est vide. Un algorithme DDA en deux étapes est ensuite utilisé pour le pas de rayons. Les voxels avec des surfaces transparentes sont similaires, mais ont le même DDA, avec une transparence croissante dans la direction du rayon. Il s’avère que les deux méthodes ne sont pas aussi efficaces pour représenter la géométrie que le domaine des distances et sont assez lentes. Voxels avec transparence La première façon de suivre les représentations fusionnées consistait à effectuer un suivi conique d'un champ de distance global et des frappes d'ombrage à l'aide de cartes globales par scène. Autrement dit, parcourez un BVH, découvrez quelles cartes de la scène affectent les points d'échantillonnage, puis échantillonnez le niveau de glissement modéré de chaque carte en fonction de l'empreinte conique. Cet article a abandonné cette méthode car elle n'était pas considérée comme représentant uniquement la trajectoire en champ lointain, mais était considérée comme un remplacement direct du pas de lumière en champ élevé. Ironiquement, cette approche abandonnée s’est rapprochée le plus de la solution à laquelle nous sommes finalement parvenus deux ans plus tard. À ce stade, nous pouvons déjà produire de très bons résultats : Pourtant, nous avons rencontré beaucoup de problèmes de fuite graphique, et dans cette scène simple, même sur un GPU PC haut de gamme, les performances ne sont pas très bonnes. Pour résoudre les problèmes de fuite afin de gérer plus d'instances et terminer le traitement en moins de 8 ms sur PS5. Cette démo a été un véritable catalyseur. Par rapport aux solutions précédentes, le premier et le plus grand changement consiste à remplacer le suivi du champ de hauteur par le suivi du champ de distance. Afin de masquer le point de vie, insérez le rayon du point de vie de la carte, car le champ de distance n'a pas de propriétés de sommet, de cette façon, la zone non couverte provoquera uniquement une perte d'énergie, pas une fuite. Changement du traçage du cône de voxel en traçage de rayons sur champ de distance global pour la même raison. Dans le même temps, nous avons également effectué de nombreuses optimisations différentes et déchargé du temps différentes parties de Lumen grâce à des solutions de mise en cache. Il convient de noter que sans suivi par cône, nous devons débruiter et mettre en cache le suivi de manière plus agressive, mais encore une fois, c'est une histoire longue et compliquée. C'est le résultat final après l'envoi de la première démo, qui était systématiquement inférieure à 8 ms sur PS5, y compris les mises à jour de toutes les structures de données partagées telles que le champ de distance global. Les performances actuelles sont encore meilleures. Par exemple, le temps d'exécution de la dernière démo est proche de 4 millisecondes et la qualité a également été considérablement améliorée. En bref, cet article est une réécriture complète de l'ensemble de Lumen, et il y a beaucoup d'idées différentes qui n'ont pas été mises en œuvre. En revanche, certaines choses sont réutilisées. Tout comme à l'origine, nous utilisions des cartes comme représentation de suivi, mais elles sont désormais utilisées pour mettre en cache divers calculs sur la surface du maillage. Semblable au suivi logiciel, il a commencé comme notre principale méthode de suivi, principalement le suivi par cône, mais a fini par être un moyen de réduire et de prendre en charge des scènes complexes et lourdes avec de nombreuses instances qui se chevauchent. Fusionner la représentation de la scène
Première démo
Epilogue
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!