TD4 - Photon Mapping

1. Émission et tracé des photons

Dans un premier temps il nous faut tracer l’ensemble des chemins lumineux en generant des photons depuis les sources lumineuses et en les “lançant” dans la scene. Ainsi de maniere aléatoire on vas selectionner une source lumineuse dans la scene. Cette source vas créer un photon qui sera positionné aléatoirement sur la surface de la source avec une direction échantilloné dans le demi hemisphere orientée dans le plan tangeant de la source. ensuite on “lance” ce photon dans la scene comme s’il s’agissait d’un rayon. Dans le cas d’un intersection plusieurs cas de figures se posent. Néanmoins dans tout les cas l’idée reste la même. En effet, quand un photon rencontre une surface on vas calculer une nouvelle direction (“rebond” du phonton) et l’energie que celui ci perd lors de cette “collision”. Le calcul de la direction dépend de la nature de la surface intersectionnée:

Comme critere d’arret de la continuation du chemin lumineux on met en place une roulette russe. Ce mécanisme d’arret est conditionner par un rapport entre l’energie entrante et l’energie sortante lors d’une intersection. Ainsi après chaque intersection, on calcule ce rapport, et on le compare a un nombre tiré aléatoirement. Si le rapport est supérieure au nombre obtenus alors on continue, sinon on stop le chemin lumineux et on tire un autre photon.

Afin de calculer l’energie sortante, on pondere l’energie entrante par la pdf, la brdf et le rapport entre les energies. Ainsi, l’energie diminue petit a petit tout le long du chemin lumineux.

Tracer tout ces chemins lumineux dans la scène nous permet de construire une photon map qui contiendra l’emplacement de tout les photons avec des surfaces diffuses de la scene, la direction incidente du photon lors de l’intersection et l’énergie que le photon “dépose” sur la surface. Cette photon map nous sera utile dans la prochaine partie.

2. Estimation de la radiance

Afin de visualiser la scene, on vas lancer des rayons depuis la caméra de la même maniere que pour la méthode du Path Tracing. A la seule difference que quand un rayon intersecte une surface diffuse on viens chercher dans la photon map tout les photons proches du point d’intersection pour évaluer la radiance au point d’intersection. Dans le cas de surface emissive, reflectives ou refractives on continue le chemin de vue kusqua atteindre une surface diffuse ou atteindre le niveau de reccursion maximal. Quand on extrait de la photon map les photon proches on utilise les forumles suivante pour évaluer la radiance:

$$ L_{o}(p \leftarrow \omega_o) \approx \frac{1}{N~w^2} \sum_{i=0}^{N} K\left(\frac{p-p_i}{w}\right) ~ \Phi_i ~ \rho(p,\omega_o,\omega_i) $$

Où:

3. Résultats

Voici les résultats de mon implémentation du photon map. À gauche on à 1 million de photons pour un rayon par pixel de la camera et à droite, 10 millions de photons et 5x5 rayons par pixel de la camera.

pmap_1M_1x1 pmap_1M_1x1

Liens utiles

Page du td

Archive contenant le code source