Workshop Tag 5 – 06.01.2020

Das große Thema des letzten Workshop Tages war die Dokumentation der vorher praktizierten Übungen. Dafür schlug ich vor, jeden für jeden Tag einen representativen Mini-Planeten zu schaffen, welcher das Thema des Tages aufgreift und zeigt, was wir alles gelernt haben.

Durch den Import diverser Packages aus dem Asset Store (free!) konnten wir uns gezielt um die Gestaltung dieser Planeten kümmern. Dafür importierten wir uns Polybrush als kreatives Tool innerhalb von Unity zum Sculpten, TextureBlending und Scattern von Umgebungsassets. Gemeinsam schufen wir so einen ersten kleinen Wald-Planeten.

Wald-Planet mit den im Wind wehenden Bäumen und Gräsern
jeder Planet umfasst genau Teilthema
Zum Abschluss können wir als kleine Interaktion im Playmode die Tasten 1,2 oder 3 drücken, um zwischen den Planeten hin und her zu springen. Wie bereits betont, Tag 4 ist in einem anderen Projekt entstanden und verschiedene RenderPipeline – Shadergraphs sind untereinander aktuell nicht kompatibel. Diesen Teil muss ich aus organisatorischer Sicht also eher auf meine Kappe nehmen.

Den Studierenden war es zu dieser Zeit freigestellt, wie sie ihre Dokumentation vollführen. Dies war meine persöhnliche Wunschvorstellung einer Dokumentation, mit der man ein durchaus ansehnliches Endergebnis zeigen kann.

Workshop Tag 4 – 16.12.2019

Am vierten Workshop Tag befassten wir uns hauptsächlich mit Wünschen der Studierenden oder allgemein nützlichen Tipps und Tricks entlang Shader. Dabei entstanden eher kleine und weniger komplexe Graphen.

So zum Beispiel der SceneDepth Graph, mit welchem wir einen Tiefenpass, von der Kamera ausgehend, über Unity rendern können. Viele Animationen, Trailer, Cutscenes oder ähnliches bedürfen einen solcehn Tiefenpass um später im Compositing Porgramm Tiefenschärfe akkurat einstellen zu können.

die visuelle Tiefe wiedergegeben als schwarz zu weiß Gradient
DepthPassPosition bestimmt als simpler Slider, an welcher Position sich der Gradient befindet

Ebenso wurden wabernde Skybox Shader thematisiert. Über das Ineinanderblenden verschiedener Noises können wir wolkenähnliche Strukturen schaffen, die über eine Geometrie laufen – je nachdem, welche Geschwindigkeit (Speed) wir einstellen.

Im Verlauf ging es ebenso darum, wie man volumetrisches Licht sehr performant faken kann. Dafür brauchen wir lediglich einen Zylinder ohne Boden Faces. Die Transparenz steuern wir über einen Verlauf entlang der Y-Koordinaten und die Sichtachse.

Zum Abschluss des Tages wurde es nochmal ein wenig theoretischer. Wir wollten einen Celshade / Toonshader schaffen. Charakteristisch dafür ist ein Ramp-Falloff über eine bestimmte Anzahl von Farben, anstelle eines weichen Schatten Farbverlaufs. Da es im Shadergraph keine Möglichkeit gibt, auf das Licht in der Szene zuzugreifen, mussten wir uns also eine Custom Function bauen. Darin können wir per Shadercode auf das „Hauptlicht“ in der Szene – in diesem Beispiel ein Directional Light – zugreifen. Wichtig hierbei ist anzumerken, dass diese Funktion aktuell NICHT in der High Definition Render Pipeline funktioniert und wir deshalb an diesem Tag in der Lightweight Render Pipeline arbeiteten.

Custom Function mit String zur Adressierung des Mainlights in der Szene
Wichtig ist hierbei zu erkennen, dass sich die Farbigkeit der 3 Toonshader Objekte nur dann ändert, wenn sich auch der Lichteinfallswinkel (Direction) ändert. Während der Kamera nach vorn oder hinten wandert, sehen wir zusätzlich wie sich der DepthPass verhält – er wandert mit.

Workshop Tag 3 – 02.12.2019

Am dritten Tag des Workshops drehte sich alles um das Thema
„Vertex Displacement“.

Auch hier begannen wir damit, über eine Textur und eine Mask die Geometrie eines Objekts zu manipulieren. In diesem Falle war diese Geometrie eine simple, mit mehr Vertices versehene, Plane, die wir über eine Sinuskurve entlang der Amplitude (wenn man so möchte – das „Offset“) beeinflussen.

Displacement entlang einer TexturenMaske / Extrude-like
Extrude-like Shadergraph

Später ging es dann in die Grundlagen von Wasser-ähnlichen Zügen bis hin zu sehr scharfkantigen, Igel-artigen Versuchsanordnungen. Desweiteren wurde gezeigt, wie wir auf Shaderproperties mithilfe von Script und / oder Playmaker zugreifen können. In diesem Videoclip wird nach gewisser Zeit die F1 Taste gedrückt, wodurch wir in Playmaker States hin und her wechseln.



Water with Spikes Shadergraph

Im letzten Beispiel des Tages ging es dann darum, Effekte wie das wehen im Wind zu simulieren. Dafür wurde sich eine kleine Wiese angelegt, die wir zum Schwingen brachen. Die UV-Maske am Ende des Shadergraphs stellt dabei ein, dass das Gras nicht als gesamtes Objekt mitschwingt, sondern nur der „obere Teil“, wie es bei Gras oder Pflanzen auch üblich ist.

Gras Shadergraph

Workshop Tag 2 – 25.11.2019

Am zweiten Tag des Workshops drehte sich alles um das Thema „Reveal“.

Auch hier wurde begannen wir mit dem Blenden über einer Texture – dieses mal jedoch über das AlphaClipping. Dadurch können wir steuern, welche Flächen gerendert werden und welche nicht. Die Farbe weiß bedeutet dabei den numerischen Wert „1“ und wird als sichtbar – also gerendert – dargestellt, während schwarz unsichtbar erscheint.

Visibility ist dabei eine Zahl zwischen 0 und 1
Visibility schneidet die Geometrie entlang der UVs des Fahrzeugs ab

Im Verlauf des Tages experimentierten wir mit verschiedenen Wegen das Objekt einzublenden – einmal über eine Textur, später über eine Noise und am Ende gerichtet über eine WorldPosition-Mask.
Desweiteren bauten wir eine Bool-Logik in den Shader ein, um zwischen Textur (Bild) und Noise (Procedural) hin und her zu wechseln, um so die Unterschiede zu erkennen.

Bool Logik innerhalb Shadergraph

Als Ergebnis des Tages hatten wir zwei Fahrzeuge, welche auf verschiedenste Art und Weisen stilisiert gerendert wurden – einmal als Reveal, ein anderes Mal mit Hologramm Charakter.

Showcase animiert

Hologramm Shader

Every Shadergraph Node explained

Hier hat sich wer die Mühe gemacht jede Node kurz zu erklären, wenn auch manchmal etwas lückenhaft. Dennoch ein durchaus sinnvoller Einstieg oder Research!

Beachted bitte, dass es zwischen Lightweight / Universal Pipeline und High Definition Render Pipeline gewisse Unterschiede innerhalb des Shadergraphs gibt. Es ist nach wie vor ein gestalterisches Tool, welches sich in einem „Preview-Zustand“ befindet.

Workshop Tag 1 – 11.11.2019

Einstieg in Shader und Shadergraph

Wir begannen mit einem theoretischen Ansatz, um uns an das Thema heranzuwagen. Dabei ist in zuerst individuellem Research und später einem Zusammenführen der neuen Erkenntnisse ein theoretisches Dokument entstanden.

Im Anschluss ging es dann um einen Einstieg in Shadergraph – ein visuelles, node-basiertes Tool, um Shadercode zu generieren. Dabei war zunächst die Addressierung von Texturen und Properties das Ziel.

Im späteren Verlauf sollten wir diese neu gewonnenen Kenntnisse damit umsetzen, um mehrere Texturen ineinander zu blenden. Mit diesem Ansatz kann man beispielsweise Schnee auf ein Objekt projizieren als obere Textur.
Dies geschah über die Positionierung der UVs des Objekts, über die VertexColor (welche wir mit Polybrush definierten), und über eine WorldPosition.

Showcase Comparison
Showcase animated

In den unteren Screenshots findet ihr den Aufbau der jeweiligen Shadergraphs. Die Beschriftung der einzelnen Bausteine versucht den Teilschrift zu beschreiben und kann gegebenenfalls nicht 100% akkurat sein.

Blend over UVs
Blend over VertexColor
Blend over WorldPosition