Sunday, December 2, 2007

Tone mapping resultaten

Tone mapping

Tone mapping is het proces waarbij de HDR range wordt terug gebracht naar een LDR range. Enkele van de mogelijke technieken zijn in een vorige post al aan bod genkomen, maar nu dus ook effectief resultaten. De 2 reeds geïmplmenteerde tone mapping operators zijn die van Reinhard en de aangepaste Reinhard operator.

Hier wordt telkens het zelfde image getoond, eerst met gewoon de reinhard operator, dan de aangepaste reinhard operator met 8.0 als waarde voor de 'white luminance'.

Key value: 0.15




Key value : 0.3



Key value : 0.6







Thursday, November 15, 2007

Ashikhmin-Shirley Reflection Model

Ik heb vandaag dit model geïmplementeerd in RGB vorm. De spectrale versie zou voor morgen moeten zijn en zou niet zo veel problemen mogen opleveren.

Het model is nog vrij recent, de paper dateert uit 2000, en is een veel gesofisitceerder BRDF dan het eenvoudige phong model. Het houdt o.a rekening met energiebehoud en Fresnel effecten. Het voorziet anisotropische reflectie zodat het steperige effect dat op metalen kan voorkomen kan gesimuleerd worden.

Het model heeft 4 parameters waarmee het voorkomen kan aangepast worden. De diffuse en speculaire kleur en 2 parameters die vergeleken kunnen worden met de phong parameter. Het grootste probleem bij de implementatie was het genereren van de binormaal en raakvector per vertex. Maar uiteindelijk is er toch een redelijk mooi effect uitgekomen waarvan hieronder een voorbeeld.
Input:
Kd =1,0,0
Ks = 0.9,0.9,0.9
de 2 andere parameters: 100 en 10

In dit image is er ook een ambient licht van 0.3,0,0

Dit weekend hopelijk een spectrale versie.

Eindelijk mooie prentjes en een globale update

In de voorbije weken heb ik me vooral bezig gehouden met maken van de basis viewer. En ook de beloofde prentjes zijn hier uiteindelijk.

Deze heeft al enkele basisfunctionaliteiten zoals daar zijn:

a) Een kleur voorgesteld als een RGB triplet wordt omgezet dmv de methode van Smits. Dit wil zeggen dat een combinatie gemaakt wordt van de 7 basisfuncties en we voor de rest werken met 10 waarden ipv de standaard 3 voor rgb. De voordelen hiervan zijn direct duidelijk zoals ik ook op de presentatie getoond heb, voor de volledigheid staan die voorbeeldjes ook hieronder. Eerst een rode bol beschenen met een wit licht in rgb, dan diezelfde bol maar dan met een blauw licht. Op de 2de figuur is niks te zien wat logisch is aangezien we 1 0 0 en 0 0 1 gaan vermenigvuldigen wat resulteert in 0 0 0. Maar fysisch is dit uiteraard niet correct.


In het spectrale geval ziet dit er allemaal veel logischer uit zoals we hier onder zien. Aangezien de spectrale curves overlappen blijven er toch nog waarden over in het eindresultaat. De berekeningen worden hier in een vertex en fragment shader gedaan in de cg taal. Het berekenen van de kleur wordt in de fragment shader gedaan aangezien dat een gladder verloop geeft dan het per vertex berekenen.


b) Daarna heb ik het standaard phong model 'spectraal gemaakt' wat uiteindelijk wil zeggen dat de rgb waarden vervangen worden door een array van 10 waarden. Het resultaat is een shading die hetzelfde kleur probleem oplost als hier boven uiteraard en ook een specular highlight kan weergeven op het licht.


c) Aangezien het een viewer moet zijn is er ook functionaliteit om het object in kwestie te draaien en in/uit te zoomen. Op mijn PC thuis (met een GeForce 7800GT) haalt dit minimum een fps waarde van 60.

Verder heb ik ook geexperimenteerd met de FBO extension van openGL om zodoende een zekere vorm van tonemapping te kunnen doen. Het geen er gebeurd is dat de resultaten van het renderen met de shaders ipv naar het scherm naar de framebuffer gestuurd worden. Als ze dan eenmaal in deze buffer zitten kan ik er een waarde uithalen en deze gebruiken om een bewerking te doen op die data. De bewerking is dan het tonemappen. En deze veranderde gegevens worden dan op een quad 'geplakt' en zo naar het scherm gestuurd. Het resultaat is echt nog niet helemaal wat het moet zijn, dus ook nog geen prentjes.

De volgende stappen qua implementatie zullen zijn het Ashikhmin-Shirley Reflection Model trachten spectraal te implementeren als een gesofisticeerder BRDF en verder werken aan de tonemapping.

Aanvullende literatuurstudie

Aangezien het de bedoeling is dat er uiteindelijk gebruik gemaakt wordt van een environment map belichting en niet 1 puntlichtbron zoals nu het geval is heb ik enkele papers gelezen over dit onderwerp. Daaruit zal ik nu de 2 die het meest relevant lijken kort bespreken.

De eerste is "An Efficient Representation for Irradiance Environment Maps" (Ramamoorthi en Hanrahan) waarin ze diffuse object willen belichten met 'verre' belichting voorgesteld door environment maps. De basis van deze paper is dat de de irradiantie voorstellen als een som van sferische harmonische coëfficienten. Er wordt aangetoond dat de hogere frequenties weinig tot geen bijdrage leveren en daarom zijn de 9 eerste coëfficiënten voldoende om de irradiantie voor te stellen. Verder wordt deze voorstelling dan gebruikt om eerst via prefiltering de 9 corresponderende lichtcoëfficiënten te berekenen, daarna worden deze gebruikt voor een renderingsproces. De gemiddelde fout die het gebruiken van enkel 9 coëfficiënten induceert ligt onder de 1% en de grootste fout ligt onder de 5%.
Voor het renderingsproces wordt een eenvoudige matrix vermenigvuldiging opgesteld die de irradiantie berekent afhankelijk van de normaal. Dit zou heel snel moeten werken op de GPU aangezien deze geoptimaliseerd is voor o.a matrixbewerkingen.
Het nadeel van de techniek in deze paper (wat ze ook zelf aangeven in hun conclusie) is dat het enkel bedoelt is voor diffuse objecten. Daarom zal het waarschijnlijk niet voldoende zijn voor de thesis.

De 2de paper is eentje gerefereerd in de vorige met name: "A Unified Approach to Prefiltered Environment Maps" (Kautz et al.) Deze paper geeft eerst een algemene beschrijving van hoe een prefiltered environment map. Deze is dan vijfdimensionaal, 2 dimensies voor de kijkrichting en 3 om het coordinatenframe voor te stellen. Dan worden de gekende technieken op een rijtje gezet en hoe het aantal dimensies dan verlaagt. De technieken die men aanhaalt zijn diffuus, phong en 2 types van isotrope BRDF's. Bij die laatste is een belangrijk aspect dat de reflectielobes radiaal symmetrisch worden verondersteld.
Wat de paper nieuw aanbrengt zijn methodes om het prefilteren effectief uit te voeren. Men baseert zich op het feit dat prefilteren kan gezien worden als een filter die in de ruimte varieert. De waarden in de doelmap zijn de gewogen waarden uit de bronmap en voor het wegen wordt een filter gebruikt. En die filter is dan afhankelijk van de BRDF in kwestie. De filter varieert in de ruimte aangezien een filter op een bol altijd verschillende vormen aanneemt plus we mappen van een bol naar een rechthoek.
Het eerste model is een hierarchisch model, wat men in essentie doet is een mip-map maken van de bronmap en van de filter. Dan gaat men van het kleinste niveau beginnen en zo omhoog werken. Wanneer het vershcil tussen het lagere niveau en het volgende klein genoeg is zal men vermenigvuldigen met de corresponderende waarde uit de filter mip-map.
Het tweede model is specifiek gefit op de mogelijkheden van de hardware zodat men kan prefilteren 'on the fly'. Men gebruikt de cirkelvormige filter op een paraboloide map van de environment. Aangezien dit vervormingen geeft aan de randen naarmate de radius van de filter vergroot en de afstand tot het centrum zal men 2 keer prefilteren. Zowel met de grootste als de kleinste radius voor de filter en deze 2 dan blenden. In de paper wordt het wel enkel voor phong gebruikt aangezien dit voldoet aan alle voorwaarden voor de methode. Daarom dat het waarschijnlijk niet algemeen genoeg is om voor de thesis te gebruiken.

Sunday, October 14, 2007

Enige papers

De voorbije weken weer enige papers gelezen waaronder enige die relevant bleken te zijn voor het onderwerp. Ook een paar die wel zijdelings raken aan het onderwerp maar niet direct binnen de context passen. Zoals bijvoorbeeld "Picture Perfect RGB Rendering Using Spectral Prefiltering and Sharp Color Primaries" door o.a Greg Ward. Hierin wordt een oplossing voorgesteld voor het probleem maar zonder het gebruik van volledige spectrale data. En net dat is het doel van deze thesis. Er is ook de paper waarin de Cg taal wordt voorgesteld, maar deze heb ik enkel diagonaal doorgenomen om een beetje achtergrond info the hebben.

Qua echt relevante papers is er eerst "Wavelength Dependent Reflectance Functions" door Gondek, Meyer en Newman. Deze stellen een BRDF voor die ook de golflengte in rekening brengt. Om deze BRDF voor te stellen gebruiken ze een "geodesic sphere" wat een bol is opgebouwd uit vlakken. In zijn simpelste vorm zijn dit 2 piramides op elkaar. In een iets meer opgedeelde vorm is het iets als hieronder. Opdelen is ook de manier waarop data wordt bijgehouden, voor elk van de 8 basisvlakken is er een quad-tree die een variërende bemonsteringsresolutie voorstellen. Het gaat hier om een bol omdat men ook transmittantie in rekening brengt. Deze vorm van reflectanties opslaan in een aangepaste BRDF is zeker iets om in het achterhoofd te houden.


De volgende paper is "A Composite Spectral Model and Its Applications" van Sun, Fracchia en Drew, deze gaat verder op het composite model dat door dezelfde mensen voorgesteld is in "Representing spectral functions by a composite model of smooth and spiky components for efficient full-spectrum photorealism". Het basis idee is dat ze het zachtverlopende deel voorstellen met enkele fouriercoëfficiënten en het 'spiky' gedeelte met een deltafunctie met plaats en gewicht naar gelang de hoogte. In deze paper wordt nog een verbetering voorgesteld waarbij het zachtverlopend gedeelte herbemonsterd wordt om zo het vermenigvuldigen van spectra veel minder rekenintensief te maken. Zo wordt bekomen dat de hoeveelheid rekenwerk lineair stijgt. Daar waar bij de voorstelling met lineaire functies of veeltermen dit O(M²) is.

Verder heb ik deze week ook een hoop tijd gestoken in een eerste viewer die met spectrale data moet werken. Bij gebrek aan echte data gebruik ik op dit moment de methode van Smits om RGB waarden om te zetten naar spectra. Prentjes zijn er op dit moment nog niet maar normaal gezien zouden die in de loop van de week moeten verschijnen.

Monday, October 1, 2007

Officiële kick-off

Nu het academiejaar ook officieel onderweg is wordt het maar eens tijd dat ook dit thesisblog nuttig gevuld wordt. Voor de geintresseerde maar misschien minder geinformeerde lezers die hier toevallig op terecht komen misschien eerst een korte samenvatting van het onderwerp. Daarna zal ik een overzichtje geven van hetgene al gebeurd is in (vooral) de afgelopen anderhalve maand.


De probleemstelling.

Een gekend probleem in computergraphics is de beperking die het RGB (of welk 3 waarden kleurmodel dan ook) oplegt aan de nauwkeurigheid van een kleurvoorstelling. Aangezien kleuren in feite een continue verdeling zijn over het hele golflengtespectrum gaat veel info verloren als we dit terug brengen naar enkel 3 waarden. We kunnen dan ook niet verwachten om uit bewerkingen met enkel deze 3 waarden exacte kleurresultaten te krijgen. Dit heeft als gevolg dat verschillende fysische fenomenen moeilijk gesimuleerd kunnen worden in de standaard renderingstechnieken. Voorbeeldjes zijn metamerisme, fluorescentie, dispersie, gepolarizeerd licht, etc.Het doel van deze thesis is dan ook om de volledige spectrale info zo lang mogelijk in het renderingsproces te bewaren om zodoende veel nauwkeuriger kleuren te bekomen. Meer in praktijk zou het resultaat gebruikt kunnen worden om bijvoorbeeld de reflecties van materialen onder verschillende belichtingen te vergelijken. Dit alles dient dan ook nog eens in realtime op het scherm getoverd te worden om zodoende een praktische viewer over te houden.

Reeds geleverd werk.

Na de examens in juni kreeg ik een thesis getiteld 'Multispectrale Rendering' in de handen geduwd en een hoop bronnen voor papers over graphics om van te starten. Die thesis geeft een mooi overzicht van enkele manieren om spectrale licht informatie voor te stellen alsook enkele effecten waarvoor spectrale gegevens broodnodig zijn. Er werden een viertal methodes om spectra voor te stellen besproken: bemonstering, getabuleerde bemonstering, fouriervoorstelling en een composietvoorstelling. Het opzoeken van hun referenties en andere bronnen leerde echter dat er heel wat lichte variaties bestaan op het voorstellen van een spectrum dmv basisfuncties. Dit is dan ook een eerste subprobleem, de meest efficiënte voorstelling vinden voor de spectra. Ik heb een aantal papers gelezen over dit onderwerp, sommige waren echter iets te geavanceerd, zeker in dit stadium van de thesis. De belanrijkste blijven de thesis over multispectrale rendering en 'A Composite Model for Representing Spectral Functions' door o.a Sun. In deze laatste wordt het composiet model uitgewerkt. Andere papers die ik onlangs gelezen heb: 'Linear Color Representations for Full Spectral Rendering' en 'Interactive Full Spectral Rendering'. Beide van o.a M.S Peercy. De eerste geeft een voorstellingswijze van spectra op basis van een set basisfuncties wat het berekenen van resulterend licht terug brengt tot eenvoudige matrix berekeningen. Ook geeft hij een manier weer om aan deze basisfuncties te komen. De 2de gebruikt deze voorstelling om een renderen te maken, maar aangezien deze paper dateert van midden jaren '90 was de technologie toen nog lang niet zo geavanceerd en is het daarom minder relevant.

Het 2de subprobleem bevindt zich aan het ander einde van de renderingpipeline. Met name een High Dynaminc Range resultaat converteren naar een Low Dynamic Range versie voor weergave op bijvoorbeeld een scherm. Het probleem is namelijk dat in de 'echte wereld' de range waarin lichtintensiteit zich bevindt verspreid ligt van 10^-6 cd/m² tot 10^6 cd/m². Daar waar een gewone display slechts een fractie van die range kan weergeven. De oplossing hiervoor heet tonemapping waarbij de hele range van intensiteiten wordt terug gebracht binnen een beperkte range. Enekele van de relevante papers die ik hierover gelezen heb zijn 'Realtime HDR Rendering' van Christian Luksch, 'Perceptual Effects in Real-time Tone Mapping' van o.a G. Krawczyk. Ook zou ik het boek van E. Reinhard, 'High Dynamic Range Imaging: Acquisition, Display, and Image-Based Lighting' moeten lezen, maar blijkbaar is Standaard Boekhandel niet echt geweldig snel in het leveren daarvan. Maar hopelijk komt het deze week toe zodat ik daar in kan duiken.

Het derde subprobleem is uiteraard hoe dit moet geimplementeerd worden zodat het in realtime kan weergegeven worden. Aangezien de meeste graphicsrekenkracht in de GPU zit is het logisch dat we rechtstreeks daarop zullen gana programmeren. Daarom ben ik dan ook begonnen met het leren van openGL en Cg. Een eenvoudige viewer in openGL en een simpele test van het concept vertexshader heb ik reeds gemaakt. Maar nog niks spectaculair genoeg om hier te tonen.

Dit was dan een klein overzicht van wat ik reeds gedaan heb. In de komende weken zal ik vooral meer moeten lezen, uitvissen hoe ik die spectrale voorstellingen naar Cg en openGL krijg en realtime tonemapping moeten bestuderen. En normaal gezien zal ik vanaf nu ook elke week een update trachten te geven van de vooruitgang die geboekt is.