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
float factor; // 0.0 - 1.0 maybe reflectiveness?
float3 light = (factor * ambient.rgb); // ambient light
light += _MainLightColor.rgb * dot(normal,_MainLightDirection); // lambert
// maybe also specular
float3 color = ((1 - factor) * ambient.rgb) + (matColor * light);
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