TD6 - Path Tracing

L'algorithme de path tracing a pour objectif d'intégrer (au sens de Monte-Carlo) les différents termes de l'équation du rendu : pour calculer l'éclairage direct par les sources étendues, pour évaluer l'éclairage indirect pondéré par les BRDF, pour réaliser l'intégration sur un pixel. Sa particularité est de faire débuter l'échantillonnage uniquement depuis les pixels.

Durant le TD4 vous avez déjà implémenté cette intégration sur le pixel (anti-aliasing) et pour l'éclairage direct (source étendue). Pour prendre en compte l'éclairage indirect, il vous suffit d'ajouter l'échantillonnage de la BRDF du TD5 à l'intégrateur de Whitted. En pratique, implémentez le nouvel intégrateur PathMats, où vous lancerez un rayon secondaire (appel récursif à Integrator::Li) dans la direction indiquée par l'importance sampling de la BRDF. Répétez récursivement ainsi jusqu'à ce qu'une profondeur maximales soit atteinte.

Testez sur la scène "box.scn", vous devriez obtenir les résultats suivant :

path tracing path tracing
5x5 chemins par pixel 20x20 chemins par pixel

L'utilisation d'un critère d'arrêt arbitraire sur la profondeur de l'arbre des rayons n'est pas satisfaisante (cela introduit un biais dans l'intégration). Au delà du troisième rebond, mettez en œuvre un mécanisme de roulette Russe pour y remédier. Utilisez l'intensité de la couleur ambiante du matériau (moyenne des canaux) comme coefficient d’absorption.

Testez sur cette version de la Cornell Box, vous devriez obtenir :

path tracing
25x25 chemins par pixel