Toutes les quelques années, il semble qu’il y ait une nouvelle technologie étonnante avec la promesse de rendre les jeux toujours plus réalistes. Au fil des décennies, nous avons eu des shaders, la tessellation, la cartographie des ombres, le lancer de rayons – et maintenant il y a un petit nouveau sur le bloc : le traçage de chemin.
Donc, si vous recherchez des informations sur ce dernier développement de la technologie graphique, vous êtes au bon endroit. Plongeons dans le monde du rendu et suivons un chemin de lumière et d’apprentissage.
Qu’est-ce que le traçage de chemin ?
La réponse courte et douce à cette question est … “le traçage de chemin n’est qu’un traçage de rayons”. Les équations pour modéliser le comportement de la lumière sont les mêmes, l’utilisation de structures de données pour accélérer la recherche d’interactions rayon-triangle est également la même, et les GPU modernes utilisent les mêmes unités pour accélérer le processus. C’est aussi très gourmand en calculs.
Mais attendez. Si c’est vraiment la même chose, pourquoi le path tracing a-t-il un nom différent, et quel avantage offre-t-il aux programmeurs de jeux ? Le traçage de chemin diffère du traçage de rayons en ce qu’au lieu de suivre de nombreux rayons, tout au long d’une scène entière, l’algorithme ne trace que le chemin le plus probable pour la lumière.
Le traçage de chemin diffère du traçage de rayons en ce qu’au lieu de suivre de nombreux rayons, tout au long d’une scène entière, l’algorithme ne trace que le chemin le plus probable pour la lumière.
Nous avons exploré le fonctionnement des rayons (voir : A Deeper Dive : Rasterization and Ray Tracing), mais un bref aperçu du processus est nécessaire ici. Le cadre démarre normalement : la carte graphique restitue toute la géométrie – tous les triangles qui composent la scène – et l’enregistre en mémoire.
Après un peu de traitement supplémentaire, pour organiser les informations de manière à ce que la géométrie puisse être recherchée plus rapidement, le lancer de rayons entre en jeu. Pour chaque pixel qui comprend le cadre, un seul rayon est projeté depuis la caméra, vers le scène.
Eh bien, pas au sens littéral – une équation vectorielle est générée, avec des paramètres définis en fonction de l’emplacement de la caméra et du pixel. Chaque rayon est ensuite vérifié par rapport à la géométrie de la scène et c’est la première partie de la complexité du lancer de rayons. Heureusement, les derniers GPU d’AMD et de Nvidia sont livrés avec des unités matérielles dédiées pour accélérer ce processus.
Si un rayon et un objet interagissent, un autre calcul est effectué pour déterminer exactement quel triangle du modèle est impliqué, et la couleur du triangle modifiera effectivement la couleur du pixel.
Mais la lumière frappe rarement un objet et cette lumière est complètement absorbée. En réalité, il y a beaucoup de réflexion et de réfraction, donc si vous voulez le rendu le plus réaliste possible, de nouvelles équations vectorielles sont générées, une pour les rayons réfléchis et réfractés.
À leur tour, ces rayons sont tracés jusqu’à ce qu’ils touchent également un objet, et la séquence se poursuit jusqu’à ce qu’une chaîne de rayons soit finalement renvoyée jusqu’à une source de lumière dans la scène. À partir du rayon primaire d’origine, le nombre total de rayons tracés sur la scène augmente de façon exponentielle à chaque rebond.
Rincez et répétez sur tous les autres pixels du cadre, et le résultat final est une scène éclairée de manière réaliste… bien qu’un peu de traitement supplémentaire soit encore nécessaire pour ranger l’image finale.
Mais même avec les GPU et les CPU les plus puissants, une image entièrement tracée par rayons prend énormément de temps à créer – beaucoup, beaucoup plus longtemps qu’une image traditionnellement rendue, en utilisant des shaders de calcul et de pixel.
Maintenant, c’est là que le path tracing s’intègre dans l’image, si l’on pardonne le jeu de mots.
Quand plus de travail signifie moins de travail
Le concept initial de path tracing a été introduit par James Kajiya en 1986, alors qu’il était chercheur pour Caltech. Il a montré que le problème d’avoir un processeur s’arrêtant au sol, travaillant à travers un nombre toujours croissant de rayons, pouvait être résolu grâce à l’utilisation d’un échantillonnage statistique de la scène (en particulier, les algorithmes de Monte Carlo).
Le lancer de rayons traditionnel consiste à calculer le chemin exact de réflexion ou de réfraction de chaque rayon et à les retracer jusqu’à une ou plusieurs sources lumineuses. Avec le traçage de chemin, plusieurs rayons sont générés pour chaque pixel, mais ils rebondissent dans une direction aléatoire. Cela se répète lorsqu’un rayon frappe un objet et continue de se produire jusqu’à ce qu’une source de lumière soit atteinte ou qu’une limite de rebond prédéfinie soit atteinte.
Cela en soi ne semble probablement pas être un énorme changement dans la quantité de calcul requise, alors où est la partie magique ?
Tous les rayons ne seront pas utilisés pour créer la couleur finale du pixel dans le cadre. Seul un certain nombre d’entre eux seront échantillonnés et l’algorithme utilise des résultats dans un chemin presque idéal de rebonds de lumière, de la caméra à la source lumineuse. On peut alors mettre à l’échelle le nombre d’échantillons pour chaque pixel, pour ajuster la précision de l’image finale.
Malgré une pile supplémentaire de mathématiques et de codage, le résultat final est qu’il y a beaucoup moins de rayons à traiter, même si le traçage de chemin déclenche généralement des dizaines de rayons par pixel. Le suivi des rayons et la réalisation de leurs calculs d’interaction sont la raison de l’impact sur les performances, par rapport au rendu normal, donc utiliser moins de rayons pour colorer un pixel est clairement une bonne chose.
Mais voici la partie vraiment astucieuse : normalement, moins de rayons se traduiraient par un éclairage moins réaliste, mais comme la majeure partie de la couleur des pixels du cadre n’est affectée que par les rayons primaires, vider la plupart ou la totalité des rayons secondaires n’affecte pas les choses autant qu’on pourrait le penser.
Maintenant, si la scène contient beaucoup de surfaces qui réfléchissent et réfractent la lumière, comme le verre ou l’eau, alors ces rayons secondaires deviennent importants. Pour contourner ce problème, soit l’algorithme est modifié pour tenir compte de la distribution des types de rayons que l’on devrait obtenir dans une scène, soit ces surfaces spécifiques sont gérées dans leur propre passe de rendu “entièrement tracé de rayons”.
Un bon développeur utilisera toute la gamme d’outils de rendu à sa disposition : rastérisation avec shaders, traçage de chemin et traçage de rayons complet. C’est beaucoup plus de travail pour comprendre tout cela, mais c’est finalement moins de travail pour le matériel à gérer.
Pourquoi le path tracing fait-il la une des journaux en ce moment ?
Plusieurs fois au cours des dernières années, nous avons vu des gros titres sur les mods ajoutant le traçage de rayons aux anciens classiques, mais la plupart d’entre eux se réfèrent en fait au traçage de chemin. Nous l’avons entendu en 2019 avec un mod expérimental pour Crysis et Quake 2, ou plus récemment avec le mod non officiel de traçage de rayons Half-Life et le mod Classic Doom. Tous les tracés de chemin.
Il y avait aussi le tweet de Dihara Wijetunga, ingénieur graphique R&D senior chez AMD, qui a annoncé son projet de mettre à jour le jeu original Return to Castle Wolfenstein avec un moteur de rendu tracé.
Échantillon 1
Après, en utilisant le path tracing…
Échantillon 2
Utilisation du traçage de chemin…
Échantillon 3
Comme indiqué ci-dessus, en 2019, Nvidia a annoncé un remasterisateur Quake II doté d’un moteur de rendu par lancer de rayons pour aider à promouvoir la technologie RTX. C’était initialement le travail d’une seule personne, Christoph Schied, qui a créé le remaster (techniquement connu sous le nom de Q2VKPT) dans le cadre d’un projet de recherche. Grâce aux contributions d’autres experts en technologie graphique, Quake II RTX est né et a été le premier jeu de renom à utiliser le path tracing pour tout son éclairage.
Les modèles et les textures d’origine sont toujours présents et le seul aspect qui a été modifié était la façon dont les surfaces étaient éclairées et les ombres générées. Les images statiques ne sont pas le meilleur moyen de démontrer l’efficacité du nouveau modèle d’éclairage, mais vous pouvez vous procurer une copie gratuite ou regarder cette vidéo…
Bandying refroidit des phrases telles que l’échantillonnage stochastique à importance multiple et les algorithmes de réduction de la variance, le projet a mis en évidence deux choses : premièrement, le traçage de chemin a l’air vraiment cool, et deuxièmement, il est toujours très difficile pour les développeurs et le matériel. Si vous voulez voir à quel point les calculs sont complexes, lisez le chapitre 47 de Ray Tracing Gems II.
Mais là où les goûts de Quake II RTX montrent ce qui peut être réalisé en traçant tout, les goûts de Control et Cyberpunk 2077 démontrent que des graphismes incroyables sont réalisables en mélangeant toutes les méthodes d’éclairage et d’ombrage – la rastérisation et les shaders dominent toujours le perchoir, avec ray traçage pour les reflets et les ombres.
Nous sommes donc encore loin avant de voir tous les jeux rendus en utilisant uniquement le path tracing.
Sur le chemin d’un avenir meilleur
Malgré sa relative nouveauté dans le monde du rendu en temps réel, le path tracing est définitivement là pour rester. Nous avons déjà vu les résultats dans un seul jeu et le path tracing est déjà largement utilisé dans les rendus hors ligne, tels que Blender, ainsi que dans l’industrie cinématographique, avec Autodesk Arnold et RenderMan de Pixar.
Il n’y a aucun signe de GPU approchant une quelconque limite à leur puissance de calcul maximale pour l’instant, alors même si le ray tracing, traditionnel ou path tracing, est toujours très exigeant, du matériel plus puissant arrivera sur le marché au fil des ans.
Tout cela signifie que les développeurs de futurs jeux PC vont certainement explorer toute technique de rendu qui produit des graphismes étonnants à des performances réalisables, et le traçage de chemin a le potentiel de faire exactement cela.
Il y a aussi les consoles actuelles à considérer. La Xbox Series X et la PlayStation 5 offrent toutes deux une prise en charge du traçage de rayons «traditionnel», mais étant donné que leurs GPU seront relativement obsolètes dans quelques années à peine, les développeurs chercheront à utiliser tous les raccourcis possibles pour presser la dernière lie de éteindre ces machines, avant de passer à la prochaine génération de consoles.
Donc voilà, le path tracing, le cousin rapide du ray tracing. Il a l’air presque aussi bien, fonctionne beaucoup plus rapidement. Compte tenu des progrès continus de la technologie et des performances graphiques des ordinateurs personnels et des consoles, il ne faudra pas longtemps avant que nous verrons également des graphiques informatiques des derniers blockbusters dans nos jeux préférés.