Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
ich wollt heute meinen PHONG Shader etwas verbessern. Bis jetzt ist es so, das ich die Farbwerte der einzelnen Lichter (Ambient, Diffuse, Specular) nacheinander addiere. Das gefällt mir aber nicht so richtig, weil ich dann nie die Farbe erhalte, die ich eingestellt habe. z.B: Ambient ist rot (1,0,0), Diffuse ist grün (0,1,0), Speculat ist abgeschalten (bzw. schwarz), dann ist die resultierende Farbe im diffusen Bereich gelb (1,1,0). Nun hab ich mir folgendes gedacht. Ich nehm einfach den Alpha-Wert der Farben um sie untereinader zu mixen (c1 * (1−a) + c2 * a). Dann hab ich als resultat immer genau die Farbe, die ich auch eingestellt habe. Das einzige was mich jetzt noch stört ist, dass beim mixen der Farben ein kleiner Bereich entsteht, bei dem die resultierende Farbe dunkler ist, als die beiden Ausgangsfarben (siehe Bild). Kann man das noch irgendwie beheben?
Bis jetzt ist es so, das ich die Farbwerte der einzelnen Lichter (Ambient, Diffuse, Specular) nacheinander addiere.
Das ist auch die physikalisch korrekte Vorgehensweise. Die Photonen die von beiden Lichtquellen ausgesendet werden beeinflussen sich nicht gegenseitig. Gelb ist eben das richtige Ergebnis, wenn du Rot und Grün mischst.
Ich schlage vor du verwendest keine "puren" Farben für dein Licht. Sowas kommt in der Natur nämlich so gut wie nicht vor. Du hast immer ein ganzes Spektrum von Farben. Wenn du eine rote Lichtquelle haben möchtest, nimm statt 255 0 0 lieber etwas wie 255 32 32.
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Du könntest allerdings über HDR rendern, dadurch kannst du viele hässliche Nebeneffekte vermeiden. Um z.B. zu verhindern das dein Licht komplett weiß wird, könntest du Tonemapping einsetzen.
Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.