update :
Tuesday, April 22, 2008
Monday, April 14, 2008
Meer renderings probleempjes opgelost
Het probleem dat ik in mijn vorige post aanhaalde van de theta waarden die te groot werden bleek zich zelfs op 2 waarden voor te doen.
a) De ThetaOut (dus de hoek tussen de normaal in een vertex en de viewvector) ging van nul tot Pi ipv nul tot 90° zoals we zouden wensen Dit is opgelost door wanneer de z waarde van de view vector kleiner dan nul is Pi af te trekken.
b) De theta waarden die gebruikt worden om de environmentmap te samplen werd soms groter dan Pi aangezien de µ waarden er bij moeten opgeteld worden voor beide gaussfuncties. En aangezien de theta waarden zelf al tussen 0 en Pi liggen ligt het voor de hand dat als we hierbij waarden gaan optellen deze buiten het interval terecht kunnen komen. De oplossing hiervoor is gewoon modulo Pi te doen bij wijze van spreken aangezien het image in theta de hele cirkel beschrijft. (rechterkant van het image loopt dus over in de linkerkant).
Het resultaat van deze aanpassingen staat hieronder.
Het is zichtbaar nog niet echt correct, het probleem met het inlezen van het texture blijft zich voor doen.
Op aanraden van mijn begeleider heb ik ook het formaat van het in te lezen texture veranderd van GL_HALF_FLOAT_NV naar GL_FLOAT (en alle halfs ook eerst geconverteerd naar floats uiteraard) Dit blijkt echter nog geen oplossing te zijn voor het probleem met het inlezen van het texture. Ik zoek uiteraard naarstig verder.
Toevoeging: inhoudstafel
a) De ThetaOut (dus de hoek tussen de normaal in een vertex en de viewvector) ging van nul tot Pi ipv nul tot 90° zoals we zouden wensen Dit is opgelost door wanneer de z waarde van de view vector kleiner dan nul is Pi af te trekken.
b) De theta waarden die gebruikt worden om de environmentmap te samplen werd soms groter dan Pi aangezien de µ waarden er bij moeten opgeteld worden voor beide gaussfuncties. En aangezien de theta waarden zelf al tussen 0 en Pi liggen ligt het voor de hand dat als we hierbij waarden gaan optellen deze buiten het interval terecht kunnen komen. De oplossing hiervoor is gewoon modulo Pi te doen bij wijze van spreken aangezien het image in theta de hele cirkel beschrijft. (rechterkant van het image loopt dus over in de linkerkant).
Het resultaat van deze aanpassingen staat hieronder.
Op aanraden van mijn begeleider heb ik ook het formaat van het in te lezen texture veranderd van GL_HALF_FLOAT_NV naar GL_FLOAT (en alle halfs ook eerst geconverteerd naar floats uiteraard) Dit blijkt echter nog geen oplossing te zijn voor het probleem met het inlezen van het texture. Ik zoek uiteraard naarstig verder.
Toevoeging: inhoudstafel
Monday, April 7, 2008
Update \o/
Vooreerst, er zijn ondertussen echte environmentmaps opgemeten in een light booth. Dit is een toestel met een aantal lampen die een bepaalde standaard naleven. Dit wil zeggen dat het spectrum van deze belichting gekend is en dus ook kan gebruikt worden in mijn software. Behalve de environmentbelichting zelf hebben we ook 3 objecten in de booth geplaatst en deze gefotografeerd onder elke belichtingsconditie. Ook zijn de reflectantiespectra van de materialen/kleurvlakken op de voorwerpen opgemeten. Het doel hiervan is nu deze reflectantie - en lichtspectrumdata te gebruiken om de realiteit na te maken in mijn viewer. Dit zowel in RGB als spectraal om zodoende het onderlinge verschil als het verschil met de echte foto te kennen.
Noot: al deze foto's werden uiteraard in HDR genomen.
Dan de software zelf uiteraard. De volledige pipeline voor de environmentbelichting is ondertussen up and running. Maar nog niet bugfree spijtig genoeg.
Een eerste probleem dat ik tegen gekomen ben is dat ik views berekend heb voor een elevation angle tussen 0 en 90°. Maar als deze hoek berekend wordt zijn er natuurlijk ook regio's waar die hoek groter dan 90° is. Het diffuse gedeelte kan wel gespiegeld worden, maar hoe dit met het speculaire gedeelte zit is op dit moment nog een beetje wazig. Ter illustratie hieronder een theepot waarbij het gele stuk elevation angle [0-90°] en het magenta gedeelte is elevation angle (90-180°] Zoals in de verdere images te zien is zijn deze stukken op dit moment nog gewoon zwart.

Vervolgens staat er in de paper van Green et al. dat zij de gewichten, standaarddeviaties en µ-waarden in een texture steken om deze zo door te geven aan de shader. Ik heb enige problemen gehad met dat effectief te laten werken en heb er daarom voor geopteerd om deze door te geven als matrices. Deze kunnen ook heel efficient aangesproken worden binnen de shader en het komt goed uit aangezien er voor 15 views 16 waarden zijn per parameter. Dit komt dus net op een 4*4 matrix.
Hieronder een screenshot van een eerste test om een geconvolueerde environmentmap mappen op de theepot. Dit is gewoon gebruikmakend van de theta en phi hoek afgeleid uit de relfectievector.

Uiteraard is dit niet echt de bedoeling, dus toen heb ik dan de hele interpolatie pipeling geïmplementeerd. Iets wat sneller zou kunnen gaan moest ik tex2Dlod gebruiken, maar voorlopig wil ik alles goed kunnen volgen om dingen die fout gaan snel te kunnen spotten en isoleren. Het gevolg van renderen met specular en diffuse stukken apart staat hieronder. Eerst het specular gedeelte en de 2de is het diffuse stuk. Het valt natuurlijk direct op dat het magenta stuk uit het image hierboven nu nog zwart is. Andere dingen die hier nog fout waren zijn het zwarte gebied op de voorgrond en het ring effect aan de zijkanten.


Een combinatie van specular en diffuse stukken staat hieronder, eerst onder het toepassen van de scalering met gewichten, dan mét.


Het toepassen van de gewichten lost het probleem van het grote zwarte gebied in het midden al gedeeltelijk op, maar nog niet helemaal. (er moet hier ook wel vermeld worden dat er nog geen tonemapping is toegepast hier) Dus ben ik op zoek gegaan naar de plaatsen waar het fout loopt. Op dit moment zijn de problemen die ik gevonden heb:
- De theta waarden groter dan 90°
- Het laden van het .exr image. De variatie van de kleuren in de Y-richting (theta) is logisch maar er loopt iets serieus mis in de X-richting (phi)
Noot: al deze foto's werden uiteraard in HDR genomen.
Dan de software zelf uiteraard. De volledige pipeline voor de environmentbelichting is ondertussen up and running. Maar nog niet bugfree spijtig genoeg.
Een eerste probleem dat ik tegen gekomen ben is dat ik views berekend heb voor een elevation angle tussen 0 en 90°. Maar als deze hoek berekend wordt zijn er natuurlijk ook regio's waar die hoek groter dan 90° is. Het diffuse gedeelte kan wel gespiegeld worden, maar hoe dit met het speculaire gedeelte zit is op dit moment nog een beetje wazig. Ter illustratie hieronder een theepot waarbij het gele stuk elevation angle [0-90°] en het magenta gedeelte is elevation angle (90-180°] Zoals in de verdere images te zien is zijn deze stukken op dit moment nog gewoon zwart.
Vervolgens staat er in de paper van Green et al. dat zij de gewichten, standaarddeviaties en µ-waarden in een texture steken om deze zo door te geven aan de shader. Ik heb enige problemen gehad met dat effectief te laten werken en heb er daarom voor geopteerd om deze door te geven als matrices. Deze kunnen ook heel efficient aangesproken worden binnen de shader en het komt goed uit aangezien er voor 15 views 16 waarden zijn per parameter. Dit komt dus net op een 4*4 matrix.
Hieronder een screenshot van een eerste test om een geconvolueerde environmentmap mappen op de theepot. Dit is gewoon gebruikmakend van de theta en phi hoek afgeleid uit de relfectievector.
Uiteraard is dit niet echt de bedoeling, dus toen heb ik dan de hele interpolatie pipeling geïmplementeerd. Iets wat sneller zou kunnen gaan moest ik tex2Dlod gebruiken, maar voorlopig wil ik alles goed kunnen volgen om dingen die fout gaan snel te kunnen spotten en isoleren. Het gevolg van renderen met specular en diffuse stukken apart staat hieronder. Eerst het specular gedeelte en de 2de is het diffuse stuk. Het valt natuurlijk direct op dat het magenta stuk uit het image hierboven nu nog zwart is. Andere dingen die hier nog fout waren zijn het zwarte gebied op de voorgrond en het ring effect aan de zijkanten.
Een combinatie van specular en diffuse stukken staat hieronder, eerst onder het toepassen van de scalering met gewichten, dan mét.
Het toepassen van de gewichten lost het probleem van het grote zwarte gebied in het midden al gedeeltelijk op, maar nog niet helemaal. (er moet hier ook wel vermeld worden dat er nog geen tonemapping is toegepast hier) Dus ben ik op zoek gegaan naar de plaatsen waar het fout loopt. Op dit moment zijn de problemen die ik gevonden heb:
- De theta waarden groter dan 90°
- Het laden van het .exr image. De variatie van de kleuren in de Y-richting (theta) is logisch maar er loopt iets serieus mis in de X-richting (phi)
Subscribe to:
Posts (Atom)