woensdag 26 november 2008

Nieuwe scenes

Om ons algoritme verder te testen hebben we een paar nieuwe scenes met lastige belichtingssituaties gemaakt. De eerste bevat een glazen "Stanford Bunny", waarmee we nagaan of ons algoritme met grotere aantallen primitieven (in dit geval ongeveer 70000) kan omgaan. Deze scene kan vooral ook gebruikt om de complexere caustics te evalueren.

Referentie met path tracer

Gerendert met Erpt (vrij lage kwaliteit en foute caustics)

Een tweede scene wordt de lichtbron en een box geplaats die enkel open is aan de bovenkant. De scene wordt hierdoor bijna alleen indirect verlicht.

Referentie met Path tracer

Gerenderd met ERPT in zelfde rekentijd

Voor de laatste scene kunnen we zien dat ERPT duidelijk beter presteert. Enkel de hoeken blijven een pijnpunt.

Debug tijd: Speculaire objecten

We zijn er in geslaagd om voor lens perturbations de acceptance probability op een correcte manier te evalueren. Voor caustic perturbations is dit echter niet gelukt. We hebben de auteurs van de relevante papers gecontacteerd om meer inzicht te krijgen in deze materie, maar hebben tot nu toe geen bevredigend antwoord gekregen. Voorlopig zitten we daar klem. Als alternatief gaan we een ander soort mutatie implementeren (zie een latere blog post).

We geven nog enkele afbeeldingen die gebruik maken van onze verbeterde lens perturbations. We zien enkel de paden van de vorm ESD... en ESSD... Een aantal types paden ontbreken, maar om de correctheid van lens perturbations vast te stellen is dit voldoende.


Referentie door pathtracer



Afbeelding gerendert met Erpt

We zien dat qua belichting de twee beelden nagenoeg identiek zijn op een paar artifacten na. We zien ook dat het beeld gerenderd door Erpt veel minder ruis bevat voor ongeveer de zelfde rekentijd. Gelijkaardige tests voor de caustic perturbations zijn helaas gefaald.

woensdag 19 november 2008

Debug tijd : Diffuse scenes

Na het correct evalueren van de directe belichting bleek het vrij eenvoudig om op een correcte manier diffuse scenes te renderen (inclusief indirecte belichting).


Diffuse scene gerenderd met onze ERPT implementatie.

Diffuse scene gerenderd met een standaard path tracer

Deze scenes zijn nagenoeg gelijk. Bij ERPT zien we in de hoeken nog te heldere pixels. Deze artifacts zijn inherent aan het algoritme, en dus moeilijk te verwijderen op een elegante manier. Ze zijn een gevolg van een zeer grote geometrische term in het oorspronkelijk pad, waardoor de acceptance probability van mutaties zeer laag is. Hierdoor blijft het pad steeds in dezelfde pixel, en zet het daar al zijn energie af.

Op deze moment zijn we nog bezig met het aanpassen van de acceptance probabilities voor paden die speculaire nodes bevatten. To be continued...

Debug tijd : Directe belichting

Bij het vergelijken van de resultaten van ons ERPT algoritme met die van een path tracer, zijn we tot de conclusie gekomen dat de belichting fout was. Om de fout in onze implementatie te vinden hebben we op een systematische manier de mutaties gedebugd. We zijn hiermee begonnen door enkel directe belichting in overweging te nemen. Dit is een van de eerdere resultaten :


Afbeelding gerenderd met foutieve ERPT implementatie.

Hier is te zien dat de belichting geconcentreerd is in het midden van de muren. De sterkte en grootte van de lichtvlekken zijn afhankelijk van de perturbatie grootte. Om dit heel duidelijk te maken hebben we een zeer grote perturbatie gekozen. De volgende afbeelding is een reference image, gerenderd met een standaard path tracer. Dit is hoe de directe belichting er uit zou moeten zien :


Afbeelding gerenderd met een path tracer

Onze conclusie was dat er iets fout was met de waarschijnlijkheid waarmee mutaties aanvaard worden. Mutaties naar het centrum van de muren toe werden meer aanvaard dan zou mogen. Het voorgaande ging enkel over caustic perturbations, maar lens perturbations vertoonden ook gelijkaardige problemen.

Bij het nader bekijken van de formules voor het berekenen van de acceptance probabilities in de relevante papers, bleek dat deze formules niet consistent zijn. Het is ook moeilijk om de oorsprong van deze formules te achterhalen. In een poging om meer duidelijkheid te scheppen hebben we de schrijvers van de ERPT paper gecontacteerd. Op basis van hun advies en onze eigen intuïtie zijn we er in geslaagd om juiste resultaten te verkrijgen in het geval van directe belichting. Deze resultaten zijn nagenoeg gelijk aan dat van de path tracer (op wat ruis na).

woensdag 12 november 2008

Eerste resultaten ERPT

De volgende mijlpaal bij het implementeren van PMC-ER is het maken van een werkende ERPT implementatie. Door dit te doen kunnen we onze mutatie code vroeger debuggen. Deze week hebben we ons daarmee bezig gehouden. Dit zijn de eerste resultaten :

Rendertijd : ongeveer 3 minuten

Op de platte oppervlakken is het te zien dat er over het algemeen minder ruis is, maar dat er wel vlekken en clusters voor in de plaats zijn gekomen. Deze ruis is het sterkst aanwezig in hoeken en grensvlakken.
Rendertijd : ongeveer 35 minuten

In deze afbeelding is nog steeds ruis in de hoeken te zien, maar de oppervlakken zijn wel mooi 'glad'. Verder is de rendering op bepaalde plaatsen nog iets te donker, wat er op wijst dat er nog enkele foutjes in de code zitten. Deze week gaan we ons vooral bezighouden met het debuggen van de mutatiecode.
Rendertijd : ongeveer 45 minuten

In deze rendering zien we dat de caustics aanwezig zijn (al zien ze er niet uit zoals ze moeten). Ook de reflectie en de refractie zijn min of meer geslaagd en bevatten relatief weinig ruis. Toch zijn er nog een aantal fouten te zien : Vlekken op de muren, slecht gevormde caustics, te heldere reflecties, en op sommige plekken is de afbeelding weer te donker.

Zoals reeds vermeld gaan we deze week proberen om de oorzaken van deze fouten te vinden (en op te lossen). Verder gaan we ook nog wat experimenteren met de parameters van het algoritme om te zien wat de beste resultaten geeft.

woensdag 5 november 2008

Updates implementatie

In onze vorige post hebben we het resultaat van een eenvoudige pathtracer (volgens de path integraal formulering) getoond. Bij het vergelijken ervan met reference images gerenderd met een standaard path tracer hebben we echter gemerkt dat het resultaat niet volledig overeen kwam. De randen van de afbeelding bleken onder andere te licht te zijn. We vermoeden dat dit komt doordat de pdf niet altijd juist geevalueerd werd.

De laatste week hebben we onder andere een nieuwe path sampling methode geschreven. Deze werkt ongeveer als volgt :
  • Een path wordt geconstrueerd in de scene en beëindigd met russian roulette.
  • Vervolgens proberen we elke node in dit path expliciet met een lichtbron te verbinden.
  • We checken dan of het resulterende path geldig is : of het licht de camera wel kan bereiken.
  • Uit alle geldige paden kiezen we er willekeurig een uit.
Deze methode heeft als voordeel dat er met grotere kans een geldig path wordt gekozen, en de pdf's zijn eenvoudig te berekenen. Nadeel is dat er iets te veel werk wordt uitgevoer voor paden die later niet gaan worden gekozen. Dit is echter geen al te groot probleem, omdat slechts een klein deel van de paden die geëvalueerd gaan worden op deze manier worden aangemaakt.

Hier is een rendering die gebruikt maakt van deze sampling methode. Links is de afbeelding gerenderd met onze nieuwe path sampler.







Dit is een afbeelding van ongeveer dezelfde kwaliteit, gerenderd met een standaard geoptimaliseerde path tracer. (implementatie van PBRT)







Verder hebben we ook een aantal andere zaken gedaan deze week zoals het begin van de implementatie van lens perturbaties.