05 - Beleuchtungsspiele

  • Quote

    Am Ende von specular habe ich 3 speculamMaps, eine für jede Lichtquelle. Soll ich sie alle am Ende aufsummieren um das Ergebnis zu bekommen?


    Ja die Formel dazu steht im Foliensatz 8 von CG auf Seite 22.

  • Ich löse mein linsolve-Gleichungssystem für alle drei Farben und bekomme dabei jedes Mal, wenn linsolve ausgeführt wird, von Matlab folgende Warning:


    Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 2.066974e-022.


    Ich geh mal stark davon aus, dass das nicht so sein sollte? Der höchste Wert in meiner NormalMap ist nämlich dann 6.3939e+016, der minimale ist -5.5827e+016. Wo kann hier der Fehler liegen? Ich bin eigentlich davon ausgegangen, dass ich linsolve mit den korrekten Werten gefüttert habe :/

  • Danke für die schnellen Antworten!



    Vielleicht hast du falsche Koordinaten für die Lichtpositionen verwendet?


    Die Lichtpositionen stehen ja als Zeilenvektoren in Lp drin, also hab ich einfach an dirVecMap für die erste Zeile Lp(1,: ) usw. übergeben. Sollte mMn so passen. Das einzige, was noch sein könnte, wäre, dass ich Lp gleich am Anfang mal falsch abgeschrieben hab ... Da muss ich aber noch auf das Abgabesystem warten^^

  • In der Funktion dirVecMap sollen ja normierte Vektoren in Form eine h x w x 3 matrix heraus kommen.
    Ich hab jetzt die unnormierten Vektoren in dieser Form.
    Wie kann man diese mit Matlab effizient normalisieren? Mir fallen nur 2 verschachtelte For-Schleifen ein, aber das ist ja alles andere als effizient.

  • In der Funktion dirVecMap sollen ja normierte Vektoren in Form eine h x w x 3 matrix heraus kommen.
    Ich hab jetzt die unnormierten Vektoren in dieser Form.
    Wie kann man diese mit Matlab effizient normalisieren? Mir fallen nur 2 verschachtelte For-Schleifen ein, aber das ist ja alles andere als effizient.


    Ich habe eine h x w Matrix mit den Längen der Vektoren erstellt und danach jeweils die x, y und z Koordinaten der Ergebnismatrix elementeweise durch diese Längen dividiert. Das sind vier Zeilen ohne Schleifen.

  • In der Funktion dirVecMap sollen ja normierte Vektoren in Form eine h x w x 3 matrix heraus kommen.
    Ich hab jetzt die unnormierten Vektoren in dieser Form.
    Wie kann man diese mit Matlab effizient normalisieren? Mir fallen nur 2 verschachtelte For-Schleifen ein, aber das ist ja alles andere als effizient.


    Die Funktionen BSXFUN und SUM sind hier hilfreich, dann reicht eine Zeile.

  • Bei mir hat ein Pixel im ambient+diffuse1 die gleiche Farbe wie im ambient.
    Das bedeutet, dass die Intensität des diffusen Lichts 0 ist.
    Das liegt wohl daran, dass der Oberflächenvektor von der Lichtquelle wegzeigt.
    Damit fehlt mir aber eine Intensität und ich kann den Normalvektor nicht berechen.
    Somit ist der Normalvektor ungewiss und ich muss ihn in der Map auf [0 0 0] setzen.


    Ist mein Gedankengang so richtig?

  • vielleicht hat hier jemand einen kleinen tipp für mich.. ich komme aktuell einfach nicht weiter :/


    ich habe ein (im prinzip) fertiges bild, habe die sonderfälle berücksichtigt, meine vektoren sind normiert und ich wüsste auch sonst keine offensichtliche fehlerquelle mehr.
    leider geht mein bild im gegensatz zu den anderen hier geposteten lösungen nicht ins bläulich-violette sondern eher ins gelbe.
    hat jemand eine idee?


    ausschnitt.jpg

  • Ich denke ich habe jetzt specular berechnet. Wie genau komme ich jetzt zum finalen Bild. Ich habe es jetzt so gemacht: ambient + (ambient_diffuse1 - ambient) + (ambient_diffuse2 - ambient) + (ambient_diffuse3 - ambient) + specular1 + specular2 + specular3. Aber alle Bilder außer specular sind ja Farbbilder. Wie soll ich das jetzt mit den Farbkanälen machen. Oder soll ich ein Schwarz-Weiß Bild zurückliefern?


    lg,
    kaim

  • ok ... also meine Lichtpositionen sind korrekt. Dann schätze ich, dass es irgendetwas bei linsolve hat. Vielleicht ist ja mein Gedankengang von grundauf falsch: Also linsolve Parameter 1 ist eine Matrix, die so viele Zeilen hat, wie ich Gleichungen in meinem lin. Gleichungssystem habe, und so viel Spalten wie ich Unbekannte habe. Und Parameter 2 ist ein Spaltenvektor, wo die Ergebnisse (also das auf der anderen Seite vom Ist-Gleich) der Gleichungen stehen. Ist das soweit richtig?

  • vielleicht hat hier jemand einen kleinen tipp für mich.. ich komme aktuell einfach nicht weiter :/


    ich habe ein (im prinzip) fertiges bild, habe die sonderfälle berücksichtigt, meine vektoren sind normiert und ich wüsste auch sonst keine offensichtliche fehlerquelle mehr.
    leider geht mein bild im gegensatz zu den anderen hier geposteten lösungen nicht ins bläulich-violette sondern eher ins gelbe.
    hat jemand eine idee?


    ausschnitt.jpg


    Ich glaube, du hast die Vektoren entweder falsch von [-1,1] auf [0,1] tansformiert, oder sie waren vor der Transformation nicht normiert ( sqrt(x^2+y^2+z^2) = 1 ).

    Matthias Hochsteger
    [EVC Tutor]

  • Bei mir hat ein Pixel im ambient+diffuse1 die gleiche Farbe wie im ambient.
    Das bedeutet, dass die Intensität des diffusen Lichts 0 ist.
    Das liegt wohl daran, dass der Oberflächenvektor von der Lichtquelle wegzeigt.
    Damit fehlt mir aber eine Intensität und ich kann den Normalvektor nicht berechen.
    Somit ist der Normalvektor ungewiss und ich muss ihn in der Map auf [0 0 0] setzen.


    Ist mein Gedankengang so richtig?


    Ja, richtig.

    Of course I don't see textures as images. Who would?


    Einführung in Visual Computing VU Übungsleiter 2012
    Visualisierung LU Tutor 2005-2007