maandag 4 mei 2009

Combinatie DCT en Monte Carlo

Een tweede mogelijkheid (naast subpixelsampling en het verschoven grid) om ervoor te zorgen dat minder artefacten gemist worden bij het DCT algoritme bestaat erin om in verschillende fases te werken:

1. Eerst wordt voor elke pixel een aantal samples genomen
2. Daarna wordt adhv de DCT per blokje van 8x8 beslist of er meer samples genomen
3. Neem opnieuw voor elke pixel een aantal samples
enz...

De resultaten van deze methode:

vrijdag 1 mei 2009

Oplossing geen convergentie naar referentieprentje

De presentatie die ik gegeven heb tijdens de Paasvakantie met de resultaten tot dan is hier te vinden. Het probleem was dat de methode die gebruik maakt van de DCT, randeffecten mistte. Een illustratie van die randgevallen is hier te vinden.
Er zijn twee mogelijke oplossingen voor dat probleem.
* Enerzijds is het mogelijk om het beeld op te delen ipv op pixel niveau in subpixel niveau. Dat heeft als voordeel dat een blokje van 8x8 dan niet overeenkomt met 8x8 pixels maar op een kleiner stuk van het beeld. Zo kan het aantal pixels dat volledig gemist wordt drastisch verkleind worden. Het probleem van het missen van de artefacten blijft natuurlijk bestaan. De verwachting is dus dat er nog steeds geen convergentie zal zijn naar het referentie beeldje maar dat er toch uiteindelijk een kleinere fout behaald wordt.
* Een betere oplossing bestaat erin om met twee grids te werken: één op het gewone niveau en één grid 4 pixels verschoven in de diagonale richting. Zo is het niet meer mogelijk dat een artefact een randgeval is elk blokje.
De resultaten van de theepot met puntlichtbron zijn weergegeven in onderstaande grafiek:



We zien dat zoals verwacht beide methodes een beter resultaat geven. De methode van de subpixel bemonstering volgt in eerste instantie het traject van standaard monte carlo. Dit is omdat in elk subpixel segment monsters moeten genomen alvorens een schatting van de DCT kan worden berekend. Het samplen van elk subpixelsegment is net wat gestratifieerde bemonstering doet dus is het normaal dat die twee grafieken bij elkaar aansluiten.

donderdag 26 februari 2009

Resultaten

Na een lange periode van stilzwijgen zal ik de resultaten bekendmaken van mijn Raytracer gebaseerd op de DCT.
Om de voortgang en de verbetering van het algoritme in beeld te brengen heb ik voor een aantal stappen de vergelijking gemaakt met een referentieprentje (200 stralen per pixel)


Referentieprentje
200 stralen per pixel


Wanneer we nu 1M samples nemen (het equivalent van 4 samples per pixel op een 512*512 prentje) dan krijgen we:



We kunnen nu eenvoudig het verschil berekenen met het referentieprentje:


Wanneer we nu hetzelfde doen voor verschillend aantal stralen en we berekenen het gemiddelde verschil dan krijgen we volgende grafiek:



Wanneer we nu hetzelfde doen voor standaard monte carlo raytracing. Dan zien we dat de fout bij standaard monte carlo, linear afneemt en dat we met behulp van de DCT analyse ervoor kunnen zorgen dat het verschil sneller afneemt omdat we uiteraard concentreren op de plaatsen waar de grootste verschillen optreden.