Lancer de rayon

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Lancer de rayons)
Aller à : navigation, rechercher
Exemple d'image de synthèse montrant la réfraction dans quatre milieux différents : dans l'air, dans le liquide bleu, dans le liquide rouge et dans le verre (les images sont déformées par le changement d'indice optique).

Le lancer de rayon, en anglais 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[1]. 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 lancer de rayon 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 lancer de rayons faisant appel à des techniques probabilistes de type méthode de Monte-Carlo, Metropolis[2] 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.

Principe[modifier | modifier le code]

Le lancer de rayon 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[3] 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 lancer de rayons 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[4] 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 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 faire par le processeur principal. Le lancer de rayon é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.

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[5].

Futur et prospectives[modifier | modifier le code]

Avec la généralisation des processeurs multi-cœurs et de l'OpenCL, l'algorithme du lancer de rayons 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 lancer de rayons 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 sources), Iray et OptiX[6] de NVidia, la bibliothèque Embree[7] de Intel ou encore Firerays[8] d'AMD, le lancer de rayons prend de plus en plus d'importance dans les applications de synthèse d'image en temps réel.

Le lancer de rayons permet la génération d'images très réalistes mais peut requérir 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 lancer de rayons et tend à en démocratiser l'usage (Blender propose notamment la possibilité de déporter des opérations de rendu par lancer de rayons sur GPU à l'aide de la bibliothèque Luxrays[9]).

Des jeux commerciaux à large diffusion sont prévus[10],[11].

Ces méthodes informatiques pour la prédiction d'images trouvent depuis les années 1990 leurs homologues dans divers domaines, en particulier la prédiction de la propagation d'ondes sonores ou de micro-onde (téléphonie mobile) dans les milieux complexes. Le modèle physique sous-jacent aux algorithmes de lancer de rayon (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).

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

  1. 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.
  2. Algorithme de rendu par l'algorithme de Metropolis, voir Eric Veach et Leonidas J. Guibas, « Metropolis Light Transport », sur Stanford Computer Graphics Laboratory.
  3. La BRDF, bidirectional reflectance distribution function (en), est la fonction décrivant le comportement d'une surface quand elle réfléchit la lumière en un point.
  4. Les modèles d'illumination du lancer de rayon, thèse de doctorat de Philippe Ris.
  5. (en) Octavian Cismasu, « The Jordan Curve Theorem for Polygons », université McGill, automne 1997.
  6. Steven G. Parker, James Bigler, Andreas Dietrich et Heiko Friedrich, « OptiX: A General Purpose Ray Tracing Engine », ACM SIGGRAPH 2010 Papers, ACM, série SIGGRAPH '10,‎ , p. 66:1–66:13 (ISBN 9781450302104, DOI 10.1145/1833349.1778803, lire en ligne)
  7. Manfred Ernst, « Embree - Photo-Realistic Ray Tracing KernelsIntel Lambree », sur Intel Developer Zone, Programmes OpenCL pour le lancer de rayon.
  8. (en) « FireRays - GPUOpen », sur GPUOpen (consulté le 22 juin 2016)
  9. « LuxRays - LuxRender Wiki », sur www.luxrender.net (consulté le 22 juin 2016)
  10. (en) « BRIGADE REAL-TIME PATH TRACING - INTRODUCTION » (ArchiveWikiwixArchive.isGoogleQue faire ?), 26 juin 2010, sur International Game Architecture and Design.
  11. (en) Jacco Bikker, « Arauna2 announcement video », sur ompf2.com,‎ .

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

  • Photon mapping
  • POV-Ray : un logiciel de lancer de rayons libre et gratuit. La version 3.7 est multi-cœurs.
  • YafaRay  : un logiciel de lancer de rayons libre.
  • Rayon
  • Mental Ray : moteur de rendu basé sur le lancer de rayons.
  • LuxRender : moteur de rendu basé sur le lancer de rayons (non biaisé). Il existe une version OpenCL de ce moteur.

Liens externes[modifier | modifier le code]