Zum Hauptinhalt springen

Material-Graphen

Die Standard-Materialtypen decken das meiste ab, was ein Projekt braucht. Wenn nicht, können Sie ein Material stattdessen als Graph bauen: Knoten verbinden, und der Editor kompiliert daraus einen echten Shader.

Greifen Sie danach, wenn Sie etwas wollen, das ein festes Material nicht ausdrücken kann — eine scrollende Textur, eine Auflösung, ein Hologramm, Wasser, eine Farbe, die sich mit dem Blickwinkel ändert, eine wehende Fahne.

Jeder Knoten mit seinen Ports: Shader-Knoten-Referenz — 95 Knoten.

Jedes Material ist bereits ein Graph

Die eingebauten Typen sind kein getrenntes System mit angeschraubtem Graphen — standard, physical, toon und die übrigen sind selbst Punkte in genau diesem Raum. Ein Graph-Material ist also kein Bürger zweiter Klasse: Es geht denselben Weg, bekommt dieselbe Beleuchtung und funktioniert auf Mobilgeräten.

Wie ein Graph aufgebaut ist

Ein Graph läuft von Eingängen über Mathematik zu Ausgängen.

KategorieWas dort wohnt
inputUVs, die Oberflächennormale, Zeit, Position, Texturen, welche Instanz gezeichnet wird
constfeste Zahlen und Farben, die Sie eintippen
mathArithmetik und Kurven auf einzelnen Zahlen
vectorVektoren und Farben bauen, zerlegen, mischen und transformieren
lightBeleuchtungsterme, die Sie selbst formen
postKnoten, die das gerenderte Bild abtasten — siehe Bildschirmeffekte
outputwie die Oberfläche tatsächlich aussieht

Die Oberflächenausgänge

Der Ausgabeknoten ist das Ende Ihres Graphen, und seine Eingänge sind die physikalische Beschreibung der Oberfläche:

AusgangBedeutet
baseColordie Farbe der Oberfläche
metallic0 für ein Dielektrikum, 1 für blankes Metall — selten dazwischen
roughness0 spiegelglatt, 1 vollkommen matt
normalspeisen Sie Ihre eigene Normale ein, um Oberflächendetail zu ergänzen
emissiveLicht, das die Oberfläche selbst abgibt
alphaTransparenz
clearcoat · clearcoatRoughnesseine Lackschicht obendrauf
ior · transmission · thicknessBrechung, für Glas und Flüssigkeiten

Was Sie unverbunden lassen, behält seine Voreinstellung, und der Compiler faltet es weg — ein Ausgang, den Sie nicht benutzen, kostet nichts.

Mit Instanzen arbeiten

Zwei Eingangsknoten gibt es eigens für instanzierte Objekte: instanceId sagt Ihnen, welche Kopie gerade gezeichnet wird, und instanceColor gibt deren Tönung.

Das ist es, was tausend Objekte aufhören lässt, wie ein Objekt auszusehen

Speisen Sie instanceId in einen Hash, und jede Kopie bekommt eigene Tönung, Größe oder Animationsphase — aus einem einzigen Zeichenaufruf. Ein Grasfeld, in dem jeder Halm ein wenig anders schwankt, kostet genauso viel wie eines, in dem alle gleich schwanken.

Beide lesen an einem gewöhnlichen Mesh vernünftige Voreinstellungen, ein Graph, der sie benutzt, geht also nie kaputt, wenn er ohne Instancing verwendet wird.

Bildschirmeffekte

Ein Graph, der das gerenderte Bild abtastet, ist überhaupt kein Oberflächenmaterial — er ist ein Vollbildeffekt über der ganzen Szene. Farbkorrektur, Vignetten, Unschärfen, Scanlinien.

Die Engine merkt das von selbst: Benutzen Sie einen Knoten, der das Bild liest, wird der Graph zu einem Effekt statt zu etwas, das Sie auf ein Objekt legen. Mehrere Effekte auf einer Szene laufen in der von Ihnen gegebenen Reihenfolge.

Texturen und Farbraum

Ein Texturknoten tastet eine Bildressource ab. Farbbilder werden für Sie dekodiert, damit die Mathematik auf echten Farbwerten arbeitet.

Markieren Sie Datentexturen als Daten

Eine Textur, die Zahlen statt Farbe trägt — eine Roughness Map, eine Maske, eine Height Map — muss als solche markiert sein, sonst wird sie farbkorrigiert und Ihre Werte sind subtil falsch. Das ist die mit Abstand häufigste Ursache für „meine Roughness Map sieht überhaupt nicht so aus, wie sie sollte".

Ein Skript kann nicht in einen Graphen hineingreifen

Skripte haben keinen Zugriff auf die Graph-Komponente, Sie können einen Graph-Parameter also nicht aus Code setzen.

Das schränkt weniger ein, als es klingt, denn die beiden Dinge, die man will, sind beide abgedeckt:

Sie wollenTun Sie
Etwas, das sich selbst animiertnehmen Sie den time-Eingang im Graphen — Pulsieren, Scrollen, Schimmern gehören dorthin
Etwas, das vom Spielzustand getrieben wirdtreiben Sie stattdessen einen gewöhnlichen Materialslot an: Ein Skript kann emissiveIntensity, color, opacity, roughness schreiben

Ein Leuchtfeuer, das ewig pulsiert, ist also ein Graph, der time liest; ein Leuchtfeuer, das heller wird, wenn die Spielerin punktet, ist ein Skript, das emissiveIntensity auf ein Standardmaterial schreibt.

Praktische Ratschläge

Fangen Sie bei einem Preset an. Ein Standardmaterial als Graph zu duplizieren gibt Ihnen einen korrekten, vollständigen Ausgangspunkt. Von einer leeren Fläche aus zu bauen heißt, Beleuchtung neu herzuleiten, die Sie nicht herleiten mussten.

Achten Sie darauf, was Sie hinzufügen. Ein Graph läuft für jedes Pixel, in jedem Bild. Ein Texturzugriff ist billig; eine Schleife nicht. Fällt die Bildrate nach einer Änderung, ist der zuletzt hinzugefügte Knoten der Verdächtige.

Speichern Sie ihn als Ressource, und jedes Objekt, das ihn benutzt, aktualisiert sich auf einmal — was zugleich heißt: eine Stelle zum Korrigieren, wenn der Look nicht stimmt.


Weiter: Partikel — Feuer, Rauch, Funken und Staub.