Ray tracing

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Lancer de rayon)

Exemple d'image de synthèse montrant la réfraction dans cinq milieux différents : dans l'air, dans le liquide bleu, dans le liquide rouge, dans le verre et dans le tube de plastique (les images sont déformées par le changement d'indice optique).

Le lancer de rayons[1],[2], ou lancer de rayon[2],[3], également appelé ray tracing, est une technique de calcul d'optique par ordinateur, utilisée pour le rendu en synthèse d'image ou pour des études de systèmes optiques[4]. Elle consiste à simuler le parcours inverse de la lumière : on calcule les éclairages de la caméra vers les objets puis vers les lumières, alors que dans la réalité la lumière va de la scène vers l'œil.

Cette technique reproduit les phénomènes physiques (principe du retour inverse de la lumière de Fermat, lois de Snell-Descartes) que sont la réflexion et la réfraction. Une mise en œuvre naïve du ray tracing ne peut rendre compte de phénomènes optiques tels que les caustiques, l'illumination globale ou encore la dispersion lumineuse (il faut une approche plus élaborée du ray tracing, faisant appel à des techniques probabilistes de type méthode de Monte-Carlo, Metropolis[5] ou à la radiosité pour résoudre ces problèmes).

En revanche, contrairement à d'autres algorithmes de synthèse d'image, elle permet de définir mathématiquement les objets à représenter et non pas seulement par une multitude de facettes.

Historique[modifier | modifier le code]

Le ray tracing fut présenté pour la première fois par Arthur Appel en 1968[6],[7].

Principe[modifier | modifier le code]

Description[modifier | modifier le code]

Schéma présentant le principe du ray tracing : un algorithme construit une image en étendant les rayons diffusés sur un objet dans une scène 3D.

Cette technique de rendu consiste, pour chaque pixel de l'image à générer, à lancer un rayon depuis le point de vue (la « caméra ») dans la « scène 3D ». Le premier point d'impact du rayon sur un objet définit l'objet concerné par le pixel correspondant.

Des rayons sont ensuite lancés depuis le point d'impact en direction de chaque source de lumière pour déterminer sa luminosité (est-il éclairé ou à l'ombre d'autres objets ?). Cette luminosité, combinée avec les propriétés de la surface[8] de l'objet (sa couleur, sa rugosité, etc.), ainsi que d'autres informations éventuelles (angles entre la normale à l'objet et les sources de lumières, réflexions, transparence, etc.), déterminent la couleur finale du pixel.

Cette technique fonctionne à rebours des modèles physiques qui, eux, lancent des rayons de lumière depuis les sources lumineuses vers l'œil ou la caméra en passant par les objets, alors que le ray tracing procède de la caméra vers les sources de lumières. L'expérience montre en effet que cette manière de procéder est nettement plus performante[9] dans la plupart des cas (par contre, pour résoudre des caustiques par exemple, une méthode directe depuis les sources ou mixte est souvent préférée).

Différentes techniques permettent d'accélérer ce traitement lourd. Dans le cadre d'objets polygonaux (constitués de triangles par exemple), dessiner l'objet de façon classique (voir la rastérisation) permet de déterminer précisément quels pixels seront réellement visibles, et permet de ne lancer de rayons que pour ces pixels limités. Les différentes techniques de détermination des surfaces cachées permettent de la même manière de minimiser le nombre de rayons à lancer.

Ces calculs préliminaires peuvent être réalisés par un processeur dédié afin de limiter le traitement à faire par le processeur principal. Le ray tracing étant très gourmand en calcul vectoriel, l'utilisation de l'accélération matérielle, conçue pour ce calcul vectoriel (shader), peut grandement aider à optimiser le résultat final.

Algorithme de ray tracing récursif[modifier | modifier le code]

Exemple de rendu avec la méthode de ray casting. On remarque que les reflets et la lumière sont réalistes.

Avant 1979, les algorithmes de ray tracing se contentaient seulement de lancer des rayons puis de déterminer la couleur de l'objet pour chaque rayon sans implémentation récursive. En 1979, Turner Whitted (en) proposa une approche récursive, c'est-à-dire d'utiliser l'algorithme de ray casting à partir du point concerné pour calculer sa couleur. Cela offre une meilleure précision physique, notamment pour les reflets[10].

Exemple du calcul de l'intersection d'un rayon et d'un triangle[modifier | modifier le code]

Intersection d'un rayon et d'un triangle.

Un moyen simple et efficace pour calculer l'intersection d'un rayon avec un triangle consiste à calculer les coordonnées du point d'intersection I dans la base . Il suffit de résoudre l'équation vectorielle . À l'aide de la règle de Cramer, du produit mixte et en posant on obtient :



Il suffit ensuite de vérifier que .

Il est très simple d'étendre cette méthode à des rectangles et même à des polygones grâce au théorème de Jordan[11].

Années 2000 à 2020 : promesses et réalités[modifier | modifier le code]

Les images générées avec le ray tracing peuvent donner des résultats réalistes.
Image générée avec ce procédé. Le rendu de la luminosité est proche de celui d'une image réelle.

Avec la généralisation des processeurs multi-cœurs et de l'utilisation de bibliothèques logicielles mettant en œuvre cette technologie comme OpenMP, OpenCL, CUDA ou Vulkan, l'algorithme du ray tracing voit ses possibilités étendues. En effet, cet algorithme se prête particulièrement bien au parallélisme, chaque point de l'image pouvant être calculé indépendamment des autres. L'immense majorité des logiciels de création graphique basés sur le ray tracing utilisent une implémentation multithread, permettant la prise en charge des processeurs multi-cœurs.

Avec l'apparition de chipsets graphiques multi-cœurs programmables (GPGPU) et des langages de programmation associés (OpenCL ou CUDA par exemple), et avec des moteurs comme LuxRender (open source), Iray et OptiX[12] de NVIDIA, la bibliothèque Embree[13] de Intel ou encore Firerays[14] d'AMD, le ray tracing prend de plus en plus d'importance dans les applications de synthèse d'image en temps réel.

Le ray tracing permet la génération d'images très réalistes, mais peut requérir en contrepartie un temps de calcul très important, en fonction de la complexité de la scène 3D à produire. Jusqu'en 2001, la puissance des ordinateurs ne permettait pas le calcul d'images en temps réel. Depuis, sous certaines conditions, de nombreuses optimisations de l'algorithme permettent un rendu en temps interactif (quelques images par seconde), voire réellement fluide (au-delà de 25 images par seconde).

L'utilisation d'architectures massivement parallèles dédiées telles que les processeurs graphiques ou les cartes accélératrice comme le MIC d'Intel, que ce soit par le biais d'outils dédiés ou par l'utilisation de structures logicielles telles que CUDA, OpenCL ou OpenMP, améliore grandement les performances des outils de rendu par ray tracing et tend à en démocratiser l'usage (Blender propose notamment la possibilité de déporter des opérations de rendu par ray tracing sur GPU à l'aide de la bibliothèque Luxrays[15]).

Dans les années 2010, des jeux commerciaux à large diffusion utilisant cette technique sont prévus[16],[17].

Ces méthodes informatiques pour la prédiction d'images trouvent aussi depuis les années 1990 leurs homologues dans divers domaines, en particulier la prédiction de la propagation d'ondes sonores ou de micro-ondes (téléphonie mobile) dans les milieux complexes. Le modèle physique sous-jacent aux algorithmes de ray tracing (le principe de Fermat) est en effet commun à l'optique et l'acoustique, à quelques raffinements près, liés aux longueurs d'onde manipulées (phénomène de diffraction notamment).

Les consoles de jeu de neuvième génération le feront en temps réel[18].

Le début de l’utilisation du ray tracing[modifier | modifier le code]

Le ray tracing est présenté la première fois en 1968 par Arthur Appel, mais il fait réellement son apparition en 1986. Il est d’abord utilisé pour la réalisation de films de grandes maisons d'animation tels que DreamWorks ou encore Pixar. L’accomplissement de cette technique expérimentale ne fut utilisé que partiellement car cette méthode est trop onéreuse[19]. En 2006, Pixar décide de promouvoir ce procédé pour la réalisation du film Cars car cette simulation de la lumière en temps réel permet de rajouter du réalisme au projet, notamment pour la réflexion de la lumière sur la carrosserie, pour les ombres, ainsi que pour l'occlusion ambiante. Cela a permis de démocratiser cette technique aux yeux des maisons de production de films[20].

Cette méthode n’apparait dans le monde du jeu vidéo que le 23 août 2018[21] lors de la conférence d’un grand constructeur de cartes graphiques, processeurs graphiques … Lors de cette conférence, NVIDIA présente cette nouvelle manière qui permet d’améliorer le réalisme : la réflexion des flammes, le reflet des miroirs… Ce qui n’était que de vastes calculs permettant une représentation abstraite du reflet des matières tels que le verre, le métal ou encore l’eau est maintenant un véritable algorithme qui permet une représentation bien plus fidèle. Le seul bémol à l’utilisation de ce procédé, ce sont les ressources qu’il utilise. En effet, le calcul de la trajectoire de la lumière a un coût, les ressources devant être allouées aux calculs. Pour les consoles utilisant le ray tracing, la perte du nombre d’images par seconde dépend de nombreux facteurs (le jeu, la qualité des graphismes, la qualité du ray tracing, les composants de l’ordinateur …). Les tests de comparaisons[22]sont nombreux. Pour une définition Full HD, la perte du nombre d’images par seconde pour un jeu tel que Control est de 20%[23], ce qui peut donc nuire à sa fluidité. Une solution est d'utiliser l’intelligence artificielle, qui permet une qualité d'image similaire tout en réduisant la définition, c'est la technologie DLSS chez Nvidia et FSR chez AMD (bien que la technologie FSR ne soit pas basée, sur de l'intelligence artificielle ou du deep learning, elle upscale l'image de manière "intelligente" [24]).

Notes et références[modifier | modifier le code]

  1. Commission d’enrichissement de la langue française, « lancer de rayons », sur FranceTerme, ministère de la Culture (consulté le ).
  2. a et b « lancer de rayon », Grand Dictionnaire terminologique, Office québécois de la langue française (consulté le )
  3. ISO/CÉI 2382-13:1996 Technologies de l’information : Vocabulaire : Partie 13 : Infographie, Organisation internationale de normalisation (ISO)/Commission électrotechnique internationale (CÉI), 1996
  4. Cette méthode est par exemple utilisée par les logiciels TracePro et Oslo de l’éditeur Lambda Research Corp., voir (en) « TracePro features », sur Lambda Research et (en) « OSLO », sur Lambda Research.
  5. Algorithme de rendu de Metropolis, voir Eric Veach et Leonidas J. Guibas, « Metropolis Light Transport », sur Stanford Computer Graphics Laboratory.
  6. (en) Arthur Appel, Some techniques for shading machine renderings of solids, 9 p. (lire en ligne).
  7. [PDF] (en) Doug Jame, « Ray Tracing - S 4620 Lecture 4 », cs.cornell.edu, automne 2009
  8. La BRDF, ou réflectivité bidirectionnelle, est la fonction décrivant le comportement d'une surface quand elle réfléchit la lumière en un point.
  9. [PDF] Philippe Ris, « Parallélisation du lancer de rayon par évaluation dynamique de la topologie de la scène ; Chapitre II : Les Modèles d'illumination du lancer de rayon », thèse de doctorat, ph.ris.free.fr, 1996
  10. (en) Turner Whitted (en), « An Improved Illumination Model for Shaded Display », Communications of the ACM, vol. 23, no 6,‎ (DOI 10.1145/358876.358882, lire en ligne).
  11. (en) Octavian Cismasu, The Jordan Curve Theorem for Polygons, Université McGill, automne 1997
  12. (en) Steven G. Parker, James Bigler, Andreas Dietrich et Heiko Friedrich, « OptiX: A General Purpose Ray Tracing Engine », ACM SIGGRAPH 2010 Papers, ACM, sIGGRAPH '10,‎ , p. 66:1–66:13 (ISBN 9781450302104, DOI 10.1145/1833349.1778803, lire en ligne).
  13. (en) Manfred Ernst, « Embree - Photo-Realistic Ray Tracing KernelsIntel Lambree », sur Intel Developer Zone, Programmes OpenCL pour le lancer de rayon.
  14. (en) « FireRays - GPUOpen », sur gpuopen.com, GPUOpen (consulté le )
  15. (en) « LuxRays - LuxRender Wiki », sur luxrender.net (consulté le )
  16. (en) Otoy, « Brigade 3.0 - real-time path tracing », sur evermotion.org, (consulté le )
  17. (en) Jacco Bikker, « Arauna2 announcement video », sur ompf2.com, .
  18. Bruno Mathieu, « La PlayStation 5 aura des jeux en ray tracing, mais seront-ils vraiment plus beaux ? », sur PhonAndroid, (consulté le )
  19. « Dossier : tout savoir sur le Ray Tracing, l'éblouissante technologie mise en avant par Nvidia », sur hitek.fr, (consulté le )
  20. (en) Per H. Christensen, Julian Fong, David M. Laur et Dana Batali, « Ray Tracing for the Movie ‘Cars’ » (consulté le )
  21. « Battlefield V: Official GeForce RTX Real-Time Ray Tracing Demo » (consulté le )
  22. « Technologie NVIDIA DLSS pour des performances exceptionnelles », sur NVIDIA (consulté le )
  23. (en-GB) eTeknix.com, « Control Ray Tracing Performance – How to Get Your RTX ON », sur eTeknix, (consulté le )
  24. « AMD FidelityFX Super Resolution : des gains de performance, mais en échange de quels compromis visuels ? », sur www.lesnumeriques.com (consulté le )

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]

  • (en) PolyWorld un bench accéléré 3D de RayTracing Temps réel.