TD4 - Sources étendues et Path Tracing
AreaLight représentant une source lumineuse étendue carrée.
Complétez sa méthode calculant l'intensité émise depuis le point \(y\) sur la source vers le point \(x\) de la scène :
Color3f AreaLight::intensity(const Point3f &x, const Point3f &y) const
Whitted pour tirer un rayon d'ombre dans une direction aléatoire vers la source étendue.
Pour déterminer cette position, utilisez les vecteurs unitaires AreaLight::uVec et AreaLight::vVec
ainsi que la position et la taille de la source.
Notez que l'on peut détecter qu'une Light est une AreaLight avec
un dynamic_cast :
1 2 3 4 5 6 7 8 9 | if(dynamic_cast<const AreaLight*>(lights[i])) { const AreaLight* light = dynamic_cast<const AreaLight*>(lights[i]); // source étendue } else { // lampe ponctuelle ou directionnelle } |
AreaLight::intensity pour accéder à l'attribut Bitmap m_texture. Ajoutez également la ligne suivante au fichier de scène :
<light type="areaLight"> <string name="texture" value="light_source.exr" /> <!-- le reste est identique --> </light>
Vous devriez obtenir ce résultat pour
...et pour
Il est évidemment possible de combiner les deux approches, puis d'ajuster le nombre d'échantillons par pixel et par source étendue pour obtenir la qualité souhaitée.
Votre code implémente déjà 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 TD3.
En pratique, créez un nouvel intégrateur PathTracer basé sur celui de Whitted où vous lancerez un rayon
secondaire (appel récursif à Integrator::Li) dans la direction indiquée par l'importance sampling de la BRDF.
Testez sur la scène
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). Mettez en œuvre un mécanisme de roulette Russe pour y remédier. Vous pouvez utiliser la couleur ambiante moyenne du matériau comme coefficient d’absorption.
Remerciements