4. Uebung

Moderator: Graphische Datenverarbeitung 1

Benutzeravatar
Ronny
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 133
Registriert: 18. Nov 2005 14:33
Wohnort: IGD

Re: 4. Uebung

Beitrag von Ronny »

Der Wert kr kommt aus der Auswertung der BRDF.

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Re: 4. Uebung

Beitrag von MisterD123 »

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.

Benutzeravatar
mantra
Computerversteher
Computerversteher
Beiträge: 385
Registriert: 23. Okt 2005 23:56
Wohnort: Wiesbaden

Re: 4. Uebung

Beitrag von mantra »

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?

RedNifre
DON'T PANIC
Beiträge: 42
Registriert: 22. Nov 2004 19:29
Wohnort: Hier
Kontaktdaten:

Re: 4. Uebung

Beitrag von RedNifre »

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. :?
+++++++++[->+++++++++>+>+>+<<<<]>+.>[-<->]<----.-.>>[-<<+>>]<<+.-----.---.>>>[-<<<+>>>]<<<+++.-------------.

Benutzeravatar
mantra
Computerversteher
Computerversteher
Beiträge: 385
Registriert: 23. Okt 2005 23:56
Wohnort: Wiesbaden

Re: 4. Uebung

Beitrag von mantra »

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?

SebFreutel
Computerversteher
Computerversteher
Beiträge: 317
Registriert: 30. Okt 2006 21:54

Re: 4. Uebung

Beitrag von SebFreutel »

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:

Bild

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:

Bild

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?

Benutzeravatar
Martin K
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 110
Registriert: 13. Okt 2006 17:56

Re: 4. Uebung

Beitrag von Martin K »

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.
Gäbe es die letzte Minute nicht,
so würde niemals etwas fertig.

- Mark Twain

Benutzeravatar
Ronny
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 133
Registriert: 18. Nov 2005 14:33
Wohnort: IGD

Re: 4. Uebung

Beitrag von Ronny »

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.

Krabbel
Nichts ist wie es scheint
Beiträge: 23
Registriert: 18. Apr 2007 16:06
Wohnort: DA

Re: 4. Uebung

Beitrag von Krabbel »

So funktionierts auch:
(double)std::floor(N)
als Exponent in der Lafortune-Auswertung.

banshee
Nerd
Nerd
Beiträge: 684
Registriert: 22. Okt 2006 18:46

Re: 4. Uebung

Beitrag von banshee »

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?

Xaero
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 173
Registriert: 8. Feb 2006 20:06

Re: 4. Uebung

Beitrag von Xaero »

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
Dateianhänge
gdv2.png
gdv2.png (55.34 KiB) 522 mal betrachtet
Zuletzt geändert von Xaero am 22. Jan 2009 21:44, insgesamt 1-mal geändert.

Benutzeravatar
Ronny
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 133
Registriert: 18. Nov 2005 14:33
Wohnort: IGD

Re: 4. Uebung

Beitrag von Ronny »

Krabbel hat geschrieben:So funktionierts auch:
(double)std::floor(N)
als Exponent in der Lafortune-Auswertung.
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.
Dadurch wird eine spezielle präparierung des Exponenten unnötig.

Benutzeravatar
Ronny
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 133
Registriert: 18. Nov 2005 14:33
Wohnort: IGD

Re: 4. Uebung

Beitrag von Ronny »

Xaero hat geschrieben: hat jemand schon die Aufgabe b aus der Praxis implementiert?
Soll man einfach die Formel aus dem Theorieteil Aufgabe 1 abschreiben?
Im Grunde ja. Wird im Aufgabentext auch empfohlen.

Xaero
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 173
Registriert: 8. Feb 2006 20:06

Re: 4. Uebung

Beitrag von Xaero »

Woran kann es dann liegen, dass es bei uns so aussieht?

Benutzeravatar
Red*Star
Kernelcompilierer
Kernelcompilierer
Beiträge: 510
Registriert: 28. Nov 2006 19:40

Re: 4. Uebung

Beitrag von Red*Star »

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.
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...


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

Antworten

Zurück zu „Graphische Datenverarbeitung 1“