ShaderGraph (Unity) und der Material Editor (Unreal Engine 5) sind node-basierte, visuelle Werkzeuge zur Erstellung von Echtzeit-Shadern ohne HLSL-Code – für PBR-Materialien, Effekte und Postprocessing.
Rubrik: Game Design & Interactive Media · Unterrubrik: Game Engines · Niveau: Fortgeschritten
Synonyme / Auch bekannt als: Unity Shader Graph, UE5 Material Editor, Node-basiertes Shader-Authoring, Visual Shader Editor
Was ist ein Shader Graph?
Traditionell werden Shader in Shader-Sprachen wie HLSL (High Level Shading Language), GLSL oder Metal Shading Language als Textcode geschrieben. Diese Programmiersprachen sind für Entwickler ohne GPU-Programmierhintergrund eine erhebliche Hürde.
ShaderGraph (Unity, seit 2018 stable) und der Material Editor (Unreal Engine, seit UE3) lösen dieses Problem durch ein Node-basiertes Interface: Shader-Operationen werden als verbundene Nodes dargestellt, ähnlich wie Blueprints für Gameplay-Logik. Das Ergebnis ist automatisch generierter HLSL/GLSL-Code, ohne dass der Entwickler diesen schreiben muss.
Erklärung
Grundkonzept: Nodes und Pins
In beiden Systemen verbindet man Nodes durch Drähte (Wires/Connections). Jeder Node repräsentiert eine mathematische Operation oder Datenzugriff:
- Textur-Node: Liest eine Textur an einer UV-Koordinate.
- Multiply-Node: Multipliziert zwei Werte.
- Lerp-Node: Lineare Interpolation zwischen zwei Werten basierend auf einem Faktor.
- Normal Map-Node: Dekodiert eine Normal Map korrekt.
- Time-Node: Gibt die verstrichene Spielzeit zurück – nützlich für animierte Effekte.
- Fresnel-Node: Berechnet kantenbetontes Leuchten (Rim Light).
Unity ShaderGraph
ShaderGraph in Unity unterstützt URP (Universal Render Pipeline) und HDRP (High Definition Render Pipeline). Für Built-in ist ShaderGraph nicht verfügbar.
Master Stack: Das Herzstück eines ShaderGraphs. Es gibt zwei Kontexte:
- Vertex Stage: Bestimmt Position und andere Vertex-Attribute (für Vertex-Displacement, animierte Oberflächen).
- Fragment Stage: Bestimmt das finale Erscheinungsbild pro Pixel (Albedo, Normal, Metallic, Roughness, Emission, Alpha).
Sub-Graphs: Wiederverwendbare Nodes-Gruppen, die zu einem einzigen Custom-Node zusammengefasst werden können. Ideal für häufig genutzte Operationen (z.B. eine „Dissolve"-Funktion).
Properties: Variablen, die im Inspector anpassbar sind und über C#-Code geändert werden können. Ermöglicht wiederverwendbare Shader-Assets mit parametrisierbaren Werten.
Custom Function Node: Erlaubt das Einbetten von HLSL-Code direkt in den ShaderGraph für Operationen, die keine passenden Nodes haben.
Beispiel-Workflow – Wasser-Shader:
- Time-Node → Sinus → UV-Offset für Wellen-Animation
- Normal Map (Wasser-Textur) → Normal-Eingang des Master Stack
- Color (Blau) + Fresnel (Helligkeit an Kanten) → Albedo
- Reflectivity über Smoothness-Eingang
UE5 Material Editor
Der Unreal Engine Material Editor hat ein ähnliches Konzept, aber eine andere Terminologie und Architektur.
Material Output-Node: Jedes Material hat einen zentralen Output-Node mit Eingangs-Pins:
- Base Color (Albedo)
- Metallic
- Roughness
- Normal
- Emissive Color
- Opacity
- World Position Offset (für Vertex-Displacement)
Material Instances: Ein leistungsstarkes Feature von UE5. Ein „Master Material" definiert die Grundlogik. „Material Instances" sind abgeleitete Materialien, die nur parametrisierbare Werte (Farbe, Textur, Roughness-Wert) überschreiben, ohne den teuren Shader-Rekompilierungs-Prozess zu triggern. Ideal für viele Varianten desselben Materials (verschiedene Wandfarben, Fahrzeuglackierungen).
Material Functions: Äquivalent zu Sub-Graphs in Unity. Wiederverwendbare Node-Gruppen.
Parameter Nodes: ScalarParameter, VectorParameter, TextureParameter – machen Werte in Material Instances editierbar.
PBR-Materialien mit Node Editoren
Physikalisch korrektes Rendering (PBR) erfordert korrekte Metallic-Roughness-Workflows:
- Metallic = 0: Dielektrisches Material (Holz, Plastik, Stein). Reflektionen sind schwach, Farbe kommt von Albedo.
- Metallic = 1: Metallisches Material. Reflexionen stark, Albedo beeinflusst Reflexionsfarbe.
- Roughness = 0: Spiegelglatte Oberfläche (Spiegel, poliertes Metall).
- Roughness = 1: Diffus raue Oberfläche (unverputzter Beton).
Beide Editoren folgen diesem Workflow und erzeugen PBR-konforme Shader.
Beispiele
- Lava-Material: Time-Node animiert UV-Offset einer Lava-Textur; Emissive-Eingang leuchtet das Material von innen.
- Glas/Transparenz: Albedo fast transparent, hohe Smoothness, Refraction-Node (UE5) für Lichtbrechung.
- Dissolve-Effekt: Noise-Textur mit Threshold-Vergleich bestimmt, welche Pixel sichtbar sind – animiert ergibt das einen Auflöse-Effekt.
- Schnee-Overlay: World-Space-Normal berechnet, wo horizontale Flächen liegen → Schnee-Textur wird dort aufgetragen (UE5-Technik für Schneefall-Systeme).
In der Praxis
Für Artists ohne Programmierhintergrund sind beide Editoren zugänglicher als handgeschriebene Shader. Dennoch hilft ein Grundverständnis von:
- Vektor-Mathematik (Dot Product für Fresnel, Cross Product für Normals)
- Textur-Koordinaten (UV-Mapping, Tiling, Panning)
- PBR-Konzepten (Metallic, Roughness, Albedo)
Diese Konzepte sind unabhängig vom Werkzeug und fundamental für qualitativ hochwertige Shader.
Vergleich & Abgrenzung
| Aspekt | Unity ShaderGraph | UE5 Material Editor |
|---|---|---|
| Rendering Pipeline | URP/HDRP | Deferred/Forward+ |
| Material Instances | Nein (ähnlich: Variants) | Ja (sehr mächtig) |
| Sub-Graphs | Ja | Material Functions |
| Custom HLSL | Custom Function Node | Custom Expression Node |
| Lernkurve | Niedrig–Mittel | Niedrig–Mittel |
Häufige Fragen (FAQ)
Muss ich HLSL lernen, wenn ich ShaderGraph nutze? Nicht unbedingt, aber HLSL-Grundkenntnisse helfen, komplexe Effekte zu verstehen und den „Custom Function Node" für Operationen zu nutzen, die keine fertigen Nodes haben.
Was ist der Unterschied zwischen einem Shader und einem Material? Ein Shader ist der ausführbare Grafikprogramm-Code. Ein Material ist eine Instanz eines Shaders mit spezifischen Parameterwerten (Textur-Zuweisung, Farbe etc.). In UE5 ist ein Material das Shader-Authoring-Objekt; Material Instances sind parametrisierte Ableitungen.
Kann ich ShaderGraph-Shader in Build-in-Pipeline verwenden? Nein. ShaderGraph erfordert URP oder HDRP. Für Built-in muss weiterhin mit Surface Shaders oder handgeschriebenem HLSL gearbeitet werden.
Verwandte Einträge
Weiterführend
- Lammers, Kenny: Unity Shaders and Effects Cookbook. Packt Publishing, 2013.
- Unity Technologies: Shader Graph Documentation. docs.unity3d.com, 2024.
- Epic Games: UE5 Material Editor Documentation. docs.unrealengine.com, 2024.
- Akenine-Möller, Tomas u. a.: Real-Time Rendering. 4. Aufl. Kapitel 9: Physically Based Shading. A K Peters/CRC Press, 2018.
