Bienvenue dans le traçage de rayons en temps réel, le prochain grand pas en avant dans le traitement graphique.
Qu’est-ce que le lancer de rayons? Cette question est devenue beaucoup plus pertinente pour les joueurs sur PC, comme les nouveaux Nvidia GeForce RTX 2080, GeForce RTX 2080 Ti et GeForce RTX 2070 ajoutent du matériel dédié pour accélérer le lancer de rayons. Toutes ces cartes graphiques utilisent la nouvelle architecture Turing de Nvidia, qui promet d’être le saut le plus révolutionnaire en matière de GPU que nous ayons vu depuis longtemps – peut-être jamais. S’agira-t-il des nouvelles meilleures cartes graphiques lorsqu’elles seront disponibles, ou leur prix est-il trop élevé?
C’est une question difficile à répondre, car même si nous avons examiné les versions GeForce RTX 2080 Founders Edition et GeForce RTX 2080 Ti Founders Edition, nous attendons toujours les jeux qui utilisent les nouvelles fonctionnalités matérielles. Nvidia a fourni des informations détaillées sur toutes les technologies entrant dans les cartes et quelques démos de la technologie, mais leur utilisation réelle dans les jeux variera. En attendant que les jeux de lancer de rayons arrivent, nous avons créé cette vue d’ensemble du traçage de rayons, de la pixellisation, des graphiques hybrides. Les cartes GeForce RTX de Nvidia vont maintenant changer ce que nous pouvons attendre de nos GPU.
Une brève introduction sur l’infographie et la pixellisation
Créer une simulation virtuelle du monde qui vous entoure, qui se présente et se comporte correctement est une tâche incroyablement complexe – si complexe en fait que nous n’avons jamais vraiment essayé de le faire. Oubliez pour un moment des choses comme la gravité et la physique et pensez à la façon dont nous voyons le monde. Un nombre effectivement infini de photons (faisceaux de lumière) se glisse autour, se réfléchissant sur les surfaces et traversant des objets, le tout basé sur les propriétés moléculaires de chaque objet. Essayer de simuler «l’infini» avec une ressource finie telle que la puissance de calcul d’un ordinateur est une recette pour un désastre. Nous avons besoin d’approximations intelligentes, et c’est ainsi que fonctionnent les graphiques modernes.
Nous appelons ce processus rastérisation, et au lieu de regarder des objets, des surfaces et des photons infinis, il commence par des polygones. Les premières tentatives n’avaient 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 s’accéléraient. 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’un viewport (l’écran) est défini, puis un rendu 2D du monde 3D est créé. La conversion d’un polygone en une image 2D sur un écran implique de déterminer la partie de l’affichage que l’objet recouvre. De près, un seul triangle peut recouvrir la totalité de l’écran, tandis que s’il est plus éloigné et sous un angle, il peut ne couvrir que quelques pixels. Une fois que les pixels sont déterminés, des éléments comme les textures et l’éclairage doivent également être appliqués.
Faire cela pour chaque polygone pour chaque image finit par être inutile, car de nombreux polygones pourraient ne pas être visibles. Diverses techniques, telles que le Z-buffer (tampon secondaire qui garde la trace de la profondeur de chaque pixel) et le Z-culling (suppression des objets masqués) contribuent à accélérer le processus. À la fin, un moteur de jeu utilisera des millions de polygones potentiellement visibles, les triera, puis tentera de les traiter le plus efficacement possible.
Ce n’est pas une mince affaire. Au cours des deux dernières décennies, nous sommes passés de polygones primitifs dotés de sources de lumière «factices» (par exemple, le Quake d’origine) à des environnements plus complexes comportant des cartes d’ombres, des ombres douces, une occlusion ambiante, une réflexions dans l’espace et d’autres techniques visant à créer une meilleure approximation de la situation. 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), le problème est résolu.
Qu’est-ce que le lancer de rayons?
Le lancer de rayons est une approche différente, théoriquement présente depuis près de 50 ans maintenant, bien que cela s’apparente davantage à 40 ans d’application pratique. Turner Whitted a écrit en 1979 un article intitulé “Un modèle d’éclairage amélioré pour les écrans ombrés” (version PDF en ligne), qui expliquait comment calculer récursivement le lancer de rayons pour obtenir 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 traçage de rayons consiste à retracer la trajectoire d’un rayon (un faisceau de lumière) dans un monde en 3D. La mise en œuvre la plus simple trace un rayon par pixel. Déterminez le polygone que frappe le rayon en premier, puis calculez les sources de lumière pouvant atteindre cet endroit sur le polygone (plus de rayons), puis calculez les rayons supplémentaires en fonction des propriétés du polygone (est-il très réfléchissant ou partiellement réfléchissant?) matériel, est-ce une surface plate ou courbe, etc.).
Pour déterminer la quantité de lumière qui tombe sur un seul pixel, la formule de traçage de rayons doit connaître la distance, la luminosité et l’angle de la surface réfléchissante par rapport à l’angle de la source de lumière, avant de calculer. quelle devrait être la température du rayon réfléchi. Le processus est ensuite répété pour toute autre source de lumière, y compris l’éclairage indirect provenant d’une lumière qui rebondit 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, ajoutent des maux de tête plus importants, et tout a nécessairement une limite de réflexion artificielle, car sans cela, les rayons pourraient être tracés à l’infini.
Selon Nvidia, l’algorithme de traçage de rayons le plus couramment utilisé est BVH Traversal: Traversal de hiérarchie de volume limite. C’est un gros 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 les polygones qu’un rayon intersecte. Il s’agit d’un problème de recherche qui prendrait très longtemps à la force brute. BVH accélère cette opération en créant un arbre d’objets, où chaque objet est entouré par une boîte.
Nvidia a présenté un exemple de rayon croisant un modèle de lapin. Au niveau supérieur, un BVH (boîte) contient le lapin entier et un calcul détermine que le rayon coupe cette boîte. Si ce n’était pas le cas, aucun travail supplémentaire ne serait nécessaire sur cette boîte / objet / BVH. Ensuite, l’algorithme BVH obtient une collection de boîtes plus petites pour l’objet intersecté. Dans ce cas, il détermine que le rayon en question a atteint l’objet de lapin dans la tête. Des passages supplémentaires de BVH se produisent jusqu’à ce que l’algorithme obtienne finalement une courte liste de polygones réels, qu’il peut ensuite vérifier pour déterminer la manière dont le rayon interagit avec le lapin.
Tout cela peut être fait en utilisant un logiciel fonctionnant sur une CPU ou un GPU, mais cela peut prendre des milliers de slots d’instructions par rayon. Les cœurs RT sont présentés sous la forme d’une boîte noire reprenant la structure et le tableau de BVH, et passant en revue tout le travail sale en crachant 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 possible d’indiquer avec précision le nombre de rayons que les cœurs RT peuvent calculer par seconde – cela dépend de la structure de BVH. Le chiffre des rayons Giga par seconde en ce sens est plus approximatif, 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 donner lieu à des dizaines, voire des centaines de calculs de rayons. De meilleurs résultats sont obtenus en commençant par plus de rayons, avec un total des points où chaque rayon finit par être utilisé pour déterminer la couleur finale du pixel. Combien de rayons par pixel sont «suffisants»? La meilleure réponse est que cela varie – si la première surface est totalement non réfléchissante, quelques rayons pourraient suffire. Si les rayons rebondissent entre des surfaces hautement réfléchissantes (par exemple, un effet de salle des miroirs), des centaines voire des milliers de rayons peuvent être nécessaires.
Des sociétés comme Pixar – et en réalité presque tous les grands films de nos jours – utilisent le traçage de rayons (ou traçage de tracé, qui est similaire sauf qu’il utilise encore plus de rayons par pixel) pour générer des images informatiques extrêmement 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 temps 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’a pas l’intention de le faire. Du moins pas à la résolution et à la qualité que vous pourriez voir dans un film hollywoodien.
Entrez le rendu hybride
Le matériel d’infographie s’intéresse depuis plus de 20 ans à la pixellisation plus rapide, et les concepteurs de jeux et les artistes produisent très bien d’impressionnants résultats. Mais certaines choses posent encore des problèmes, comme un bon éclairage, des ombres et des reflets.
Les réflexions dans l’espace de l’écran utilisent les résultats de ce qui est visible à l’écran pour simuler des 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 le nombre de projections que vous pouvez faire dans une seule image est limité (chaque projection nécessite beaucoup de travail de rastérisation sous un nouvel angle). Les cartes fantômes sont couramment utilisées dans les jeux, mais elles nécessitent beaucoup de mémoire pour obtenir des résultats de haute qualité. De plus, les artistes passent du temps à essayer de placer les lumières à l’endroit idéal pour créer l’effet souhaité. Elles ne sont pas encore tout à fait exactes.