donderdag 7 mei 2009

Beter behandelen van lichtbronnen

De hoeveelheid werk die ERPT levert is afhankelijk van de energie van een pad (bijdrage aan een pixel). Hoe hoger die energie, hoe meer het pad gemuteerd zal worden. Paden van de vorm ES*L (paden tussen de camera en de lichtbron, en paden die vanuit de camera via een aantal speculaire botsingen de lichtbron bereiken) hebben een hoge energie, maar hebben eigenlijk niet zoveel werk nodig. Een onevenredig groot deel van de rekentijd wordt dan verspild aan het muteren van deze paden. Om dit te vermijden hebben we besloten om de bijdrage van deze paden in een aparte pass van het algoritme te berekenen.

Deze pass werkt ongeveer zoals een pathtracer, met als verschil dat we zodra we een diffuus oppervlak tegenkomen we stoppen en geen bijdrage registreren, tenzij dit een lichtbron is. Wanneer we een speculair oppervlak tegenkomen, sturen we een ray in elke mogelijke reflectie of refractie richting. Alle lichtbronnen en reflecties van lichtbronnen en zo voort zijn dan bepaald. In het hoofdalgoritme worden deze paden dan gewoon genegeerd. Op deze manier berekenen we efficiƫnt de rechtstreekse bijdragen van de lichtbronnen zonder ruis te introduceren.

Geen opmerkingen: