Comment le lancer de rayons améliore-t-il les performances du GPU?

La rendu la méthode généralement utilisée dans les jeux vidéo est la méthode dite rastérisation or algorithme du peintre . Mais avec l'arrivée de Lancer de rayons or Lancer de rayons en temps réel, nous approchons d'une ère où les anciennes limitations sont complètement surmontées. Avec l'arrivée de AMD's ADN 2 et les consoles nouvelle génération, il est clair que nous ne sommes pas confrontés à une mode passagère et c'est pourquoi nous vous expliquons les avantages de cette nouvelle façon de rendre une scène.

Le lancer de rayons que nous commençons à voir dans les jeux n'est pas une implémentation complète du lancer de rayons utilisé aujourd'hui dans les films, car il serait trop lent. Il s'agit plutôt d'une combinaison de techniques de pixellisation qui ont été utilisées jusqu'à présent en plus du lancer de rayons pour résoudre certains problèmes qui ne peuvent pas être résolus avec la pixellisation.

Comment le lancer de rayons améliore les performances du GPU

L'idée est de remplacer progressivement les techniques de rastérisation conventionnelles par le Ray Tracing de manière progressive et graduelle, mais même NVIDIA, qui est la société qui a le plus promu cette technologie ces dernières années en termes de marketing, vient de fixer une date pour le début de la fin de la transition de la rastérisation au Ray Tracing d'ici 2023 encore lointain.

Lancer de rayons 2023

C'est pourquoi au cours de ces années, les jeux utiliseront ce que nous appelons Hybrid Ray Tracing ou Ray Tracing en temps réel, consistant à combiner la rastérisation utilisée jusqu'à présent dans les jeux pour rendre la scène avec le Ray Tracing pour résoudre certains problèmes visuels qui ne peuvent l'être. résolu par rastérisation.

Cela signifie que petit à petit, les jeux abandonneront la rastérisation et que les GPU à l'intérieur de nos cartes graphiques varieront progressivement pour atteindre cet idéal.

Rastérisé vs Ray Tracing

Traçage de rayons Recorrido Luz

Lors de la rastérisation, nous mettons à jour une valeur de couleur d'un pixel à l'écran, puis nous mettons à jour à nouveau ce pixel; cela signifie qu'un seul pixel doit être mis à jour plusieurs fois dans une seule scène.

D'autre part, avec le lancer de rayons, la valeur de couleur d'un pixel n'est pas donnée tant que le rayon n'a pas terminé sa trajectoire entière, de sorte que les informations dans le tampon d'image ne seront mises à jour qu'une seule fois.

Cette différence, qui peut être mineure, est importante, car la rastérisation, en mettant continuellement à jour la valeur des pixels dans le tampon d'image, qui est stockée dans la mémoire des graphiques, nécessite des bandes passantes vraiment importantes pour rendre les scènes toutes plus complexes.

Le pipeline de lancer de rayons hybride

Pipeline de lancer de rayons Vulkan DX12U

Que nous utilisions Vulkan, DirectX 12 Ultimate ou tout autre type d'API, les étapes et l'ordre de celles-ci sont toujours les mêmes.

  • Shader de génération de rayons: ce shader doit être appelé chaque fois que nous voulons qu'un objet de la scène émette un type de rayon.
  • Intersection Shader: il est le shader qui calcule l'intersection entre les rayons et l'objet, obsolète du fait que les unités d'intersection telles que le RT Core de NVIDIA effectuent ce travail en parallèle et plus efficacement.
  • Shaders de résolution: ils sont le type de programme de shader appliqué à l'objet en fonction du résultat de l'intersection, ils sont appelés miss shader, hit shader le plus proche, hit shader, etc. Ils ne s'exécutent pas tous en même temps car l'intersection ne donne que un résultat.

En raison du manque de puissance des GPU que nous utilisons dans nos systèmes pour le Ray Tracing, ce qui est fait est une utilisation minimale de celui-ci, en limitant la quantité de rayons qui composent la scène et leur niveau de récursivité.

L'éclairage indirect, le grand avantage du lancer de rayons

Raster vs lancer de rayons

Malgré des améliorations continues GPU puissance et programmabilité au cours des deux dernières décennies, tous utilisent le même algorithme pour rendre les scènes de scène, appelé algorithme de rastérisation.

Cet algorithme est assez bon si nous voulons rendre des scènes uniquement avec un éclairage direct, c'est-à-dire avec des sources lumineuses incidentes sur les objets mais sans que ces objets génèrent par eux-mêmes un type de source lumineuse de manière indirecte, c'est là que cela commence. de s'effondrer complètement, car son modèle d'éclairage est limité.

D'autre part, le lancer de rayons traite du chemin des rayons lumineux dans la scène et prend en compte son comportement et sa trajectoire.

» On entend par éclairage indirect ce qui est produit par un objet lorsqu'une source de lumière directe tombe dessus . »

Le problème vient du fait que le mode de rendu de la rastérisation ne prend pas en compte le chemin de la lumière, donc quand il s'agit de représenter le comportement de celui-ci lorsqu'il affecte les objets, des méthodes de substitution doivent être recherchées en raison de le manque d'informations sur les lieux.

Shadow maps, un exemple des limites de la pixellisation

Cartes d'ombre horribles raster

Plus d'une fois, jouer à un jeu vidéo vous aura donné envie de sortir les yeux à cause des ombres du jeu; La raison en est que le GPU doit faire un travail supplémentaire pour avoir une idée de ce que seront les ombres en raison du manque d'informations.

Ce qui est fait est de restituer complètement la scène, mais en prenant l'objet qui génère l'ombre comme caméra de la nouvelle scène et en ne stockant que le tampon de profondeur comme une carte d'ombre.

Pouvez-vous imaginer la puissance nécessaire pour calculer les ombres de tous les objets d'une scène? Gardez à l'esprit qu'avec la rastérisation, la valeur des pixels est continuellement mise à jour tandis qu'avec le lancer de rayons, ce problème ne se produit pas, car il n'est mis à jour qu'une fois que le rayon a parcouru tout son parcours dans la scène.

Le traçage de rayons est l'une des choses qui sont résolues par le traçage de rayons, ce sont les cartes d'ombre et non seulement celles-ci, mais aussi les réflexions des objets, la réfraction, etc.

Traçage de rayons Battlefield V

Tous ces effets commencent à être transférés vers le lancer de rayons car la pixellisation ne peut pas résoudre ces problèmes visuels avec la même définition.

Une autre façon pour les développeurs de surmonter les limitations de la pixellisation consiste à utiliser des cartes de lumières, d'ombres et / ou de réflexions statiques. Par exemple, ils placent des ombres fixes sur la scène qui ont été précalculées à l'avance, et ces ombres ne sont pas dynamiques et ne changent pas avec le changement continu d'éclairage.

Autre avantage: la représentation des matériaux

Luz en matériaux

Un autre élément important lors de la représentation d'une scène 3D réaliste est la représentation des matériaux dans lesquels le comportement de la lumière affecte également, et comme la pixellisation a un modèle très limité de la lumière, les objets d'une scène 3D ne sont pas affichés car ils devrait être.

Il faut tenir compte du fait que chaque type de matériau est représenté par un quotient de réfraction, qui est la quantité de lumière qu'ils émettent et qui va de 0 à 1; le quotient de réfraction le plus élevé est celui d'une surface de type miroir qui rebondira sur les rayons complets et le plus bas est un objet qui absorbe simplement toute la lumière et ne la réfracte pas. Lorsque les rayons lumineux rebondissent sur des objets, ils transportent un niveau d'énergie avec eux, et quand celui-ci atteint zéro, le rayon cesse de parcourir la scène.

Chaque fois qu'un rayon frappe un objet, dans le cas où nous faisons émettre à l'objet un produit de rayon indirect de l'intersection à travers un shader de génération de rayon, il sort avec un niveau d'énergie équivalent à celui du rayon qui a frappé précédemment l'objet. par le quotient de réfraction de l'objet.

Eh bien, l'un des avantages du lancer de rayons est précisément la façon dont il peut représenter différents matériaux, en augmentant leur qualité visuelle et sans avoir à tirer des programmes de shader complexes qui nécessitent une grande quantité de calculs sur la pièce. du GPU et des combinaisons de textures qui n'obtiennent pas non plus le même résultat.