ShaderForge 0.3x – Ein Plugin für das Erstellen der Shader in Unity3D

ShaderForge 0.3x – Ein Plugin für das Erstellen der Shader in Unity3D

Einen Shader in Unity3D zu programmieren ist ohne fundiertes Vorwissen nicht so leicht möglich.
Die Shader, die von Unity3D mit geliefert werden sind an sich nicht schlecht, aber sobald man einen vorhabndenen Shader um eine Funktion erweitern will, wird es kompliziert. Aus diesem Grund habe ich schon längere Zeit nach einem Node-basierenden Werkzeug Ausschau gehalten.
Shader Forge ist so ein Node-basierendes Werkzeug und es ist im Assetstore für 80$ zu erhalten.
Das ist schon recht teuer aber seinen Preis auch wert.
Kürzlich war es  bei den 24Hour-Deals für die Hälfte zu bekommen, und da habe ich zugeschlagen.
Shader Forge ist eigentlich noch im Beta-Stadium  und zur Zeit dieses Reviews in der Version 0.32.
Das bedeutet aber nicht, dass man damit nur rum spielen kann. Nein! Man kann schon die tollsten Shader erstellen und fast alles wird unterstützt. Natürlich können hier und da Fehler entstehen und es kann auch vorkommen, dass Unity3D sich mal aufhängt. Das weiß ich aber nur vom Versions-Log. Passiert ist es mir noch nicht.

Wie funktioniert Shader Forge?

Wie schon erwähnt, ist Shader Forge „Node“ (auf deutsch Knoten) basierend. Das bedeutet, es ist ein grafisches Werkzeug. Aus diesem Grund öffnet man in Unity ein Shader Forge Window wenn man einen neuen Shader erzeugen will.

Das Startfenster

Das Startfenster

Über die Buttons kann man dann entweder einen neuen Shader anlegen, einen öffnen oder Informationen bekommen. Beim Anlegen und Öffnen erscheint ein Dateimanager der im Assetordner des Projektes startet. Lege ich einen neuen Shader an, so wähle ich einen Speicherpfad aus und benenne den Shader wie ich es will.
Nachdem der Shader angelegt wurde öffnet sich die grafische Oberfläche, in der ich jetzt über verschiedene Elemente meinen Shader zusammen basteln kann.

Die Arbeitsfläche

Die Arbeitsfläche

Der Hauptknoten ist schon angelegt und alle möglichen Eingänge sind zu sehen.  Um Jetzt andere Nodes zu erzeugen, reicht es aus, einfach mit rechts in das Fenster zu klicken und dort dann im entstandenen Dialog ein Element auszuwählen oder aber man wählt sich ein Element aus dem Menübaum an der rechten Seite aus und platziert es irgendwo in dem Fenster.
Man kann ganz normal rein und raus zoomen oder aber wie in Unity sich im Fenster hin und her bewegen. Das ist auch nötig, denn ganz schnell hat man den Fensterausschnitt mit verschiedensten Elementen gefüllt.

Auf der linken Seite ist oben ein Vorschaufenster zu sehen, mit dem man seinen Shader super überprüfen kann. Voreingestellt ist es mit einer Kugel, aber es lässt sich jedes beliebige Objekt aus dem Projekt einfügen.
Unter dem Vorschaufenster sind diverse Menüs, in denen man weitere Shadereigenschaften einstellen kann, die mit dem Node-Fenster nicht zu tun haben.

Der Start ist wirklich leicht. Um dein Einstieg zu demonstrieren, nutze ich ein Objekt, welches ich mit einer UV Map versehen habe und für das ich auch schon UV Texturen erstellt habe.

Ich wähle mir beim Vorschaufenster einfach mein Modell aus und fange im Nodefenster an den Diffuse-Kanal zu bedienen. Diesem Kanal soll eine Textur zugewiesen werden und diese Textur soll man einfärben können.
Also Rechtklick in das Nodefenster und unter Properties das Texture2D Element auswählen. Ein Node ist entstanden und ihm kann ich auch gleich schon eine Textur zuweisen.
Nächster Rechtsklick und wieder unter Properties das Color Element ausgewählt. Es erscheint auf dem Fenster und hat eine graue Farbe voreingestellt.
Beides möchte ich verknüpfen, und zwar will ich die Color mit den Farbanteilen der Textur multiplizieren. Also wieder ein Rechtsklick und dieses Mal unter Arithmetic das Mulitiply gewählt.
Jetzt schnell die RGB Kanäle von der Textur und von der Farbe mit den 2 Eingängen des Multiply verbinden und schon sehe ich im Multiply Node ein Ergebnis. Meine Textur ist verfärbt. Dieses soll dem Diffuse-Kanal zugewiesen werden, also verbinde ich schnell den Ausgang des Multiply mit dem Diffuse-Eingang meines Main Nodes. Fertig!

In meinem Vorschaufenster sehe ich mein Objekt mit eingefärbter Textur. Es rotiert und so kann ich es von allen Seiten begutachten. 2 Lichtquellen, die selber langsam um das Objekt herum rotieren, beleuchten das Modell und helfen beim Einstellen der Shader. Ich kann natürlich auch das Objekt manuell so drehen, wie ich es gerne hätte, oder aber nah ran zoomen um Feinheiten im Modell zu begutachten.

sf-DiffuseDie Properties, die ich eben erzeugt hatte, werden später beim Shader einstellbar sein. Sie sind also im Inspector zu sehen. Jetzt ist es aber so, dass die Reihenfolge der Properties so ist, wie ich die Properties erstellt habe. Das lässt sich aber leicht ändern, wenn man im Einstellungsbereich den Propertiespfad öffnet. Dort kann ich die Elemente einfach so verschieben, dass sie am Schluss eine logische Reihenfolge ergeben. Die Benennungen der Properties lassen sich direkt am Node oder bei den Properties  einstellen.

Natürlich ist so ein Shader, der gerade mal einen Diffuse-Kanal bedient, nichts Besonderes. Es zeigt aber schon einmal, wie schnell sich die einzelnen Kanäle einstellen lassen.  Dem Shader jetzt z.B. ein Texturnode für eine Normalmap hinzu zufügen ist eine Sache von wenigen Sekunden.
Selbst komplexere Shader, die eine Vielzahl von Kanälen bedienen sind recht schnell gebaut und über das Vorschaufenster hat man sofort eine Rückmeldung, ob alles so wird wie man es vorhatte.
Hier mal ein Beispiel für einen Shader:

Ein fertiger Shader

Ein fertiger Shader

Und so sieht er dann im Inspector aus:

Der Shader im Inspector

Der Shader im Inspector

Dieser Shader hat rund 300 Zeilen Code!

Jedoch sind einige Dinge nicht so einfach, denn obwohl man mit den Nodes sehr leicht die unterschiedlichsten Dinge verknüpfen kann, muss man doch wissen was man braucht. Ein wenig hilft Shader Forge. Denn wenn ich z.B. einen Wert mit dem Normal-Kanal verbinden will, so kann ich es nicht. Der Eingang wird sofort ausgegraut, sobald man den Ausgang vom Value-Node anklickt.
Aber Shader, die über Vektoren, dem Lichteinfall oder der Entfernung in der Szene arbeiten brauchen schon ein wenig mehr Wissen und das muss man sich erst einmal aneignen.

Wie ich oben schon schrieb, ist Shader Forge noch im Beta-Stadium. Das wirkt sich auch auf die Hilfestellung aus.
Wenn man mit rechts auf ein Node klickt, kann man schnell eine Hilfe dazu bekommen, wird also auf eine Homepage geleitet, wo wichtige Informationen und sogar ein Wiki zu finden sind. Das Wiki ist aber noch im Aufbau und will erst einmal richtig gefüllt werden. Es gibt auch schon einige Tutorials die einem den Einstieg erleichtern. Aber auch dort sollte noch erweitert werden, denn mit 3 Videotutorials kann ich nicht die Fülle, die dieses Tool bringt, erklären.  Es reicht aber allemal für den Einstieg.
Man kann Shader Forge auch mit Tastenkombinationen bedienen, jedoch habe ich noch keine Auflistung darüber gesehen. In den Videotutorials werden nur einige wenige Kombinationen erwähnt.

Limitationen:

Shader Forge kann für alle Unity3D Versionen ab der Version 4.3 genutzt werden.
Einige wenige Features funktionieren nicht mit der Free Version, was an den Limitationen der Free Version liegt. Laut Herrsteller kann man die Effekte wohl noch im Editor sehen, aber bei einem Build sollen diese dann nicht mehr gehen.

Shader Forge unterstützt noch kein Deferred Lighting. Es soll aber ab der Version 5 von Unity3D mit eingebaut werden. Erst dann, weil Unity scheinbar mit dem Übergang zur Version 5 auch etwas am Deferred Lighting ändern wird.

Einige Inspector-Elemente, wie die Checkbox, sind noch nicht eingebaut.

Fazit:

Shader Forge ist mächtig! Selbst in der Version 0.3.2.
Die Bedienung ist leicht und man bekommt schon beim Erstellen eine Rückmeldung über das zu erwartende Ergebnis.  Es macht einfach Spaß mit den unterschiedlichen Elementen herum zu spielen und das Ergebnis zu begutachten.
Das Tool ist logisch und intuitiv aufgebaut. Ich brauchte so gut wie keine Einarbeitungszeit.

Die OnlineHilfe ist ausreichend und wird hoffentlich weiter ausgebaut.

Der Preis von 80$ ist angemessen,  wenn man davon aus geht, dass Shader Forge auch wirklich fertig gestellt wird. (Und davon will ich mal ausgehen.)
Ich kann das Asset bedenkenlos empfehlen.

Beispiel eines zweiseitigen und transparenten Shaders:

Zweiseitig und transparent

Zweiseitig und transparent