Substance Functions und der Pixel Processor ermöglichen in Substance Designer die pixelweise Definition benutzerdefinierter mathematischer Operationen über einen eingebetteten Funktions-Graph-Editor – das tiefste Anpassungslevel innerhalb von Designer.
Rubrik: Animation & VFX · Unterrubrik: Substance · Niveau: Fortgeschritten
Synonyme / Auch bekannt als: Function Graph, FX-Graph, Pixel Processor Node, Substanz-Funktionen
Was sind Substance Functions?
Substance 3D Designer operiert auf zwei Ebenen: dem Composite Graph (der Haupt-Node-Graph mit Bild-Nodes) und dem Function Graph (einem eingebetteten, niedrigschwelligeren Programmiersystem). Substance Functions sind Programme, die im Function Graph geschrieben werden und als Wert-Berechnungen für Node-Parameter oder als vollständige Pixeloperationen im Pixel Processor ausgeführt werden.
Der Pixel Processor ist der Node, der Substance Functions zur pixelweisen Bildverarbeitung einsetzt – vergleichbar mit einem Fragment Shader in GLSL, aber ohne Shaderprogrammierung im eigentlichen Sinne.
Erklärung
Der Function Graph
Wenn man einen Doppelklick auf einen Parameter, der mit einer Function angesteuert werden kann, ausführt, öffnet sich der Function Graph Editor. Dieser Editor sieht ähnlich aus wie der Composite Graph, enthält aber andere Node-Typen:
Mathematische Nodes:
Add,Subtract,Multiply,DivideMax,Min,Clamp(auf 0–1 begrenzen)Pow(Potenz),Sqrt(Wurzel),Abs(Absolutwert)Floor,Ceil,Fract(Nachkommasteil)Sin,Cos,Tan,Atan2(trigonometrische Funktionen)
Vektor-Nodes:
Vector2,Vector3,Vector4(Vektoren erstellen)Vector2 Split,Swizzle(Komponenten extrahieren)Dot Product,Cross ProductNormalize,Length,Distance
Kontroll-Nodes:
If/Else(Bedingte Verzweigung)Get: Zugriff auf vordefinierte Werte (Zeit, Koordinaten, externe Parameter)Sampler2D: Sampling eines Bildes an einer bestimmten UV-Koordinate
Output: Jede Function gibt einen einzelnen Wert zurück (float, float2, float3, float4 für Graustufe, 2D-Vektor, RGB oder RGBA).
Pixel Processor
Der Pixel Processor Node ist ein spezieller Composite-Graph-Node, der für jeden Pixel des Output-Bildes eine benutzerdefinierte Funktion ausführt. Er ist das mächtigste Werkzeug für benutzerdefinierte Bild-Operationen in Designer.
Setup eines Pixel Processors:
- Pixel Processor Node in den Composite Graph einfügen
- Input-Images verbinden (bis zu 4 Bildeingaben)
- Doppelklick → Function Graph öffnet sich
- Im Function Graph: Per
Pos-Node die aktuelle UV-Koordinate (0–1 pro Kanal) abrufen; perSampler-Nodes Pixel-Werte aus den Input-Images lesen; mathematische Operationen anwenden; Ergebnis anOutputverbinden
Verfügbare Eingaben im Pixel-Processor-Funktionsgraph:
$pos: Aktuelle Pixelkoordinate (float2, 0–1 in U und V)$size: Output-Größe in Pixel (float2)$uvtile: UDIM-Tile-Index (float2)- Input-Sampler:
sampleCoor(input, pos)für bilineares Sampling an beliebiger Position
Typische Anwendungsfälle
Benutzerdefinierte Warp-Operationen: Ein Pixel Processor liest die aktuelle UV-Position, addiert einen per Sampler gelesenen Offset-Wert aus einem Rauschbild und liest das Input-Bild an der veränderten Position – ein custom Warp-Node.
Mathematische Graustufeneffekte: Sinus-basierte Wellen, exponentielle Kurven, radiale Gradients – alles, was der Standard-Node-Satz nicht abdeckt.
Kanal-Packing: RGBA-Manipulation – verschiedene Graustufen-Inputs in unterschiedliche Kanäle eines Output-RGBA-Bildes schreiben. Nützlich für Engine-spezifisches Textur-Packing direkt in Designer.
Prozedurale UV-Manipulation: Verzerrungen, Tiling-Variationen, Stochastic Tiling-Effekte (zufällige Verschiebung/Rotation von Tiles zur Vermeidung von Wiederholungsmustern).
Substance Functions als Parameter-Driver
Neben dem Pixel Processor können Substance Functions auch Node-Parameter steuern:
- Ein
Rotation-Parameter eines Transform-Nodes kann durch eine Function gesteuert werden, die per$randomseedeinen zufälligen Winkel berechnet. - Eine
Color-Output-Node kann eine Function nutzen, die per$sizedie Auflösung in die Berechnung einbezieht.
Exponierte Graph-Parameter können innerhalb von Functions als $Input-Variablen genutzt werden.
FX-Map als Vorstufe
Die FX-Map ist ein Node, der intern auf einem Quadtree-Algorithmus basiert und für jeden „Stamp" (platzierten Instanz) eine Function nutzt, die Position, Rotation, Skalierung und Farbe berechnet. FX-Map-Functions sind ein Haupteinsatzgebiet für Substance Functions und ermöglichen komplexe, organische Pattern-Layouts.
Beispiele
Custom Radial Gradient: Im Pixel Processor: $pos → Subtract mit 0.5, 0.5 (Mittelpunkt) → Length → Invert → Clamp → Output (Graustufengradient, Mitte hell).
Stochastic Tiling: Im Pixel Processor: UV-Position in Grid-Zellen aufteilen → pro Zelle per Random-Funktion eine Zufalls-Rotation/Translation berechnen → Input-Textur an der transformierten UV-Position samplen → leichter Blend zwischen Zellgrenzen. Ergebnis: Tileable Textur ohne sichtbare Wiederholungsmuster.
In der Praxis
Substance Functions und Pixel Processor sind für Einsteiger nicht notwendig – 90 % der Materialien lassen sich ohne sie erstellen. Sie werden relevant für:
- Technische Artists, die spezifische Effekte benötigen, die keine Standard-Node-Kombination abbildet
- Material-TDs, die benutzerdefinierte Generators und Filters für Studio-Bibliotheken erstellen
- Stochastic-Tiling-Implementierungen für hochwertige Environment-Texturen
Die Lernkurve ist vergleichbar mit einfacher Shader-Programmierung – wer HLSL/GLSL-Grundlagen kennt, findet sich schnell zurecht.
Vergleich & Abgrenzung
Pixel Processor vs. HLSL/GLSL Shader: Pixel Processor ist vereinfachter, hat Einschränkungen (kein Loop, keine Rekursion), ist aber in Designer integriert und GPU-beschleunigt. Vs. Houdini VEX: VEX ist mächtiger und operiert auf 3D-Geometrie; Pixel Processor ist auf 2D-Bildoperationen beschränkt, aber einfacher zu erlernen.
Häufige Fragen (FAQ)
Brauche ich Programmierkenntnisse für den Pixel Processor? Grundlegendes mathematisches Verständnis (Vektoren, Trigonometrie, Interpolation) ist hilfreich, aber echte Programmiersprachen-Kenntnisse sind nicht erforderlich. Der visuelle Funktionsgraph macht die Logik greifbar.
Kann ich Schleifen im Function Graph nutzen? Nein. Der Function Graph ist iterationsfrei (keine for/while-Loops). Rekursive Effekte werden stattdessen durch gestaffelte Node-Kaskaden oder FX-Map-Algorithmen realisiert.
Was ist der Unterschied zwischen Function Graph und Composite Graph? Composite Graph operiert auf Bildern (Textures); Function Graph operiert auf einzelnen Werten (floats, Vektoren). Function Graphs werden von Composite-Graph-Nodes aufgerufen, um Pixel-Werte oder Parameter zu berechnen.
Verwandte Einträge
- Substance 3D Designer – Überblick
- Substance Designer – Node-Graph
- Substance Designer – PBR-Nodes: Normal, Base Color, Roughness
- Substance Designer – Komplettes Material von Grund auf bauen
- Substance Designer – Tileable Texturen erstellen
Weiterführend
- Adobe Inc.: Substance 3D Designer – Pixel Processor. Adobe Help Center, 2024.
- Allegorithmic: Introduction to Function Graphs. Allegorithmic Tutorial Series, 2018.
- Amiryousefi, Roham: Stochastic Tiling with Pixel Processor. 80.lv Tutorial, 2022.
- Wihlidal, Graham: Advanced Designer Techniques. SIGGRAPH 2019 Course Materials.
