Qu'est-ce que le lancer de rayons et comment GeForce RTX de Nvidia gère-t-il la technologie?

La démo Sol de Nvidia utilise largement le traçage de rayons en temps réel.

Qu'est-ce que le lancer de rayons? Cette question est tout simplement devenue beaucoup plus pertinente pour les joueurs de PC, puisque les nouvelles cartes graphiques GeForce RTX 2080, GeForce RTX 2080 Ti et GeForce RTX 2070 de Nvidia ajoutent du matériel dédié pour accélérer le traçage des rayons. Toutes ces cartes graphiques utilisent la nouvelle architecture Turing de Nvidia, qui promet d'être la plus révolutionnaire des GPU que nous ayons vue depuis longtemps, peut-être jamais. S'agira-t-il des nouvelles cartes graphiques disponibles dès qu'elles seront disponibles ou sont-elles trop chères?

C'est une question difficile à répondre, car même si nous avons passé en revue l'édition de fondations de GeForce RTX 2080 et de GeForce RTX 2080 Ti, nous attendons toujours des jeux utilisant les nouvelles fonctionnalités matérielles. Nvidia a fourni des informations détaillées sur toutes les technologies entrant dans les cartes, ainsi que quelques démonstrations de la technologie, mais leur utilisation réelle dans les jeux peut varier. En attendant que les jeux de lancer de rayons arrivent, nous avons créé cette vue d'ensemble du traçage de rayons, du tramage, des graphiques hybrides, et maintenant, les cartes GeForce RTX de Nvidia sont en train de changer ce que nous pouvons attendre de nos GPU.

Une introduction à l'infographie et à la pixellisation

Créer une simulation virtuelle du monde qui vous entoure qui ressemble et se comporte correctement est une tâche incroyablement complexe, si complexe que nous n’avons jamais vraiment tenté de le faire. Oubliez les choses comme la gravité et la physique et réfléchissez à la façon dont nous voyons le monde. Un nombre effectivement infini de photons (faisceaux de lumière) se déplacent autour des surfaces et traversent des objets, tous basés sur les propriétés moléculaires de chaque objet. Essayer de simuler «l'infini» avec une ressource finie comme la puissance de calcul d'un ordinateur est une recette pour le désastre. Nous avons besoin d'approximations intelligentes, et c'est comme cela que fonctionnent les graphismes modernes.

Nous appelons ce processus la pixellisation et, au lieu de regarder des objets, des surfaces et des photons infinis, il commence par des polygones. Les premières tentatives n’auraient peut-être utilisé que des centaines de polygones à la fois, mais ce nombre n’a cessé d’augmenter à mesure que nos cartes graphiques et nos processeurs sont devenus plus rapides. Maintenant, les jeux ont des millions de polygones, mais comment transformer tous ces triangles en une image? Rastérisation

Cela implique beaucoup de mathématiques, mais la version courte est qu'une fenêtre (l'écran) est définie et qu'une représentation 2D du monde 3D est créée. La conversion d'un polygone en une image 2D sur un écran implique la détermination de la partie de l'affichage que l'objet recouvre. De près, un seul triangle peut couvrir la totalité de l'écran, alors que s'il est plus éloigné et vu sous un angle, il peut ne couvrir que quelques pixels. Une fois que les pixels sont déterminés, des éléments tels que les textures et l'éclairage doivent également être appliqués.

Triangle de rastérisation

Faire cela pour chaque polygone pour chaque image finit par être un gaspillage, car de nombreux polygones peuvent ne pas être visibles. Diverses techniques, telles que le Z-buffer (un tampon secondaire qui garde la trace de la profondeur de chaque pixel) et le Z-Culling (rejetant les objets bloqués), accélèrent le processus. En fin de compte, un moteur de jeu récupérera les millions de polygones potentiellement visibles, puis tentera de les traiter aussi efficacement que possible.

Ce n’est pas une mince affaire, et au cours des deux dernières décennies, nous sommes passés de polygones primitifs avec des sources de lumière «simulées» (par exemple, le Quake d’origine) à des environnements plus complexes avec des cartes mates, des ombres douces, une occlusion ambiante, réflexions spatiales et autres techniques tentant de créer une meilleure approximation de la manière dont les choses devraient ressembler. Cela peut nécessiter des millions, voire des milliards de calculs pour chaque image, mais avec les GPU modernes capables de traiter des téraflops de travail (des milliards de calculs par seconde), c'est un problème facile à résoudre.

Qu'est-ce que le lancer de rayons?

Le lancer de rayons est une approche différente, qui existe théoriquement depuis près de 50 ans, bien que ce soit plutôt une application pratique de 40 ans. Turner Whitted a écrit en 1979 un article intitulé “Un modèle d’éclairage amélioré pour l’écran ombré” (version PDF en ligne), qui expliquait comment calculer récursivement le tracé des rayons pour aboutir à une image impressionnante comprenant des ombres, des reflets, etc. (Ce n'est pas un hasard si Turner Whitted travaille maintenant pour la division de recherche de Nvidia.) Le problème est que cela nécessite des calculs encore plus complexes que la pixellisation.

Le lancer de rayons consiste à retracer le parcours d'un rayon (un faisceau de lumière) en arrière dans un monde en 3D. La plus simple implémentation tracerait un rayon par pixel. Déterminez quel polygone frappe en premier le rayon, puis calculez les sources de lumière qui pourraient atte
indre ce point sur le polygone (plus de rayons), et calculez les rayons supplémentaires en fonction des propriétés du polygone (est-ce une image hautement réfléchissante ou partiellement réfléchissante? matériau, est-ce une surface plane ou courbe, etc.).

Pour déterminer la quantité de lumière tombant sur un seul pixel, la formule de tracé des rayons doit savoir à quelle distance se trouve la lumière, à quel point elle est brillante et à l’angle de la surface réfléchissante par rapport à l’angle de la source lumineuse à quel point le rayon réfléchi devrait être chaud. Le processus est ensuite répété pour toute autre source lumineuse, y compris l'éclairage indirect provenant de la lumière rebondissant sur d'autres objets de la scène. Les calculs doivent être appliqués aux matériaux, déterminés par leur niveau de réflectivité diffuse ou spéculaire, ou les deux. Les surfaces transparentes ou semi-transparentes, telles que le verre ou l'eau, réfractent les rayons, en ajoutant des céphalées de rendu, et tout a nécessairement une limite de réflexion artificielle, car sans elles, les rayons peuvent être infinis.

Selon Nvidia, l'algorithme de traçage de rayons le plus couramment utilisé est BVH Traversal: Biering Volume Hierarchy Traversal. C'est un grand nom pour un processus complexe, mais l'idée est d'optimiser les calculs d'intersection rayon / triangle. Prenez une scène avec des centaines d'objets, chacun avec potentiellement des millions de polygones, puis essayez de déterminer quels polygones un rayon intersecte. C'est un problème de recherche qui prendrait beaucoup de temps pour forcer. BVH accélère cela en créant un arbre d'objets, où chaque objet est entouré d'une boîte.

Image 1 sur 6

Image 2 sur 6

Image 3 sur 6

Image 4 sur 6

Image 5 sur 6

Image 6 sur 6

Nvidia a présenté un exemple de rayon croisant un modèle de lapin. Au niveau supérieur, un BVH (boîte) contient l'intégralité du lapin, et un calcul détermine que le rayon coupe cette case. Si ce n'est pas le cas, il n'y aura plus de travail sur cette boîte / objet / BVH. Ensuite, l'algorithme BVH obtient une collection de plus petites cases pour l'objet intersecté – dans ce cas, il détermine que le rayon en question a atteint l'objet lapin dans la tête. Des traversées BVH supplémentaires se produisent jusqu'à ce que l'algorithme obtienne une courte liste de polygones réels, qu'il peut ensuite vérifier pour déterminer comment le rayon interagit avec le lapin.

Tout cela peut être fait en utilisant un logiciel fonctionnant sur un processeur ou un processeur graphique, mais il peut prendre des milliers d’espaces d’instructions par rayon. Les noyaux RT sont présentés sous la forme d'une boîte noire qui prend la structure BVH et un tableau, et passe en revue tout le travail sale, en créant le résultat souhaité. Il est important de noter qu'il s'agit d'une opération non déterministe, ce qui signifie qu'il n'est pas possi
ble de dire précisément combien de rayons les cœurs de RT peuvent calculer par seconde, cela dépend de la structure de BVH. Le chiffre Giga Rays par seconde dans ce sens est plus une approximation, mais en pratique, les cœurs RT peuvent exécuter l’algorithme BVH environ dix fois plus rapidement que les cœurs CUDA.

L'utilisation d'un seul rayon par pixel peut entraîner des dizaines, voire des centaines de calculs de rayons, et de meilleurs résultats sont obtenus en commençant par plus de rayons, avec un agrégat où chaque rayon est utilisé pour déterminer une couleur finale pour le pixel. Combien de rayons par pixel sont «suffisants»? La meilleure réponse est que cela varie: si la première surface est complètement non réfléchissante, quelques rayons pourraient suffire. Si les rayons rebondissent entre des surfaces très réfléchissantes (p. Ex. Un effet de miroir), des centaines, voire des milliers de rayons peuvent être nécessaires.

Des entreprises comme Pixar – et en réalité, à peu près tous les grands films de nos jours – utilisent le traçage par rayons (ou traçage, qui est similaire, sauf qu'il a tendance à utiliser encore plus de rayons par pixel) pour générer des images informatiques très détaillées. Dans le cas de Pixar, un film de 90 minutes à 60 images par seconde nécessiterait 324 000 images, chaque image pouvant prendre des heures de calcul. Comment Nvidia espère-t-il le faire en temps réel sur un seul GPU? La réponse est que Nvidia n'envisage pas de le faire. Au moins pas à la résolution et à la qualité que vous pourriez voir dans un film hollywoodien.

Entrez le rendu hybride

Depuis plus de 20 ans, le matériel informatique graphique vise à accélérer la pixellisation et les concepteurs de jeux et les artistes sont très efficaces pour produire des résultats impressionnants. Mais certaines choses présentent encore des problèmes, comme un bon éclairage, des ombres et des reflets.

Les réflexions sur l'espace de l'écran utilisent les résultats de ce qui est visible à l'écran pour simuler de fausses réflexions, mais que se passe-t-il si vous regardez dans un miroir? Vous pouvez faire une deuxième projection du miroir dans le monde du jeu, mais il y a des limites au nombre de projections que vous pouvez faire dans une seule image (chaque projection nécessitant beaucoup de travail de pixellisation sous un nouvel angle). Les cartes d'ombres sont couramment utilisées dans les jeux, mais elles requièrent beaucoup de mémoire pour obtenir des résultats de haute qualité, ainsi que du temps passé par les artistes pour placer les lumières juste au lieu de créer l'effet souhaité.

Image 1 sur 3

Image 2 sur 3

Image 3 sur 3

Un autre problème d'éclairage est l'occlusion ambiante, les ombres qui se forment dans les zones d'intersection des murs. SSAO (occlusion ambiante de l'écran) est une approximation qui aide, mais encore une fois, c'est assez imprécis. Le groupe SEED d'EA a créé la démo de Pica Pica en utilisant DXR (DirectX Ray Tracing), et à un moment donné, il montre la différence entre SSAO et RTAO (occlusion ambiante par rayonnement). Ce n'est pas que SSAO a l'air mauvais, mais RTAO semble meilleur.

Le rendu hybride utilise les technologies de rasterisation traditionnelles pour rendre tous les polygones d'un cadre, puis combine le résultat avec des ombres, des réflexions et / ou des réfractions à l'aide de rayons. Le lancer de rayons finit par être moins complexe, permettant des cadrages plus élevés, bien qu'il y ait toujours un équilibre entre qualité et performance. Lancer plus de rayons pour une scène peut améliorer le résultat global au détriment des framerates, et vice versa.

Nvidia a demandé à plusieurs développeurs de jeux de montrer leurs efforts de lancer de rayons à la Gamescom, mais jusqu'à présent, tout est en progrès. Plus important encore, nous n’avons pas eu la possibilité de tester les performances ou d’ajuster les paramètres de quelque manière que ce soit. Et toutes les démonstrations se sont déroulées sur des cartes RTX 2080 Ti, qui peuvent faire> 10 Giga Rays par seconde (GR / s) – mais que se passe-t-il si vous avez seulement un RTX 2080 à 8 GR / s ou le RTX 2070 et 6 GR / s? Les jeux utilisant respectivement des effets de lancer de rayons s'exécutent respectivement à 20% et à 40% de moins, ou les jeux proposent des paramètres pouvant être ajustés pour trouver un équilibre entre qualité et performance, comme pour tout autre paramètre graphique.

En prenant le 2080 Ti et ses 10 GR / s comme référence, si nous réalisons un jeu en 1080p, cela représente environ 2
millions de pixels, et 60fps signifie 120 millions de pixels. En faisant le calcul, un jeu pourrait faire 80 rayons par pixel à 1080p60, si le GPU ne fait rien d'autre – et à 4k60 il serait limité à 20 rayons par pixel. Mais les jeux ne font pas de tracés de rayons purs, car ils utilisent encore la pixellisation pour une grande partie de l'environnement. Cela nous amène à un dilemme intéressant: combien de rayons par image suffisent-ils?

L'algorithme de débruitage Optix de Nvidia à l'œuvre

Bruitage et IA à la rescousse

Voici où l'architecture de Turing de Nvidia devient vraiment intelligente. Comme si les cœurs RT et les cœurs CUDA améliorés ne suffisaient pas, Turing dispose de cœurs Tensor capables d'accélérer considérablement les calculs d'apprentissage automatique. Dans les charges de travail FP16, les cœurs Tensor du RTX 2080 Ti FE fonctionnent à 114 TFLOPS, contre seulement 14,2 TFLOPS de FP32 sur les cœurs CUDA. C'est essentiellement comme dix cartes GTX 1080 Ti en attente de chiffres.

Mais pourquoi les noyaux Tensor sont-ils importants pour le traçage des rayons? La réponse est que l’apprentissage artificiel et l’apprentissage automatique sont de plus en plus puissants et que de nombreux algorithmes ont été développés et formés sur des réseaux d’apprentissage approfondi pour améliorer les graphismes. Le DLSS (Deep Learning Super Sampling) de Nvidia permet aux jeux de rendre des résolutions plus faibles sans AA, puis les cœurs Tensor peuvent exécuter le réseau formé pour transformer chaque image en une image anti-aliasée de résolution supérieure. Le débruitage peut être un outil tout aussi puissant pour le traçage des rayons.

Pixar a été à l'avant-garde de l'utilisation de graphiques générés par ordinateur pour créer des films, et ses premiers efforts reposaient largement sur des modèles de rendu hybrides – des modèles plus complexes que ceux que RTX / DXR prévoit d'exécuter. chemin tracé. La raison: cela prenait simplement trop de temps. C'est là que le débruitage entre en jeu.

De nombreuses applications de traçage de chemins peuvent fournir un niveau de détail grossier très rapide – une vue rapide et sale de la sortie rendue – puis, une fois que la fenêtre cesse de se déplacer, des passes supplémentaires peuvent améliorer la prévisualisation. Les premiers rendus grossiers sont «bruyants» et Pixar et d’autres sociétés ont cherché des moyens de débrouiller ces scènes.

Pixar a fait des recherches sur l'utilisation d'un réseau neuronal convolutionnel d'apprentissage profond (CNN), l'entraînant avec des millions d'images provenant de Finding Dory. Une fois formé, Pixar a pu utiliser le même réseau pour débrancher d'autres scènes. Le débruitage a permis à Pixar d'atteindre un ordre de grandeur accéléré en temps de rendu. Cela a permis à Pixar de faire un rendu entièrement tracé pour ses derniers films, sans avoir besoin de plusieurs années de temps de rendu, et Cars 3 et Coco ont largement utilisé le débruitage.

Si les algorithmes sont assez bons pour les derniers films de Pixar, pourquoi ne pas les utiliser dans les jeux? Et plus important encore, qu'en est-il de l'utilisation d'algorithmes de débruitage uniquement sur l'éclairage, les ombres et les réflexions dans un modèle de rendu hybride? Si vous examinez la qualité des ombres générées à l'aide des techniques de cartographie shadow actuelles, les textures de résolution inférieure peuvent sembler extrêmement encombrantes, mais il est souvent nécessaire d'atteindre des performances acceptables sur des GPU plus lents.

Prenez ces mêmes concepts et appliquez-les au traçage de rayons RTX. Toutes les démonstrations que nous avons vues jusqu'à présent ont utilisé une forme de débruitage, mais comme pour tous les algorithmes d'apprentissage en profondeur, un entraînement supplémentaire du modèle peut améliorer les résultats. Nous ne savons pas si Battlefield V, Metro Exodus et Shadow of the Tomb Raider lancent le maximum de rayons possible en ce moment, mais des ajustements supplémentaires sont certainement possibles.

Imaginez-vous, au lieu d'utiliser les 10 GR / s de la GeForce RTX 2080 Ti, d'utiliser seulement 1 à 2 GR / s et de laisser le débruitage faire la différence. Il y aurait une perte de qualité, mais cela devrait rendre viable la mise en œuvre d'effets de traçage de rayons en temps réel, même sur du matériel de bas niveau.

Si vous regardez l'image ci-dessus des gobelets, le résultat approximatif sur la droite a toujours l'air assez bloqué, mais si cela n'affectait que la qualité des ombres, des réflexions et des réfractions, combien de détails et de précision avons-nous vraiment besoin? Et puisque les cœurs RT de Turing sont apparemment capables de fonctionner en parallèle avec les cœurs CUDA, il n'est pas déraisonnable de penser que nous pouvons obtenir une nette amélioration de la fidélité visuelle sans tuer les framerates.

Bienvenue dans l'avenir du graphisme

Les grands noms du rendu ont sauté dans le train des rayons, dont Epic et son moteur Unreal, Unity 3D et Frostbite d’EA. Microsoft a également créé une toute nouvelle API DirectX Ray Tracing. Le traçage des rayons, sous une forme ou une autre, a toujours ét
é l’objectif recherché de l’infographie en temps réel. Les GPU de la série RTX 20 sont la première implémentation de l’accélération de traçage de rayons dans le matériel grand public, et les futurs GPU Nvidia pourraient facilement doubler ou quadrupler le nombre de cœurs de RT par SM. Avec des décomptes de plus en plus importants, les performances actuelles de 10 GR / s peuvent sembler incroyablement pathétiques. Mais regardez d'où proviennent les GPU au cours de la dernière décennie.

Les premiers GPU Nvidia dotés de cœurs CUDA étaient les cartes 8800 GTX, qui ont dépassé les 128 cœurs CUDA à la fin de 2006. 12 ans plus tard, nous avons des processeurs CUDA jusqu’à 40 fois plus nombreux (Titan V) le GTX 1070 a toujours 15 fois plus de cœurs, plus des vitesses d'horloge plus élevées. La traçabilité totale des rayons en temps réel pour chaque pixel pourrait ne pas être possible sur le RTX 2080 Ti aujourd'hui, mais nous avons clairement entrepris ce voyage. Si cela prend encore cinq ou dix ans avant que cela ne devienne pratique sur le matériel traditionnel, je peux attendre. Et d'ici là, nous nous pencherons sur la prochaine étape en infographie.

Tags

Leave a Reply

Your e-mail address will not be published. Required fields are marked *

Close
Close