4. Uebung
Moderator: Graphische Datenverarbeitung 1
Re: 4. Uebung
Der Wert kr kommt aus der Auswertung der BRDF.
- MisterD123
- Geek
- Beiträge: 811
- Registriert: 31. Okt 2006 20:04
- Wohnort: Weiterstadt
Re: 4. Uebung
wir haben als kr das ergebnis der licht-auswertungsmethode genommen mit blickrichtung als eingangsvektor und ("zufälliger") reflektionsrichtung als ausgangsvektor, also praktisch das auftreffziel des reflektionsvektors als lampe angenommen mit der farbe die dort berechnet wurde und das dann über die gloss/diffus-farbmischung der entsprechenden vektoren noch zusammenmultipliziert.
Re: 4. Uebung
Hallo.
Wir haben bei Theorie 1 und 2 die Aufgabe "Leiten Sie her" so interpretiert, dass wir die Gleichheit (bei 1) bzw die Gültigkeit (bei 2) zeigen. Heute in der Sprechstunde konnte nicht geklärt werden, ob das in Ordnung ist, oder ob "Leiten Sie B aus A her" heißen soll, dass man von A nach B gelangen muss, "B=A" zu zeigen also unzureichend wäre.
Auf unsere Weise benutzen wir dann auch nicht den Hinweis, dass l und v normiert sind. Ist das ein Hinweis darauf, dass wir falsch vorgegangen sind?
Wir haben bei Theorie 1 und 2 die Aufgabe "Leiten Sie her" so interpretiert, dass wir die Gleichheit (bei 1) bzw die Gültigkeit (bei 2) zeigen. Heute in der Sprechstunde konnte nicht geklärt werden, ob das in Ordnung ist, oder ob "Leiten Sie B aus A her" heißen soll, dass man von A nach B gelangen muss, "B=A" zu zeigen also unzureichend wäre.
Auf unsere Weise benutzen wir dann auch nicht den Hinweis, dass l und v normiert sind. Ist das ein Hinweis darauf, dass wir falsch vorgegangen sind?
Re: 4. Uebung
Ich bin nicht ganz sicher ob ich die Aufgabe 3 b) richtig verstehe.
Bedeutet sampling function = 1/4 dass ich 4 Bins habe? Bezieht sich N auf die Gesamtzahl der Abtastpunkte? Oder auf die Anzahl Punkte pro Bin?
Muesste ich um die Standard-Derivation zu senken nicht die Anzahl an Bins verringern?
Wuerde sich N auf die Gesamtzahl an Abtastpunkten beziehen und wuerde die sampling function 1/N lauten koennte ich die Aufgabe loesen. Aber ich befuerchte dass ich irgendwas falsch verstanden habe.
Bedeutet sampling function = 1/4 dass ich 4 Bins habe? Bezieht sich N auf die Gesamtzahl der Abtastpunkte? Oder auf die Anzahl Punkte pro Bin?
Muesste ich um die Standard-Derivation zu senken nicht die Anzahl an Bins verringern?
Wuerde sich N auf die Gesamtzahl an Abtastpunkten beziehen und wuerde die sampling function 1/N lauten koennte ich die Aufgabe loesen. Aber ich befuerchte dass ich irgendwas falsch verstanden habe.

+++++++++[->+++++++++>+>+>+<<<<]>+.>[-<->]<----.-.>>[-<<+>>]<<+.-----.---.>>>[-<<<+>>>]<<<+++.-------------.
Re: 4. Uebung
Ohne es an der Aufgabenstellung belegen zu können, hat sich hier glaube ich folgendes Verständnis durchgesetzt:
Beim Stratified Sampling wird üblicherweise pro Bin ein Sample genommen - daher bezeichnet N auch die Anzahl der Bins. p(x) = 1/4 hat die gleiche Bedeutung wie bei 3 a), ist also die Dichtefunktion (laut Aufgabenstellung eigentlich angeblich Verteilungsfunktion).
Warum solltest du die Anzahl der Bins verringern, um die Standard-Deviation zu senken?
Beim Stratified Sampling wird üblicherweise pro Bin ein Sample genommen - daher bezeichnet N auch die Anzahl der Bins. p(x) = 1/4 hat die gleiche Bedeutung wie bei 3 a), ist also die Dichtefunktion (laut Aufgabenstellung eigentlich angeblich Verteilungsfunktion).
Warum solltest du die Anzahl der Bins verringern, um die Standard-Deviation zu senken?
-
- Computerversteher
- Beiträge: 317
- Registriert: 30. Okt 2006 21:54
Re: 4. Uebung
Wir haben noch ein Problem bei der Implementierung der Lafortune-Formel.
Wenn wir den Exponent N als float verwenden, sieht das Ergebnis ungefähr so aus:

weil die Basis negativ werden kann und die jeweiligen Pixel dann schwarz werden.
Mit int-Cast oder Ignorieren aller negativen Werte für die Basis sieht es so aus:

Nun stehen aber in der LafMaterials.txt Kommazahlen für N, darum gingen wir davon aus, dass auch floats verwendet werden sollten.
Haben wir etwas übersehen?
Wenn wir den Exponent N als float verwenden, sieht das Ergebnis ungefähr so aus:

weil die Basis negativ werden kann und die jeweiligen Pixel dann schwarz werden.
Mit int-Cast oder Ignorieren aller negativen Werte für die Basis sieht es so aus:

Nun stehen aber in der LafMaterials.txt Kommazahlen für N, darum gingen wir davon aus, dass auch floats verwendet werden sollten.
Haben wir etwas übersehen?
Re: 4. Uebung
Bei uns ist es ähnlich: zwar haben wir nicht diese komischen Pixel sondern durchgehende Flächen, aber zwischen der hinteren Wand und den Seitenwänden der Box ist auch diese komische schwarze Fläche, wenn der Exponent als float ist, beim casten auf int verschwindet diese schwarze Fläche...
Aber ich habe noch was anderes festgestellt bei der Lafortune-Formel: Die ganzen Farben wirken etwas matt bzw. blass, wenn ich dagegen k_d nicht durch PI teile (so wie es in der DiffuseMaterial ist) sondern einfach die übergebenen Farben so belasse, dann sind sie schön kräftig, wie auch auf dem zweiten Screenshot von SebFreutel.
Aber ich habe noch was anderes festgestellt bei der Lafortune-Formel: Die ganzen Farben wirken etwas matt bzw. blass, wenn ich dagegen k_d nicht durch PI teile (so wie es in der DiffuseMaterial ist) sondern einfach die übergebenen Farben so belasse, dann sind sie schön kräftig, wie auch auf dem zweiten Screenshot von SebFreutel.
Gäbe es die letzte Minute nicht,
so würde niemals etwas fertig.
- Mark Twain
so würde niemals etwas fertig.
- Mark Twain
Re: 4. Uebung
Das Problem ist einfach, dass wenn man eine negative Zahl mit einer nicht ganzzahligen Zahl potenziert, das Ergebnis eine komplexe Zahl ist. Mit float kann man aber wie ihr hoffentlich alle wisst keine komplexen Zahlen darstellen. Mit pow kommt in diesem Fall z.B. NaN raus. Wenn man von float nach int castet, ist der Exponent ganzzahlig, womit es dann klappt.
Abgesehen davon wird aber beim Lafortune Modell wie beim Phong Modell sowieso eine negative Basis auf 0 gesetzt, womit es mit nichtganzzahligen Exponenten(also floats) wieder klappt. Wenn man möchte kann man das auch im Lafortune-Paper nachlesen.
Abgesehen davon wird aber beim Lafortune Modell wie beim Phong Modell sowieso eine negative Basis auf 0 gesetzt, womit es mit nichtganzzahligen Exponenten(also floats) wieder klappt. Wenn man möchte kann man das auch im Lafortune-Paper nachlesen.
Re: 4. Uebung
So funktionierts auch:
(double)std::floor(N)
als Exponent in der Lafortune-Auswertung.
(double)std::floor(N)
als Exponent in der Lafortune-Auswertung.
Re: 4. Uebung
Ich habe auch noch eine kleine Frage zum Reflexionsvektor:
Ich schieße also einen zufälligen Reflexionsvektor von meinem Punkt los, treffe damit irgendein anderes Objekt und bekomme eine Farbe zurück. Jetzt muss ich aber doch auch noch die attenuation und den cosfactor wie beim Licht mit einrechnen, nehme ich an. Dazu brauch ich allerdings den Schnittpunkt des Reflexionsvektors mit dem Objekt und die Normale des Objekts und wie macht man das denn am schönsten? Schreibt man sich dazu ne neue Funktion, die eigentlich das gleiche macht, wie traceRay und die ganzen Parameter noch zurückgibt oder geht das viel einfacher und ich steh total auf dem Schlauch?
Ich schieße also einen zufälligen Reflexionsvektor von meinem Punkt los, treffe damit irgendein anderes Objekt und bekomme eine Farbe zurück. Jetzt muss ich aber doch auch noch die attenuation und den cosfactor wie beim Licht mit einrechnen, nehme ich an. Dazu brauch ich allerdings den Schnittpunkt des Reflexionsvektors mit dem Objekt und die Normale des Objekts und wie macht man das denn am schönsten? Schreibt man sich dazu ne neue Funktion, die eigentlich das gleiche macht, wie traceRay und die ganzen Parameter noch zurückgibt oder geht das viel einfacher und ich steh total auf dem Schlauch?
Re: 4. Uebung
Hallo allerseits:
hat jemand schon die Aufgabe b aus der Praxis implementiert?
Soll man einfach die Formel aus dem Theorieteil Aufgabe 1 abschreiben?
Also die wir ja herleiten sollten und zur Berechnung einfacher wird?
Also bei uns sieht es so aus und ich befürchte, dass da irgendwas falsch ist
hat jemand schon die Aufgabe b aus der Praxis implementiert?
Soll man einfach die Formel aus dem Theorieteil Aufgabe 1 abschreiben?
Also die wir ja herleiten sollten und zur Berechnung einfacher wird?
Also bei uns sieht es so aus und ich befürchte, dass da irgendwas falsch ist
- Dateianhänge
-
- gdv2.png (55.34 KiB) 522 mal betrachtet
Zuletzt geändert von Xaero am 22. Jan 2009 21:44, insgesamt 1-mal geändert.
Re: 4. Uebung
Man muss aber die Basis auf 0 setzen, wenn sie negativ ist. Das wird wie schon gesagt vom Modell verlangt. Sonst kommen da negative Farben bei raus.Krabbel hat geschrieben:So funktionierts auch:
(double)std::floor(N)
als Exponent in der Lafortune-Auswertung.
Dadurch wird eine spezielle präparierung des Exponenten unnötig.
Re: 4. Uebung
Im Grunde ja. Wird im Aufgabentext auch empfohlen.Xaero hat geschrieben: hat jemand schon die Aufgabe b aus der Praxis implementiert?
Soll man einfach die Formel aus dem Theorieteil Aufgabe 1 abschreiben?
Re: 4. Uebung
Woran kann es dann liegen, dass es bei uns so aussieht?
Re: 4. Uebung
Ich nehme an, damit meint ihr die Licht-Auswertungsmethode nach dem Lafortune-Modell? Oder welche "Licht-Auswertungsmethode"? Und wenn ihr von "zusammenmultiplizieren" sprecht, meint ihr dann das komponentenweise Produkt? M.E. ist das das einzige, was Sinn machen würde...MisterD123 hat geschrieben:wir haben als kr das ergebnis der licht-auswertungsmethode genommen mit blickrichtung als eingangsvektor und ("zufälliger") reflektionsrichtung als ausgangsvektor, also praktisch das auftreffziel des reflektionsvektors als lampe angenommen mit der farbe die dort berechnet wurde und das dann über die gloss/diffus-farbmischung der entsprechenden vektoren noch zusammenmultipliziert.
Dann nochmal zum allgemeinen Verständnis:
Aus dem Pseudocode entnehme ich ganz eindeutig, dass k_r ein Parameter des *Materials* des getroffenen Objekts ist (material.kr), und nicht irgendwas, was man irgendwie aus irgendeiner BRDF zusammenbastelt (auch wenn man sich natürlich statt "Parameter" eine [nichtlineare] Funktion denken darf, die die Eigenschaft des Materials modelliert, also *zum Beispiel* die BRDF - in diesem Fall sollte man aber, denke ich, eine andere Notation als "material.kr * irgendwas" wählen, z.B. "material.function(irgendwas, irgendwasanderes)"). Also: Bezieht sich der Pseudocode auf eine andere Variante des DRT als das, was wir implementieren sollen, oder steh ich gerade total auf dem Schlauch?
Zweiter Punkt: Wann terminiert DRT eigentlich? So wie ich das im Pseudocode sehe, würde in einem geschlossenen Raum unendlich oft traceRay() rekursiv aufgerufen werden (bzw. wenn es jemand *intelligent* implementiert, so lange, bis k_r mal Null wird, was aber schlimmstenfalls ebenfalls unendlich lange dauern kann).
Falls dazu auch noch jemand etwas schreiben könnte, wäre ich ihm sehr verbunden.
Was Sonnenschein für das schwarze Erdreich ist,
ist wahre Aufklärung für die Verwandten des Erdreichs.
- N.F.S. Grundtvig
ist wahre Aufklärung für die Verwandten des Erdreichs.
- N.F.S. Grundtvig