Ce projet implémente un path tracer, une méthode avancée de rendu d'images en 3D qui simule la propagation réaliste de la lumière. Contrairement aux techniques de rendu traditionnelles, le path tracing suit chaque rayon de lumière pour déterminer les couleurs visibles à chaque pixel d'une image. Voici une explication détaillée de ses principales caractéristiques.
Le path tracing utilise une méthode appelée lancer de rayons. Pour chaque pixel de l'image, un rayon est envoyé depuis la caméra dans la scène. Ce rayon peut :
- Frapper un objet : On calcule alors les interactions entre le rayon et l'objet (couleur, lumière, réflexions).
- Manquer un objet : Dans ce cas, la couleur du fond est utilisée, souvent définie par une image HDRI.
- ( \mathbf{O} ) : origine du rayon (position de la caméra).
- ( \mathbf{D} ) : direction du rayon.
- ( t ) : distance à laquelle le rayon rencontre la sphère.
Pour une sphère centrée en ( \mathbf{C} ) avec un rayon ( r ), l'équation est :
Résoudre cette équation revient à déterminer si le rayon touche la sphère.
Lorsqu'un rayon frappe un objet, on calcule l'intensité lumineuse en fonction de l'orientation de la surface par rapport à une source de lumière :
- ( \mathbf{N} ) : vecteur normal à la surface.
- ( \mathbf{L} ) : direction de la lumière.
- ( I ) : intensité lumineuse reçue.
Pour chaque point éclairé, on vérifie si une autre surface bloque la lumière. On envoie un rayon d'ombre vers la source lumineuse pour s'assurer qu'il n'y a pas d'obstacles.
La lumière se réfléchit selon la loi de Snell-Descartes. La direction réfléchie est donnée par :
- ( \mathbf{R} ) : direction réfléchie.
- ( \mathbf{D} ) : direction du rayon incident.
- ( \mathbf{N} ) : vecteur normal.
Les surfaces rugueuses dispersent la lumière dans plusieurs directions aléatoires. Cette perturbation est simulée en ajoutant une petite variation à la direction réfléchie :
Une HDRI (High Dynamic Range Image) est utilisée pour simuler des environnements lumineux complexes. Lorsqu'un rayon ne touche aucun objet, sa direction est utilisée pour "échantillonner" une couleur depuis l'image HDRI.
- Convertir la direction 3D du rayon ((x, y, z)) en coordonnées sphériques ((\theta, \phi)).
- ( \theta = \arccos(y) )
- ( \phi = \arctan2(z, x) )
- Convertir ((\theta, \phi)) en coordonnées UV pour accéder à l'image HDRI.
Pour un rendu encore plus réaliste, plusieurs rayons sont lancés pour chaque pixel, chacun avec une légère variation. La couleur finale du pixel est la moyenne des couleurs retournées par ces rayons :
- ( N ) : nombre de rayons par pixel.
- ( C_{rayon_i} ) : couleur obtenue par un rayon donné.
Le path tracing combine tous ces éléments (intersections, réflexions, ombres, rugosité, HDRI, échantillonnage) pour produire des images photoréalistes, comme si elles étaient prises avec une caméra dans un monde réel.