7. Shader

Ein Shader bestimmt die Reaktion eines Objektes auf Licht. Ein Objekt zu shadern bedeutet ihm zu sagen, wie es auftreffendes Licht reflektieren, absorbieren, transmittieren und refraktieren soll.

7.1 Physikalische Hintergründe

Kein Wort verstanden? Kein Problem. Um einen Shader zu verstehen machen wir einen kleinen gaaanz gaaanz kurzen Abstecher in die Physik.

7.1.1 Diffus und Glossy

Unser Auge wird durch elektromagnetische Wellen angeregt. Diese Lichtstrahlen gehen von einer Lichtquelle aus, treffen auf Objekte in unserer Umwelt und die von diesen Objekten reflektierten Lichtrahlen landen auf der Netzhaut unseres Auges und erzeugen ein Bild.

Bei einer Reflektion In der Realen Welt gilt das Prinzip

Einfallswinkel = Ausfallswinkel

Betrachten wir nun eine glatte Oberfläche in einem Mikroskop und richten eine Taschenlampe mit drei Lichtstrahlen darauf.

Abb. 7.1.1a: Ein Lichtbündel aus drei Strahlen treffen auf eine glatte Oberfläche, alle werden gleich gespiegelt.

Alle Strahlen werden in die gleiche Richtung geworfen. Nun eine raue Oberfläche unterm Mikroskop mit der gleichen Taschenlampe:

Abb. 7.1.1b: Eine raue Oberfläche: Alle Lichtrahlen werden in völlig unterschiedliche Richtungen geworfen.

Alle Strahlen werden in zufällige Richtungen geworfen.

Würden wir unser Objekt wie in der realen Welt modellieren, bräuchten wir Milliarden von Vertices um eine raue Oberfläche zu beschreiben, darüber hinaus müsste jeder Lichtstrahl einzelnd berechnet werden.

Deshalb unterscheiden wir in der Computergrafik nur zwischen diesen zwei Arten, Lichtbündel zu reflektieren:

Glossy – spiegelnd, glatt – Wie in Abb. 7.1.1a beschrieben
Beispiel: Schminkspiegel, Wasser, spiegelndes Blech.

Diffuse – Matt, rau – Wie in Abb. 7.1.1b beschrieben
Beispiel: Blatt Papier, Textilien, Sandstrand.

Natürlich ist die Welt nicht streng in Glossy und Diffuse aufgeteilt. Die meisten Objekte sind irgendwo zwischen Glossy und Diffuse. Matt geätztes Metall reflektiert beispielsweise noch immer Stark in eine Richtung, diese Reflektion selber ist aber sehr diffus und taugt nicht um die eigene Frisur zu checken.

7.1.2 Absorbtion

Die Absorbtion beschreibt alles das Licht, welches auf ein Objekt trifft aber nicht zurückgeworfen wird. Es wird stattdessen einfach verschluckt und in Wärme umgewandelt.

Ein Objekt, welches alles Licht absorbiert, erscheint auf uns schwarz. Ein Objekt im Sonnenlicht, welches kein Licht absorbiert erscheint auf uns Weiß und ein Objekt, welches nur bestimmte Farben absorbiert, andere jedoch nicht, erscheint auf uns Farbig. Ein blauer Stoff erscheint uns nur deshalb Blau, weil er alle anderen Farbanteile aus dem Sonnenlicht verschluckt, die auf ihn treffen, wärend blau als einziges reflektiert wird und so unser Auge treffen kann.

Wärend Diffus und Glossy beschreiben WIE Licht reflektiert wird, welches auf ein Objekt fällt, bestimmt die Absorbtion WELCHES Licht überhaupt reflektiert wird und ist damit hauptsächlich für die Farbe verantwortlich, die ein Objekt hat.

In der Shaderwelt beschreibt das „Albedo“ das Absorbtionsverhalten unseres Objekts. Es ist gleichzusetzen mit der „Grundfarbe“ die wir einem Objekt geben z.B. durch eine Textur.

7.1.3 Transmission

Bei durchsichtigen Materialien wird nicht nur licht Reflektiert und Absorbiert sondern auch Transmittiert. Das bedeutet, dass Lichtrahlen auch durch das Objekt hindurch auf die andere Seite gelangen können.

Das einfachste Beispiel hierfür ist Glas. Ein Lichtrahl trifft auf die Scheibe und wandert durch sie hindurch.

7.1.4 Refraktion

Ein Unterthema der Transmission. Bei jedem Übergang eines Lichtstrahls in ein anderes Medium kommt es zu einer Brechung, auch Refraktion genannt. Bei Fensterscheiben ist diese meist gering, bei Fotolinsen sind diese jedoch gewollt und teilweise sehr stark.

7.1 Zusammenfassung

Abb 7.1: Lichtmodell. Beispiel anhand einer Linse, die Rot gefärbt ist.

1 – Reflektion – Das Licht wird an der Oberfläche der Linse zurückgeworfen
2 – Absorbtion – Grün und Blau werden absorbiert.
3 – Transmission – Ein Teil des Lichts wandert durch die Linse
4 – Refraktion – An der Kante zwischen Linse und Luft findet eine Brechung statt.

Shadern wir ein Objekt, so bestimmen wir die Anteile dieser 4 Wege des Lichts.

7.2 Der Shadereditor

Den Shadereditor kennen wir bereits aus dem Kapitel über Texturen.

Wechseln wir nun in den Reiter „Shading“, ganz oben im Bild.

Abb. 7.2.1: Vorbereiteter Workspace für Shading

Blender öffnet in diesem Workspace 4 Fenster:

Oben rechts: Ein Filebrowser
Oben mittig: 3D Viewport, bereits in den Vorrendermodus geschaltet
Unten rechts: Image Editor
Unten mittig: Shader Editor

Wie der Name schon sagt beschäftigen wir uns hauptsächlich mit dem Shader Editor.

Abb. 7.2.2: Shader Editor

Bei dem Shader Editor handelt es sich um einen Node Editor. Node Editoren sind in den letzen Jahren zum Standart für alle möglichen Bildbearbeitungsprogramme geworden und haben das frühere, Layerbasierte Arbeiten abgelöst, so wie wir es von Photoshop kennen.

Jedes Kästchen (Node) ist eine Art Maschine, die bestimme Aufgaben übernimmt. Nodes können Ein- und Ausgänge besitzen. Ein „RGB“ Node gibt beispielsweise nur eine Farbe heraus, die man in dem Node selbst einstellen kann. Ein „Invert“ Node, nimmt das, was man in den Eingang gibt und kehrt es um.

Abb. 7.2.3a: Das RGB Node gibt über seinen Color Output (Gelber kleiner Punkt) die Information „weiß“ heraus. Diese geht in den Input des Materials und sorgt dafür, dass der Würfel nun weiß dargestellt wird.
Abb. 7.2.3b: In die Mitte des bisherigen Nodetrees wurde ein Invert Node eingesetzt. Er nimmt die Information „weiß“ und Invertiert sie. Aus dem Ausgang kommt also nun die Information „schwarz“. Diese geht in den Input des Materials und sorgt dafür, das der Würfel nun schwarz dargestellt wird.

Am Ende unseres Node Trees steht immer der „Material Output“. Einen BSDF Shadernode benötigen wir um die Bilddateien die wir hineingeben in Oberflächeninformationen umzuwandeln.

Dafür nutzen wir in den meisten Fällen den „Principled“ Shader, der immer beim Erschaffen eines neuen Materials automatisch angelegt wird (siehe: Abb 7.2.2). Dieser hat sehr viele Eingänge und einen Ausgang der direkt mit dem Material Output verbunden wird. Wir können den Shader über die vielen Eingänge mit den Albedo, Reflektions, Transmissions und Refraktionsinformationen füttern und erhalten eine gute Übersetzung in ein realistisches Lichtverhalten.

7.3 Der klassische Shadernodetree

Albedo

Wie in 7.1 erklärt, beschreibt Albedo das Absorbtionsverhalten unseres Materials.
Physikalisch erklärt: Wir erklären dem Shader, welche Farben er verschlucken soll.
Praktisch erklärt: Wir sagen welche Farbe das Objekt haben soll.
In unserem Principled Shader verwenden wir den „Base Color“ Eingang für unsere Albedo Information.

Wir fügen also eine „Image Texture“ Node hinzu und verbinden dessen Ausgang mit dem „Base Color“ Eingang des Principled Shaders (UV Mapping nicht vergessen).

Abb. 7.3.1: Eine Albedo Map beschreibt die Base Color des Materials

Roughness

Abb. 7.3.2: Roughness Map

Eine Roughness Map ist schwarzweiß. Jeder Pixel der Roughness Map beschreibt wie Rau die Stelle sein soll, an dem sich der Pixel befindet. Ein schwarzer Pixel steht für den Wert 0 ein weißer Pixel steht für den Wert 1. Schwarze Bereiche des Bildes werden also mit glatter Oberfläche, weiße Bereiche mit rauer Oberfläche geshadert. Graue Bereiche werden mit einem Mittelwert, nicht ganz glatt aber auch nicht komplett rau, geshadert.

Um zu sehen wie sich eine solche Roughness Map auf ein Objekt auswirkt habe ich im nachfolgenden Bild die Albedo Map deaktiviert. Das Objekt erstrahlt in weiß, dennoch lässt sich die Struktur des Backsteines erkennen, da die Fugen durch den Mörtel eher rau, und die Steine selber eher glatt sind.

Abb 7.3.3: Shader mit Roughness Map

Kombiniert man nun beide Texturen miteinander haben wir bereits jetzt ein deutlich realistischeres Ergebnis als vorher.

7.3.4: Roughness und Albedo Maps kombiniert.

Normal

Eine Normalmap beschreibt etwas gröbere Strukturverformungen eines Materials die nicht durch die bloße Beschreibung rau/glatt abgedeckt werden können. Sie sind aber auch nicht zu grob als dass sie mit echten Vertices nachmodelliert werden müssen.

Kurz: Kleine Erhabenheiten oder Risse können gut durch eine Normalmap „gefaked“ werden.

7.3.5: Normal Map

Eine Normalmap funktioniert etwas komplexer als reine schwarzweiß Werte unterschiedliche Farben repräsentieren verschiedene Richtungen in die Pixel ausgerichtet werden. Blau ist alles, was nach geradeaus gerichtet ist, Lila und Grün repräsentieren Winkel in alle möglichen Richtungen. Eine Normal Map wird mithilfe von 3D Scans hergestellt und ist mit eigenen Mitteln nicht ohne weiteres Erstellbar.

Aus diesem Grund muss die Normalmap auch, wie in Abb. 7.3.6 gezeigt, mit einer Normal Map Node kombiniert werden, die wir Node hinzufügen Menü unter dem Punkt „Vector“ finden.

!!!ACHTUNG!!! Die Normalmap muss in der Texturnode auf „Non-Color Data“ gestellt werden!!!

Schalten wir Albedo und Roughness noch einmal aus sehen wir, wie die Normal Map dafür sorgt, dass trotz der planen Oberfläche filigrane Schatten an den Steinkanten geworfen werden. Dadurch wird der Eindruck vermittelt wir hätten es hier mit einem Objekt mit hundertausenden von Vertices zu tun. In wirklichkeit besteht das Objekt nach wie vor nur aus vier Vertices.

Alle Maps miteinander Kombiniert sorgen für ein Realistisches shading. Im Normal Map Node kann die Stärke der Auswirkung der Normal Map auf das shading eingestellt werden, dafür kann der Punkt „Strenght“ nach oben, oder nach unten korrigiert werden.

7.3.6: Fertiges Grundshadering eines realistischen Objektes.

7.4 Feinabstimmung / Tweaks

Mithilfe der Logik der Nodeblöcke, die in 7.2 erklärt wurde können wir nun unseren Shader nach herzenslust verändern.

Color Ramp

Im Untermenü „Converter“ finden wir die Color Ramp. Ich benutze die meistens um meine Roughness werte etwas anzupassen. Dies ist nur ein Beispiel. Die Color Ramp lässt sich auch auf andere Arten und Weisen einsetzen.

Anhand der Roughness lässt sich gut sehen, was man mit einer ColorRamp machen kann.

Zunächst lege ich mir als Veranschaulichung die Roughness Map direkt auf den Ausgang. Zu sehen ist lediglich die Textur auf dem Objekt, ohne Lichteinfluss und Interpretation durch einen Shader.

Abb 7.4.1: Direkter Output.

Wir sehen nun auf der Linken Seite, was der Principled Shader normalerweise direkt in Roughnesswerte umrechnet, nur ohne Umrechnung. Wir erinnern uns: schwarze Bereiche werden als glatt, weiße als rau interpretiert. Die Map ist insgesamt sehr einheitlich Grau. Mittels einer ColorRamp können wir den Kontrast erhöhen.

Abb. 7.4.2: Kontrast wurde mittels ColorRamp Node erhöht.

Die ColorRamp wurde in die Signalkette eingefügt und der rechte Regler nach links geschoben. Das bewirkt, dass vormals graue Bereiche als schwarz Interpretiert werden.

Wir sehen nun, was aus der ColorRamp als Signal herauskommt. Wenn wir dieses Signal nun wieder in den Roughnesswert des Shaders geben ist zu erwarten, dass die Bereiche die nun schwarz sind, deutlich glatter gerendert werden als zuvor.

Abb 7.4.3: Unten mit eingestellter ColorRamp, oben noch ohne ColorRamp

Hue Saturation Value – RGB Curves

Natürlich lassen sich auch im Albedo interessante Veränderungen einstellen, hier habe ich mit dem „Hue Saturation Value“ und „RGB Curves“ Node gespielt. Um erst die Farbe zu Manipulieren und anschließend mithilfe der Curve Node den Kontrast zu erhöhen.

Mix RGB

Mithilfe Einer Mix RGB Node lassen sich mehrere Texturen miteinander vermischen.

Mix RGB Node ganz rechts im Bild. Als Vermischungsart wurde „Multiply“ eingestellt.

Hier wurden die bisherigen Veränderungen mit einer Noise Texture vermischt, welche vorher durch eine ColorRamp gejagt wurde.

Es gibt Millionen von Möglichkeiten. Am besten ist. Wenn ihr selbst mit den Nodes experimentiert. Was würde zum Beispiel der aus dem Anfang erwähnte „Invert“ Node für eine Auswirkung irgendwo in der Kette haben? Probiert es aus!

Anhang

Besonders ausführlich und informativ ist das Video von „Blender Guru“ Andrew Price zu dem Thema PBR Shadering und Principled Shader. Sein Video ist lang, aber zu jedem Punkt in dem Shader findet sich eine Erklärung.

Blender Guru – Principles Shader

Hinterlasse einen Kommentar