Je ne suis pas un grand fan de technologie et la première fois que j'en ai entendu parler, c'était dans les discussions sur Cyberpunk 2077. Apparemment, seuls les GPU haut de gamme peuvent le supporter correctement. Qu'est-ce que le ray tracing exactement ? En quoi cela va-t-il changer les graphismes d'un jeu ? Comme mon GPU ne le prend pas en charge, je me demande si je vais manquer beaucoup de choses.
Réponses
Trop de publicités?Dans un rendu normal, vous avez des sources de lumière, des surfaces solides qui sont éclairées et la lumière ambiante. La luminosité d'une surface est calculée en fonction de la distance et de l'angle par rapport à la source lumineuse, une teinte colorée de la lumière est éventuellement ajoutée, la luminosité totale est ajustée par le niveau de lumière ambiante (omniprésente), puis d'autres effets sont peut-être ajoutés, ou les effets d'autres sources lumineuses sont calculés s'ils sont présents, mais à ce stade, l'histoire de l'interaction entre cette source lumineuse et cette surface se termine.
Dans le raytracing, la lumière ne s'arrête pas à l'éclairage d'une surface. Elle peut se réfléchir. Si la surface est brillante, la lumière réfléchie peut éclairer une autre surface ; ou si la "propriété du matériau" indique que la surface est mate, la lumière se dissipe et agit un peu comme une lumière ambiante dont le niveau diminue rapidement dans les environs. Ou si la surface est partiellement transparente, le faisceau peut continuer à acquérir les propriétés du "matériau", changer de couleur, perdre de l'intensité, devenir partiellement diffus, etc. Il peut même se réfracter en arc-en-ciel et se courber sur une lentille. Au final, la lumière qui finit par être "rayonnée" n'a aucun impact, seule la lumière qui atteint la "caméra" est prise en compte.
Il en résulte une scène beaucoup plus réaliste et souvent vibrante.
La technologie est utilisée depuis très, très longtemps, mais elle a toujours été déléguée au CPU, et le rendu d'une seule image fixe à l'aide du raytracing prenait parfois plusieurs jours. Le fait que les cartes graphiques soient devenues suffisamment performantes pour effectuer ce type de rendu en temps réel, en rendant les images d'animation du jeu au fur et à mesure qu'elles se produisent, est une nouveauté.
Générer une image comme celle qui est jointe ci-dessous, en 1989, prendrait quelques jours. Actuellement, avec une bonne carte graphique, cela prend moins de 1/60e de seconde.
Traditionnellement, les jeux sur ordinateur utilisent une technique appelée tramage . En rastérisation, les objets sont décrits comme des mailles, composées de polygones qui sont soit des quads (4 sommets) soit des tris (3 sommets). Aujourd'hui, il s'agit presque exclusivement de tris. Vous pouvez y joindre des informations supplémentaires - quelle texture utiliser, quelle couleur utiliser, quelle est la normale, etc.
Les matrices de modèle, de vue et de projection sont trois matrices distinctes. Le modèle passe de l'espace de coordonnées locales d'un objet à l'espace mondial, la vue de l'espace mondial à l'espace de la caméra, la projection de la caméra à l'écran.
Si vous composez ces trois éléments, vous pouvez utiliser le résultat unique pour passer de l'espace objet à l'espace écran, ce qui vous permet de déterminer ce que vous devez transmettre à l'étape suivante d'un pipeline programmable à partir des positions des sommets entrants.
(Source : <a href="https://stackoverflow.com/questions/5550620/the-purpose-of-model-view-projection-matrix">L'objectif de la matrice de projection de la vue du modèle </a>)
Il s'agit d'une très modèle simple Cependant, vous devez faire attention à toutes sortes de choses. Par exemple, vous devez d'une manière ou d'une autre trier les polygones, puis les rendre dos à dos. En effet, vous transformez simplement les polygones et le fait de rendre d'abord un polygone proche, puis un polygone éloigné, risque d'écraser le polygone le plus proche. Vous n'avez pas d'ombres. Si vous voulez des ombres, vous devez d'abord effectuer le rendu d'une carte d'ombre. Il n'y a pas de réflexion, pas de réfraction, et la transparence est difficile à obtenir. Il n'y a pas d'occlusion ambiante. Toutes ces choses sont des astuces coûteuses qui sont rafistolées sur ce modèle et ne sont que de la poudre aux yeux pour obtenir des résultats réalistes.
Jusqu'à récemment, cette technique était la seule assez rapide pour convertir une scène 3D en une image 2D pour l'affichage dans jeux pour ordinateurs personnels qui ont besoin d'au moins 30 images par seconde pour ne pas sembler bégayer.
Traçage de rayon par contre, dans sa forme originale, est extrêmement simple (et par conséquent, remonte au 16ème siècle et a été décrit pour la première fois pour les ordinateurs en 1969 par Arthur Appel). Vous tirez un rayon à travers chaque pixel de votre écran. Et vous enregistrez la collision la plus proche du rayon avec un polygone. Puis vous colorez le pixel en fonction de la couleur que vous avez trouvée sur ce polygone. Cette couleur peut provenir d'un shader, par exemple d'une texture, ou d'une couleur.
Réflexion est conceptuellement extrêmement simple . Votre rayon a touché une surface réfléchissante ? Eh bien, il suffit de tirer un nouveau rayon à partir du point de réflexion. Comme l'angle d'incidence est le même à l'entrée et à la sortie, c'est trivial.
Réfraction , ce qui est incroyablement difficile avec la rastérisation est conceptuellement extrêmement simple avec le ray tracing. - Il suffit d'émettre un nouveau rayon, pivoté par l'angle de réfraction du matériau, ou plusieurs rayons pour la diffusion. De nombreux concepts physiques sont très, très faciles à décrire avec le traçage de rayons.
Ombres sont triviales. Si votre rayon frappe un polygone, il suffit de tirer des rayons vers chaque source de lumière. Si une source de lumière est visible, la zone est éclairée, sinon elle est sombre.
Ce site simplicité conceptuelle Mais cela a un coût, celui des performances. Le traçage de rayon est une approche de force brute pour simuler les rayons lumineux d'une manière physique, et recréer le comportement physique de la lumière, ainsi que les lois de conservation, en particulier la conservation de l'énergie, est beaucoup plus facile avec le traçage de rayon qu'avec la rastérisation.
Cela signifie des images physiquement exactes sont beaucoup plus faciles à réaliser avec le ray tracing. Cependant, cela a un coût coût énorme :
Vous tirez simplement des rayons. Beaucoup de rayons. Et chaque fois que la lumière se réfléchit, se réfracte, se disperse, rebondit ou autre, vous lancez à nouveau de nombreux rayons. Cela coûte une énorme puissance de calcul et n'était pas à la portée du matériel informatique universel par le passé.
Traçage du chemin est une technique qui a révolutionné le ray tracing, et la plupart des ray tracing actuels utilisent en fait le path tracing. Dans le traçage de trajectoire, de multiples rayons similaires sont combinés en paquets qui sont évalués en même temps. Le traçage des chemins, combiné à traçage de rayons bidirectionnel (introduit en 1994), où les rayons sont projetés à travers la scène à partir de la source lumineuse, a permis d'accélérer considérablement le traçage de rayons.
De nos jours, on tire simultanément des rayons (ou des faisceaux de rayons) de la caméra et des sources lumineuses, ce qui réduit la quantité de rayons tirés et permet un traçage plus guidé des trajectoires.
La mise en œuvre d'un simple traceur de rayons avec réflexion, réfraction, diffusion et ombres est en fait assez simple, elle peut être réalisée en un week-end (je l'ai fait). Ne vous attendez pas à ce qu'il ait des performances raisonnables, cependant. Implémenter la même chose à partir de zéro en tant que technique de tramage (déployer votre propre OpenGL) est beaucoup plus difficile.
Autres lectures :
La méthode actuellement prédominante pour le rendu des graphiques 3D s'appelle la rastérisation. Il s'agit d'une méthode de rendu 3D relativement imprécise, mais extrêmement rapide par rapport à toutes les autres méthodes de rendu 3D. C'est cette vitesse qui a permis aux graphismes 3D d'arriver sur les PC grand public au moment où ils sont arrivés, compte tenu des capacités (ou du manque de capacités) du matériel de l'époque.
Mais l'un des inconvénients de cette vitesse est que la rastérisation est plutôt stupide. Elle n'a aucun concept de choses comme les ombres ou les reflets, de sorte qu'une simulation du comportement de ces éléments doit être programmée manuellement dans un moteur de tramage. Et selon la façon dont elles sont programmées, ces simulations peuvent échouer - c'est pourquoi vous voyez parfois des artefacts comme des lumières qui brillent à travers les murs dans les jeux.
En fait, la rastérisation d'aujourd'hui est un ensemble de bidouillages, construits sur des bidouillages, construits sur encore plus de bidouillages, pour donner un aspect réaliste aux scènes 3D. Même à son meilleur, elle ne sera jamais parfaite.
Le traçage de rayons adopte une approche complètement différente en modélisant le comportement de la lumière par rapport aux objets dans un environnement 3D. Essentiellement, elle crée rayons de lumière provenant d'une ou plusieurs sources, alors traces le parcours de ces rayons dans l'environnement. Si les rayons touchent un objet sur leur chemin, ils peuvent modifier son apparence, être réfléchis ou...
Le principe du ray tracing consiste à modéliser le comportement de la lumière dans le monde réel, ce qui permet d'obtenir des ombres et des reflets beaucoup plus réalistes. L'inconvénient est qu'il est beaucoup plus coûteux en calculs, et donc beaucoup plus lent, que la rastérisation (plus il y a de rayons, plus la scène est belle, mais aussi plus il y a de rayons, plus le rendu est lent). En fait, le rendu est suffisamment lent pour que les graphiques à base de rayons soient injouables, même sur le matériel le plus rapide.
Jusqu'à récemment, il n'y avait donc aucune raison pour que les moteurs de jeux fournissent autre chose que la possibilité d'effectuer un rendu par rastérisation. Mais en 2018, NVIDIA a ajouté un matériel spécial (appelé RTX) à ses cartes graphiques de la série Turing, qui permet d'effectuer des calculs de ray-tracing bien plus rapidement qu'ils ne l'étaient jusqu'à présent. Cela a permis aux sociétés de jeux de commencer à intégrer des capacités de ray-tracing dans leurs moteurs de jeu, afin de tirer parti de ces caractéristiques matérielles pour générer des mondes de jeu qui semblent plus réalistes que ne le permettrait la rastérisation.
Étant donné que la rastérisation existe depuis si longtemps et que l'adoption généralisée du ray-tracing n'en est qu'à ses débuts, il est peu probable que vous voyiez une grande différence entre Cyberpunk Les graphiques rasterisés contre les graphiques ray-traced. Cependant, dans les années à venir, le ray tracing deviendra la nouvelle norme pour le rendu des graphiques 3D.
Techniquement, n'importe quelle carte graphique peut rendre des graphiques à base de rayons, mais la plupart ne disposent pas du matériel qui leur permettra de rendre ces graphiques à une fréquence d'images décente.
Avant que l'on ne me reproche cet aperçu non scientifique du fonctionnement de la rastérisation et du traçage de rayons, sachez que mes explications s'adressent à des non-spécialistes.
La réponse de SF est une très bonne réponse, qui mérite d'être acceptée. Il y a quelques questions qu'elle soulève auxquelles je peux répondre, puisque j'ai étudié le graphisme de pointe pour le plaisir dans les années 90. Je le ferais dans un commentaire si j'avais la réputation de le faire (je me suis inscrit dans ce but). Comme je ne peux pas, je vais approfondir un peu plus les graphiques 3D en général pour mieux illustrer pourquoi les choses sont différentes alors qu'elles semblent identiques en surface.
Quelques termes d'abord :
Je vais utiliser le terme ombrage pour faire référence à des graphiques non radiographiés. Je vais expliquer pourquoi dans un instant.
Interpolation consiste à prendre deux valeurs éloignées l'une de l'autre et à combler en douceur les écarts entre elles. Si la différence est de 10 sur 10 pas, vous comptez par 1s, mais si la différence est de 20 sur 10 pas, vous compteriez par 2s, et ainsi de suite.
Rastérisation est l'action de prendre une photo et de la représenter sur une grille. Tous les graphiques affichés sur les moniteurs modernes sont des graphiques matriciels. La raison pour laquelle nous utilisons le terme "matriciel" est que certains anciens écrans n'utilisaient pas de grille, mais dessinaient des lignes. Il s'agissait d'écrans graphiques vectoriels et, plutôt que des pixels, ils dessinaient des segments de ligne et des courbes comme unité de base du rendu.
A scène est une collection de choses à dessiner dans un monde en 3D.
Dans votre scène se trouvent objets qui sont constitués de surfaces . Chaque surface est un polygone plat.
Le site caméra est la perspective qui détermine ce qui est dessiné. Les gens aiment souvent penser qu'une caméra est un point unique, mais ce n'est pas le cas ; elle a la même forme que votre écran. (En pratique, la caméra est traitée comme un frustum, qui est une pyramide tronquée à base rectangulaire. Tout ce qui se trouve à l'intérieur est dessiné. C'est un raccourci pour des raisons pratiques, mais l'idéal serait une profondeur infinie).
Si vous divisez la caméra en une grille de la même taille que la résolution dont vous effectuez le rendu, chaque cellule est un pixel unique. Pour effectuer le rendu d'une scène, vous devez déterminer la couleur de chaque pixel. La différence entre l'ombrage et le traçage de rayons réside dans la manière dont nous déterminons cette couleur.
Aussi long que soit ce billet, il serait bien plus long si je m'attardais sur tous les détails mathématiques et l'histoire des optimisations. Je vais donc faire quelques économies, alors s'il vous plaît, si vous voulez utiliser ces connaissances pour des recherches ou pour gagner des arguments sur Internet, faites d'abord des recherches approfondies, car mon but est d'être suffisamment juste pour transmettre l'idée sans m'enliser dans les détails.
Les débuts du ray tracing reposaient sur l'idée que l'on trace un rayon à partir du point focal en passant par chaque pixel. Vous dessinez ensuite tout ce que ce pixel touche. Cette méthode présente toutefois un problème : la couleur de ce point dépend de la lumière qui le frappe. Pour un modèle simple, avec une seule source de lumière globale, c'est facile, mais la lumière rebondit sur toutes les surfaces. Les objets projettent des ombres, certaines surfaces réfléchissent la lumière, et pour déterminer la couleur de chaque pixel, il faut en fait déterminer l'emplacement de chacun des coins et créer une nouvelle caméra à cet endroit. Vous tracez d'autres rayons à travers la nouvelle caméra et faites la moyenne des couleurs pour déterminer la couleur de votre pixel. Mais chacun de ces rayons pose le même problème, et nous devons continuer à imbriquer cela à l'infini. En pratique, en réduisant la résolution de chaque surface successive, on finit par arriver à une fin, mais cela reste compliqué et très gourmand en processeur. Pas viable pour les jeux vidéo. Des raccourcis ont donc été créés pour obtenir des graphiques plus rapides. Ces raccourcis ont commencé avec "assez bien" et se sont améliorés au fil du temps. Les raccourcis étaient tellement plus utilisables que le ray tracing est tombé presque complètement en désuétude pendant plusieurs années.
Chaque rayon que nous traçons nous oblige à tester chaque surface pour voir où elle est touchée. Cela fait beaucoup de comparaisons si l'on considère qu'un écran 4k comporte environ 8 millions de pixels et qu'une scène normale comporte des dizaines de milliers de surfaces. Au lieu de cela, nous pouvons travailler à l'envers : nous pouvons dessiner chaque surface une fois et déterminer quel rayon la toucherait. Un petit peu de mathématiques rend ce calcul trivial. Avec les différentes méthodes d'ombrage, nous regardons chaque surface et la dessinons à l'écran. Chaque surface est un polygone, et nous pouvons déterminer où se trouve chaque sommet de ce polygone sur l'écran. En interpolant entre les emplacements des sommets, nous pouvons trouver tous les pixels qui correspondent à cette surface. Pour chaque pixel, nous pouvons déterminer où un rayon passant par ce pixel toucherait la surface.
Ce point de la surface a une couleur. Cela peut être parce que la surface entière est d'une seule couleur, parce que chaque sommet a une couleur et que vous avez déterminé la distance entre le point et chaque sommet et calculé une moyenne pondérée, ou parce que la surface est texturée et que vous avez recherché les coordonnées de la texture dans une image pour choisir une couleur. Cette couleur, quelle que soit la façon dont elle est déterminée, est la valeur diffuse, que l'on peut considérer comme "la couleur d'une chose". La deuxième information la plus importante pour déterminer la couleur d'un pixel est la quantité de lumière qui brille sur cette surface. Les shaders modernes deviennent vraiment compliqués dans cette partie, ajoutant de plus en plus de parties pour déterminer divers paramètres, mais l'idée de base est la même : vous avez compris ce que chaque pixel regarde, puis vous déterminez sa couleur.
En plus de la valeur diffuse, nous devons connaître la quantité de lumière qui frappe la surface. Pour cela, nous devons savoir de quel côté la surface est orientée. Nous appelons cela la vecteur normal et chaque modèle d'ombrage utilise une méthode différente pour identifier les vecteurs normaux et les transformer en valeurs d'éclairage.
Ombrage plat a un seul vecteur normal pour chaque surface. Nous utilisons l'angle entre la source de lumière et la normale de la surface pour déterminer la quantité de lumière à appliquer. Cela signifie que chaque lumière frappe chaque point de la surface de manière égale, de sorte que la surface entière a une luminosité uniforme. Ce n'est pas très joli, mais c'est rapide à calculer.
Ombrage Gouraud utilise un vecteur normal distinct pour chaque sommet d'une surface. Après avoir calculé l'éclairage de chaque sommet, vous pouvez rapidement interpoler la valeur de l'éclairage sur toute la surface. Cette technique était très utilisée à la fin des années 80 et au début des années 90 et donne généralement un aspect très lisse et brillant, comme un plastique poli.
Ombrage de Phong calcule le vecteur normal à chaque sommet comme dans l'ombrage gouraud, mais au lieu d'interpoler les couleurs, nous interpolons les vecteurs normaux et calculons l'éclairage pour chaque pixel individuellement. Une évolution de ce modèle est appelée cartographie normale L'ombrage phong, dans lequel une texture stocke le vecteur normal pour chaque point d'une surface, permet d'obtenir un niveau de détail très élevé. En général, on considère qu'il s'agit d'un cas particulier d'ombrage phong, car l'idée de normales par pixel est la caractéristique déterminante.
Tout cela constitue un cours accéléré sur l'histoire des graphiques 3D. Il est, techniquement, erroné dans de nombreux domaines, mais il devrait vous permettre d'apprécier la forme de base que les choses ont prise. Ce qu'il faut retenir, c'est que le traçage de rayons a commencé comme le modèle idéalisé de la façon de dessiner des graphiques 3D, mais qu'il était trop difficile à réaliser. Nous avons affiné ce processus pendant plusieurs décennies.
Et cela nous ramène au ray tracing moderne. Je ne suis pas du tout un expert des techniques actuelles (j'ai un intérêt académique passager), alors prenez ceci avec une bonne dose de sel ; je pourrais me tromper sur certains détails.
L'algorithme de base du lancer de rayons pose de nombreux problèmes qui ne peuvent tout simplement pas être résolus. Nous devons tracer les rayons à travers les points entre les pixels, puis déterminer ce qui se trouve à l'intérieur de chaque pixel. Nous ne pouvons pas nous contenter de tracer les rayons à travers chaque point, car ils peuvent toucher différentes surfaces, voire différents objets (ou encore ne jamais toucher quoi que ce soit). Nous ne pouvons pas créer une caméra pour déterminer ce que chaque pixel doit voir. Nous utilisons donc des raccourcis. Les modèles d'ombrage examinent les surfaces des objets, tandis que le traçage de rayons examine les lumières. Pour chaque lumière, vous pouvez déterminer l'intensité de son rayonnement sur chaque surface. La couleur que vous voyez est la lumière réfléchie par la surface vers la caméra. Mais une partie de la lumière va briller dans d'autres directions, et cette lumière va illuminer d'autres surfaces, dont certaines vont réfléchir la lumière vers la caméra et d'autres vers d'autres surfaces encore. Le fait important ici est que la lumière ne peut que diminuer au fur et à mesure que vous la tracez - elle finit par être si faible que vous pouvez l'ignorer. La lumière qui rebondit de chaque surface vers la caméra brille à travers un certain nombre de pixels de la caméra, et chaque pixel accumule des valeurs de lumière jusqu'à ce qu'il n'y ait plus de lumière à calculer.
Du point de vue de quelqu'un qui joue à un jeu vidéo, il y a deux grandes différences :
Le traçage de rayons permet d'obtenir des réflexions et des réfractions détaillées, y compris sur des surfaces complexes. Pour avoir un miroir en ombrage, vous créez généralement une caméra à l'endroit où se trouve le miroir, vous effectuez un rendu vers une texture, puis vous dessinez cette texture. Cela ne fonctionne pas bien sur les surfaces complexes et deux miroirs qui se chevauchent sont très difficiles à gérer. Par conséquent, les concepteurs de jeux ont tendance à éviter les situations où cela doit être fait. Il existe des solutions, mais chaque solution a son lot de compromis, et la plus simple est de concevoir un contenu qui évite complètement le problème.
Le traçage de rayons permet à plusieurs surfaces d'être "visibles" à travers un pixel. Le processus de base du dessin avec les shaders signifie que chaque pixel représente la lumière qui rebondit sur une seule surface. Cela signifie que les objets ont des bords nets. Le terme technique pour cela est crénelage ce qui signifie que l'on dessine une version de basse qualité d'une image de haute qualité. De nombreuses techniques ont été développées au fil des ans pour lutter contre cet effet, notamment sous le nom d'"anticrénelage", mais le suréchantillonnage est devenu populaire ces dernières années. L'anticrénelage est un domaine de recherche à part entière. On peut considérer qu'il s'agit d'estomper les bords des objets, mais cela va de l'inexactitude à l'erreur pure et simple quand on entre dans les détails. Le suréchantillonnage est relativement simple : utilisez une caméra plus grande que votre écran, puis réduisez l'image pour l'adapter. Si vous effectuez le rendu à deux fois la largeur et deux fois la hauteur, vous brouillerez les 4 pixels rendus par la caméra pour obtenir un pixel à l'écran. Le traçage de rayon évite ce problème en calculant la quantité de lumière provenant de chaque surface qui traverse un pixel, de sorte qu'il n'y a pas de crénelage au départ.
Tout cela étant dit, il y a des différences dans le rendu, mais quelle différence cela fera-t-il pour les jeux ?
En théorie, pas grand-chose. Des décennies de recherche et de développement dans le domaine des graphiques 3D ont conduit à un grand nombre de solutions de contournement, de bidouillages et d'optimisations. Les graphismes sont devenus vraiment bons sans avoir besoin du ray tracing. Dans le cadre de cette progression, les studios de développement disposent de chaînes d'outils conçues pour travailler avec les shaders et produire des résultats étonnants avec ces derniers. Il y a une forte raison de continuer à supporter les shaders, car ils sont bien établis à la fois dans les flux de travail de développement et dans le matériel grand public. Ils se tireraient une balle dans le pied en abandonnant complètement les shaders. Au fil du temps, il est probable que de plus en plus d'efforts seront consacrés aux ressources de ray tracing plutôt qu'aux ressources ombrées, et cela suivra l'adoption du matériel. La prise en charge du ray tracing par les consoles sera probablement le principal catalyseur de ce mouvement. Tout ce que vous perdez, c'est de ne pas avoir la meilleure qualité graphique, mais ce n'est pas très différent de l'utilisation d'un moniteur qui ne prend en charge que les canaux de couleur 8 bits, de jouer en 1080p au lieu de 4k, à 30 images par seconde au lieu de 60, ou avec un réglage graphique inférieur au maximum. Si, comme la plupart des gens, cela ne vous dérange pas de ne pas avoir ce qu'il y a de mieux, alors vous ne manquerez pas grand-chose.
Dans la pratique, cependant, ce sera probablement un peu plus que cela, mais seulement à titre de nouveauté. Lorsque vous mettez un nouveau jouet entre les mains d'artistes et d'ingénieurs, ils vont jouer avec. Ils expérimenteront et découvriront ses capacités et apprendront à travailler avec ce nouveau matériau. Je m'attends à ce qu'il y ait des "easter eggs" visuels qui ne seront visibles qu'avec le ray tracing - peut-être une pièce qui, lorsqu'elle se reflète sur le côté d'une théière, ressemble à Groucho Marx. Ce genre d'œufs de Pâques sera principalement une nouveauté et, une fois découverts, les images seront partout sur Internet, donc vous ne manquerez pas grand-chose.
TLDR : Le raytracing est un moyen d'obtenir des graphiques très réalistes. Cependant, il est actuellement plus lent que les méthodes traditionnelles, mais cela va changer dans un avenir proche car de plus en plus de cartes graphiques sont équipées de matériel permettant d'accélérer le raytracing.
Avant le Raytracing
Depuis de nombreuses années, la méthode privilégiée pour générer des graphiques informatiques dans les jeux est la suivante tramage . Dans cette méthode, le programme prend des données 3D (points, polygones, etc.), les transforme en espace 2D et remplit (rastérise) les polygones à l'écran. Ce processus est assez performant et facile à accélérer à l'aide de matériel, c'est pourquoi il s'agit de la méthode de choix depuis de nombreuses années.
Toutefois, cette méthode présente quelques inconvénients, notamment le fait qu'elle ne permet pas de générer des graphiques réalistes. Pour obtenir de bons résultats en utilisant la rastérisation, il faut recourir à diverses astuces (certains les qualifieraient de "hacks") et demander un effort considérable aux artistes. Les domaines dans lesquels il a des difficultés sont les suivants :
- Réflexion et réfraction réalistes
- Éclairage global/éclairage indirect (les zones d'une scène qui ne sont pas directement éclairées ne sont pas totalement noires).
- Effets dispersifs (prismes)
parmi d'autres.
Qu'est-ce que le raytracing ?
Il existe une autre façon de générer des graphiques en 3D, qui s'appelle raytracing . Pour être précis, le raytracing est en fait une famille de méthodes, mais à la base, elles fonctionnent de manière similaire. Au lieu de convertir des primitives 3D en polygones 2D, un raytracer envoie des rayons de la caméra vers la scène et nuance le pixel en fonction de l'intersection.
Voici une illustration qui explique le processus :
Cette image a été créée par Henrik et a été téléchargée à l'origine sur WikiMedia Commons .
La façon dont les pixels sont ombrés affectera la qualité de la sortie. Un sous-ensemble du raytracing, Traçage de chemin L'outil de traçage de rayons, qui combine le traçage de rayons et certaines mathématiques, permet de générer des graphiques très réalistes (en fait, photoréalistes) avec une complexité minimale. En fait, un bon programmeur peut créer un pathtracer de base en un week-end. J'ai réalisé un petit traceur de chemin récemment.
La mise en garde est la suivante le traçage des rayons est horriblement lent . Dans un raytracer non optimisé, pour chaque pixel de l'écran, il faut tester plusieurs fois les intersections par rapport à chaque polygone de la scène. Cependant, l'amélioration de la qualité des résultats fait que les méthodes basées sur le raytracing sont depuis longtemps privilégiées pour le rendu hors ligne (pensez aux films d'animation).
Raytracing en temps réel
De nombreuses cartes graphiques récentes (comme la gamme RTX de NVIDIA) sont équipées d'unités matérielles qui accélèrent le raytracing en effectuant rapidement certains calculs liés au RT à l'aide d'un silicium dédié. Cela signifie que nous pourrions voir de plus en plus de jeux utiliser des techniques basées sur le raytracing pour améliorer ou même créer les visuels de leurs jeux.