Shader und Texturen im Detail

Was ist ein Shader?

Ein Shader beschreibt im Grunde die Eigenschaften der Oberfläche des Objektes und steuert, wie das Licht darauf wirkt. Es gibt Shader mit unterschiedlichen Eigenschaften. Diese steuern z.B. die Texturen, Farben, Glanz, Rauheit (der Oberfläche) und andere visuelle Effekte, die das Erscheinungsbild von 3D-Objekten realistischer machen. Je nach Art des Shaders kann er beispielsweise verwendet werden, um Schatten zu erzeugen, Oberflächenstruktur zu definieren und noch vieles mehr.

Der Standard Shader

Für die meisten Objekte ist der Standard Shader die richtige Wahl. Mit ihm kannst du die Farbe des Objektes festlegen (oder die Textur damit überlagern) und eine Farb-Textur auf das Objekt legen. Du kannst eine Normal-Map (beschreibt die Oberflächenstrukturen) und eine Glanz-Map anwenden.

Die verschiedenen Slots der Texturen (Farbe, Normalen, Glanz) müssen nicht unbedingt gefüllt werden. Sollte also z.B. keine Glanz-Map dem Objekt beiliegen, so lässt man diesen Slot einfach frei und stellt lediglich den Slider passend ein.

Der Transparent Shader

Der Transparent Shader ist die richtige Wahl, wenn du z.B. eine Scheibe in einem Auto einstellen willst.
Es ist hierbei besonders wichtig, dass das 3D Objekt korrekt modelliert ist, ansonsten wird der Transparent-Effekt falsch dargestellt.
Wähle Werte für Glanz und Transparenz wie hier und modifiziere anschließend nach deinen Wünschen:

Bitte beachte hierbei die „Beta“-Einschränkung zum Glanz/Reflektion/Spiegelung und Schattenwurf. Transparente Objekte können in dieser Version noch keinen Schattenwurf erzeugen, keine Spiegelung darstellen und Glanz/Reflektion sind eingeschränkt.

Der Ausgeschnitten Shader (Cutout)

Mit dem Ausschneiden Shader werden oft feinere Strukturen wie z.B. Blätter mit einer Maske „freigestellt“.
Der Shader ähnelt dem Standard-Shader, hat aber zusätzlich eine Transparenz-Map.

Die Idee dahinter ist, dass feine Strukturen und Details nicht im eigentlichen 3D Modell enthalten sein müssen, sondern erst über die Maske entstehen. Die Details werden also erst über eine Maske hinzugefügt, um das endgültige Aussehen des Objekts zu erhalten. Auf diese Weise kann das 3D-Modell einfacher gestaltet sein und damit viele Polygone einsparen, was für die Performance sehr wichtig ist.

Z.B. würde ein Baum mit vielen tausend Blättern sehr viele Polygone haben, wenn man die Blätter aber als Streifen modelliert und über die Maske erst sichtbar macht, spart man die Polygone ein und kann sogar viel feinere Details darstellen.

Blätter ohne Maske:

Blätter mit Maske:

Die Maske ist eine einfache Schwarz-Weiß Textur. Die weißen Stellen werden dabei sichtbar sein, die schwarzen hingegen werden „unsichtbar“.

Für die Blätter im Beispiel oben, sieht die Masken-Textur so aus:

Die Einstellungen für die Maske werden visuell getätigt, also so eingestellt, dass der gewünschte Effekt gut aussieht.

In unserem Beispiel sieht das so aus:

Der Haar Shader

Der Haar Shader ist dem Ausschneiden Shader sehr ähnlich, steuert aber die Transparenz der Maske etwas anders und ist für Haare optimiert.
Auch die Haare werden in aller Regel als Stränge modelliert und erst durch eine Maske werden die feinen Haare sichtbar gemacht.

Textur-Arten im Überblick

Wie oben beschrieben, gibt es verschiedene Arten von Texturen, wie z.B. die Color-, Normal, Glanz-Map und Cutout (Ausschneiden).

Texturen können so ausgeprägt sein, dass sie sich über das ganze Modell erstrecken, oder sie sind kachelbar und beinhalten nur einen sehr kleinen Ausschnitt des Aussehens. Wenn eine Textur gekachelt wird, spart man sehr viel Speicher in der Grafikkarte, da die Textur dann in der Regel klein ist. Ein Teppich ist hierbei ein gutes Beispiel: hier macht es Sinn nur einen Ausschnitt des Musters in der Textur zu haben und diese dann zu kacheln. Die Skalierung gibt hierbei die Häufigkeit der Kachelung an.

Grundsätzlich sollten Texturen in ihrer Auflösung so klein wie möglich gehalten werden, damit der Speicherbedarf in der Grafikkarte klein bleibt. Bei Echtzeit-Anwendungen, wie set.a.light 3D, ist das besonders wichtig, da große Texturen und viele Polygone sofort die Leistung beeinträchtigen.
Wir bei elixxier optimieren daher für jedes Objekt die Größe der Texturen und die Anzahl der Polygone.


Links siehst du ein Beispiel für eine kachelbare Farb-Textur, rechts wurde die Texturierung auf eine Map gelegt. Das Beispiel links könnte als sehr kleine Textur mit z.B. einer Auflösung von nur 256×256 Pixeln und einer starken Kachelung funktionieren, das Beispiel rechts hingegen bedarf einer Textur mit einer Auflösung von ca. 4K (4096×4096).

Es ist möglich Texturen mit einer Auflösung von bis zu 8K zu importieren.

Farb-Map

Die Farb-Map (wird meist als Color-Map bezeichnet) beinhaltet die farbliche Gestaltung des Objektes.

Diese Map ist am einfachsten zu erkennen und trägt in der Benamung den Zusatz *Diffuse*, *Color*, oder *BaseColor*. Ein Beispiel für Color-Maps siehst du oben.

Normal-Map (Normalen-Map)

Die Normal-Map beschreibt kleinere Unebenheiten des Objektes und beeinflusst das Licht und sorgt so für die Darstellung von sehr feinen Schatten. Sehr feine Unebenheiten müssen also nicht im 3D Objekt enthalten sein, sondern werden mit Hilfe der Normal-Map erzeugt.

Optisch sieht die Normal-Map bläulich aus und ist daran gut zu erkennen.

Um die Normal-Map richtig beurteilen zu können und ihre Intensität einstellen zu können, musst du den Viewport auf „Rendern“ umschalten. Erst mit „richtigem“ Licht wird die Normal-Map gut sichtbar sein. Es macht Sinn deshalb das Objekt aus verschiedenen Richtungen zu betrachten.

Glanz-Map

Die Glanz-Map beschreibt, an welchen Stellen das Objekt mehr oder weniger stark glänzt.

Optisch sieht die Glanz-Map gräulich, bis schwarz und weiß aus. Im Namen trägt sie oft Bezeichnungen wie *Smoothness*, *Roughness* und *Gloss* und ist auch daran zu erkennen. Sie sieht allerdings der Transparenz-Map manchmal ähnlich.

Es ist darauf zu achten, dass es mehrere Arten von Glanz-Maps gibt die gegenläufig funktionieren, sprich die hellen Stellen sind glänzend, in der anderen Form sind die dunklen Stellen glänzend.
In set.a.light 3D kannst du darum die Art der Map umschalten und zwischen „Smoothness“ und „Roughness“ wählen. Passe also die Einstellung der vorhandenen Map an. Wenn du nicht weißt was richtig ist, probiere es einfach aus.

Um den Glanz richtig beurteilen zu können, musst du den Viewport auf „Rendern“ umschalten. Erst mit „richtigem“ Licht wird der Glanz gut sichtbar sein.

Transparenz-Map

Die Transparenz-Map (oder auch Maske) schneidet Teiles des 3D Models aus, um sehr feine Geometrien zu ermöglichen, ohne das diese in der Polygonstruktur enthalten sein muss.

Optisch sieht die Transparenz-Map aus wie eine Schwarz-Weiß Textur mit harten Kanten (ohne Abstufungen). Im Namen trägt diese Art von Map meist den Zusatz *Maske*, oder *Mask* und ist auch daran zu erkennen.