Logo
Unity

Erstellung eines Voxel-Wasser/Lava-Shaders mit Unity

Seite wird geladen

Shader sind kurz gesagt Programme, die nur auf einer GPU-Grafikkarte laufen und ursprünglich für die "Schattierung" von 3D-Szenen benutzt wurden.

Mittlerweile werden sie auch für komplexe Spezialeffekte, Nachbearbeitungsarbeiten

und sogar Funktionen eingesetzt, die gar nichts mehr mit einer grafischen Darstellung zu tun haben.

Durch die Parallelisierung einer Grafikkarte sind Shader extrem schnell und performant. So lassen sich auch rechenintensive Probleme wie z. B. künstliche Intelligenz mit Pathfinding auf die Grafikkarte übertragen.

Die zwei häufigsten Shader sind Fragment-/Pixel- Shader und Vertex-Shader. Des Weiteren gibt es noch Compute-Shader für rechenintensive Anwendungen, Geometrie-Shader, Tessellation-Shader und Raytracing-Shader.

Ich beziehe mich hier allerdings nur auf Fragment-/Pixel- und Vertex-Shader.

Fragment-Shader oder auch Pixel-Shader sind zuständig für die Farbe eines "Fragments" bzw. Pixel. Hiermit werden bspw. Texturen auf Objekten dargestellt.

Fragment- bzw. Pixel-Shader laufen für jeden einzelnen Pixel auf dem Bildschirm. Bei einer HD-Auflösung von 1920 x 1080 Pixel bedeutet dies exak 2,073,600 mal.

Um fortzufahren, müssen wir den Begriff "UV" klären. "U" und "V" sind die Texturkoordinaten. Diese bestimmen, welcher Teil einer Textur wo auf das 3D-Modell "gemalt", also projiziert, werden soll. U und V haben hier keine sprachliche Bedeutung.

UV-Koordinaten beginnen unten links auf einer Textur mit den Koordinaten "0, 0" und enden oben rechts mit den Koordinaten "1, 1".

Da Wellen sich bewegen, müssen wir auch die UVs unserer Noise-Muster bewegen. Das passiert mit "Tiling and Offset" (s. o. Screenshot).

Hier werden die Texturkoordinaten mit einer Zeitangabe und einem Wert multipliziert, um den Bewegungseffekt zu erzeugen.

Normalerweise würden Texturen grob gesagt "verschwinden", sobald wir die UVs zu weit bewegen.

Jedoch haben unsere Noise-Muster den Vorteil, dass sie wiedererkennbar sind und sich ihre UVs beliebig weit bewegen lassen.

REFLEXIONEN FÜR DEN LETZTEN FEINSCHLIFF

Um unser Wasser noch etwas zu optimieren, eignen sich Reflexionen sehr gut.

LEVEL UP! DER SHADER IST FERTIG!

Hier sehen Sie zwei weitere Beispiele, welche Shader-Effekte noch möglich sind. Eine Lava-Variante und einen blubbernden Gift-See.

Wir hoffen, unser Blogbeitrag zur Erstellung eines Voxel-Wasser-Shaders war interessant für Sie. Vielleicht haben Sie ja auch nützliche Anregungen für Ihre eigene Arbeitspraxis gewonnen.

Jeder mag Kekse. Die Winterraben auch. Also, schlag zu! ;)

Technisch notwendige Cookies, die zum Beispiel das einloggen Regeln.

Cookies und Skripte die den Erfolg von Marketing-Kampagnen verfolgen und das Nutzerverhalten auf unserer Website beobachten.

Cookies und Scripte die uns dazu dienen unsere Website besser zu machen. Und Ihnen komfort funktionen bieten.

Lädt externe Medien von Youtube oder Vimeo. Dabei werden Daten an diese Anbieter übertragen.