Auf der Wikipedia-Seite für das Phong-Modell heißt es, dass der Umgebungsbegriff eine Konstante ist und nur zu den anderen Begriffen hinzugefügt wird. Auf anderen Seiten wie LearnOpenGL heißt es jedoch, dass Sie den Umgebungsbegriff nehmen und mit der Farbe des Objekts multiplizieren sollten. Welches ist richtig?
7
Antworten:
Richtig ist der OpenGL-Weg. Wenn Sie ein weißes Licht hätten (sagen wir vec3 (255,255,255)) und es einfach einem blauen Objekt (vec3 (0,0,255)) hinzugefügt hätten, wäre das Objekt weiß, was falsch ist. Wenn Sie diese Farben jedoch multiplizieren würden, wäre das Objekt vollständig beleuchtet und korrekt blau (was das gewünschte Produkt ist).
Die Sache mit dem Umgebungslicht ist, dass es nur durch die Intensität des Umgebungslichts und durch die Farbe des Objekts beeinflusst wird, was bedeutet, dass es nicht durch die Position, Richtung oder etwas Ähnliches des Lichts beeinflusst wird. Deshalb kann man es sich als "einfach als Konstante hinzufügen" vorstellen.
Wir verwenden Umgebungslicht hauptsächlich, um reflektiertes Licht in der Szene zu simulieren, was sonst sehr schwer zu simulieren ist (ohne Raytracing). Es ist eine ziemlich gute und billige Alternative.
quelle
Die relevante Gleichung auf der Wikipedia-Seite lautet:
In dieser Gleichung sind allek und ich Begriffe sind keine Zahlen, sondern Farben (RGB-Intensitäten). Das beinhaltetkein und ichein : die Umgebungsfarbe des Objekts bzw. die Umgebungsbeleuchtungsfarbe. Der Umgebungsbegriff ist keine Konstante: Er ist ein Produkt aus Intensität und Albedo, genau wie die spiegelnden und diffusen Begriffe. Der einzige Unterschied besteht darin, dass die Beleuchtungs- und Blickrichtung in diesem Begriff keine Rolle spielt.
Es ist sehr ungewöhnlich zu habenkein unterscheidet sich von der diffusen Farbe, so dass Sie sich vorstellen können, sie mit "der Farbe des Objekts" zu multiplizieren. Das heißt, es ist ziemlich häufig fürichein Um eine eindeutige Farbe zu erhalten: Wenn Sie beispielsweise ein gelbliches Richtungslicht für direktes Sonnenlicht verwenden, möchten Sie möglicherweise, dass das Umgebungslicht für das Oberlicht bläulich ist.
quelle
Ich denke, wir sollten beides haben und auch einen Faktor, der auf Material basiert
Einige Materialien sind sehr diffus, sodass sie nur Licht ihrer eigenen Farbe reflektieren. Manches Material kann aber auch etwas Licht reflektieren, wie es ist. Ich denke, wir verwenden für den Phong-Shader eine additive Umgebung, da das Phong-Objekt dazu neigt, alles Licht zu reflektieren, und daher Umgebungslicht mit der Farbe dieses Lichts beleuchtet werden könnte, aber andere Lichter wurden verwendet, um diffuse Farben zu erzeugen
Im Gegensatz zu Lambert, wenn das, was ich weiß, richtig ist, handelt es sich um Material mit hoher Diffusion, und so wurde das Umgebungslicht dem Licht hinzugefügt und mit der Farbe des Materials multipliziert
Ich denke, der moderne Shader sollte einen Parameter haben, um diesen Faktor einzustellen und eine solche Gleichung zu schreiben
Eigentlich nehme ich dieses Konzept aus PBR-Material, es gab ein Konzept der Energieeinsparung. Das gesamte Licht kann das Objekt durch Diffusion oder Reflexion beleuchten. Um jedoch Energie zu sparen, bedeutet eine diffusere Farbe eine geringere Reflexion. Umgebungslicht fügt also einfach mehr Lichtenergie hinzu und wird dann genauso behandelt wie anderes Licht
quelle