Zu Beginn empfehle ich dringend, die Siggraph- Präsentation von Naty Hoffman zu lesen, in der es um die Physik des Renderns geht. Trotzdem werde ich versuchen, Ihre spezifischen Fragen zu beantworten und Bilder aus seiner Präsentation zu leihen.
Wenn ein einzelnes Lichtteilchen auf einen Punkt auf der Oberfläche eines Materials trifft, kann es zwei Dinge bewirken: reflektieren oder brechen. Reflektiertes Licht wird wie bei einem Spiegel von der Oberfläche reflektiert. Gebrochenes Licht wird im Material reflektiert und kann in einiger Entfernung von der Eintrittsstelle aus dem Material austreten. Schließlich verliert das Licht bei jeder Wechselwirkung mit den Molekülen des Materials etwas Energie. Wenn es genug Energie verliert, betrachten wir es als vollständig absorbiert.
Um Naty zu zitieren: "Licht besteht aus elektromagnetischen Wellen. Die optischen Eigenschaften eines Stoffes hängen also eng mit seinen elektrischen Eigenschaften zusammen." Deshalb gruppieren wir Materialien als Metalle oder Nichtmetalle.
Nichtmetalle zeigen sowohl Reflexion als auch Brechung.
Metallische Materialien haben nur Reflexion. Alles gebrochene Licht wird absorbiert.
Es wäre unerschwinglich teuer zu versuchen, die Wechselwirkung des Lichtteilchens mit den Molekülen des Materials zu modellieren. Wir machen stattdessen einige Annahmen und Vereinfachungen.
Wenn die Pixelgröße oder der Schattierungsbereich im Vergleich zu den Eintritts- / Austrittsabständen groß ist, können wir davon ausgehen, dass die Abstände effektiv Null sind. Der Einfachheit halber teilen wir die Lichtwechselwirkungen in zwei verschiedene Begriffe auf. Wir bezeichnen den Begriff der Oberflächenreflexion als "spiegelnd" und den Begriff, der sich aus Brechung, Absorption, Streuung und Refraktion ergibt, als "diffus".
Dies ist jedoch eine ziemlich große Annahme. Für die meisten undurchsichtigen Materialien ist diese Annahme in Ordnung und unterscheidet sich nicht zu sehr vom wirklichen Leben. Bei Materialien mit jeglicher Art von Transparenz schlägt die Annahme jedoch fehl. Zum Beispiel Milch, Haut, Seife usw.
Die beobachtete Farbe eines Materials ist das Licht, das nicht absorbiert wird. Dies ist eine Kombination sowohl des reflektierten Lichts als auch des gebrochenen Lichts, das aus dem Material austritt. Zum Beispiel absorbiert ein reines grünes Material alles Licht, das nicht grün ist. Das einzige Licht, das unsere Augen erreicht, ist das grüne Licht.
Daher modelliert ein Künstler die Farbe eines Materials, indem er uns die Dämpfungsfunktion für das Material gibt, dh wie das Licht vom Material absorbiert wird. In unserem vereinfachten diffusen / spiegelnden Modell kann dies durch zwei Farben dargestellt werden, die diffuse Farbe und die spiegelnde Farbe. Bevor Materialien auf physikalischer Basis verwendet wurden, wählte der Künstler jede dieser Farben willkürlich aus. Es sollte jedoch offensichtlich sein, dass diese beiden Farben zusammenhängen sollten. Hier kommt die Albedofarbe ins Spiel. In UE4 berechnen sie beispielsweise die diffuse und spiegelnde Farbe wie folgt:
DiffuseColor = AlbedoColor - AlbedoColor * Metallic;
SpecColor = lerp(0.08 * Specular.xxx, AlbedoColor, Metallic)
wobei Metallisch 0 für Nichtmetalle und 1 für Metalle ist. Der Parameter 'Specular' steuert die Specularität eines Objekts (in der Regel ist es jedoch eine Konstante von 0,5 für 99% der Materialien).