Lancer de rayon - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

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

Le lancer de rayon (anglais : ray tracing) est une technique de rendu en synthèse d'image simulant 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 la lumière va de la scène vers l'œil.

Cette technique reproduit les phénomènes physiques que sont la réflexion et la réfraction. Une mise en œuvre naïve du lancer de rayon ne peut rendre compte d'autres phénomènes optiques tels que les caustiques (taches lumineuses créées à l'aide d'une lentille convergente par exemple) et la dispersion lumineuse (la radiosité s'attaque à ce problème).

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

Le lancer de rayon consiste, pour chaque pixel de l'image générée, à 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 la couleur de l'objet 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 exactement à l'inverse de la nature, qui, elle, lance 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. Pour plus de détails on pourra se reporter à ce travail sur les modèles d'illumination du lancer de rayon.

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 réduire au maximum 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 raytracing é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

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 (\vec{u},\vec{v},\vec{r}) . Il suffit de résoudre l'équation vectorielle \vec{OO_t}+I_u\vec{u}+I_v\vec{v}=\vec{OO_r}+I_r\vec{r} . A l'aide de la règle de Cramer, du produit mixte et en posant \vec{n}=\vec{u} \wedge \vec{v}, \vec{O_{tr}} = \vec{O_tO_r} on obtient:
 I_r = - \frac{\vec{n}.\vec{O_{tr}}}{\vec{n}.\vec{r}} \ ; I_u = \frac{(\vec{O_{tr}} \wedge \vec{v}).\vec{r}}{\vec{n}.\vec{r}} \ ; I_v = \frac{(\vec{u} \wedge \vec{O_{tr}}).\vec{r}}{\vec{n}.\vec{r}}

Il suffit ensuite de vérifier que 0 \leq I_u \leq 1 \ ,0 \leq I_v \leq 1 \ ,I_r \geq 0 \ ,I_u+I_v \leq 1
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

Page générée en 1.624 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise