Tutorials - Shader Konzept
Sprachenübersicht/Programmierung/C / C++/ C#/Spieleprogrammierung/DirectX
Shader Konzept
Diese Seite wurde 47410 mal aufgerufen.
Dieser Artikel wurde in einem Wikiweb System geschrieben, das heißt, Sie können die Artikel jederzeit editieren, wenn Sie einen Fehler gefunden haben, oder etwas hinzufügen wollen.
Editieren Versionen Linkpartnerschaft Bottom Printversion
Keywords: Shader, Pixelshader, VertextShader, DirectX, Bumpmapping, Lichtberechnungen, Lensflare, Lensglow, Glow, Falloff, Metall, Fell, Haare, Wasser, Organische Overflächen
Inhaltsverzeichnis
Shader sind kleine Programme, die speziell für die Grafikkarte abgestimmt sind und somit in dieser besonders gut laufen. Dieses Kapitel ist für Leute, die sich noch nie mit Shadern beschäftigt haben und kann deshalb von erfahrenen Leuten übersprungen werden.Es gibt zwei unterschiedliche Shader Typen der Pixelshader sowie der Vertexshader.
Shader sind flexibel einzusetzen indem man sie vor dem eigentlichen Renderaufruf aktiviert und danach deaktiviert. Sie können Daten vertexweise oder pixelweise schneller ändern, als es softwaremäßig möglich wäre. Viele Effekte können nur durch Shader in angemessener Geschwindigkeit erstellt werden. Shader sind flexibel einsetzbar.
Shader benötigen eine Grafikkarte, welche die nötigen Shaderfunktionalitäten bereitstellt. Je höher die unterstützte Shaderversion, desto umfangreicher sind die Möglichkeiten. Shader beherrschen keine Abwärtskompatibilität. Die unterschiedlichen Versionen können verwirren.
Vertexshader arbeiten nur mit der Objektgeometrie zusammen. Also nur mit der Position, den Texturkoordinaten, Normalen, Tangenten, Binormalen und den Vertexcolorierungen. Vertexshader sind bis zu einem gewissen Grad softwareemulierbar, weshalb diese Effekte keine geeignete Grafikkarte brauchen.
Pixelshader arbeiten nur mit dem auszugebenden Bildpunkt zusammen. Also nur mit Farben. Sie sind auch was die Oberflächenstruktur angeht extrem mächtiger als Vertexshader.
Shader brauchen, wenn sie genutzt werden, nur minimal höhere Hardwareanforderungen, als wenn man ohne sie arbeitet. Das hängt auch stark mit dem benutzten Effekt zusammen. Vertexshader erfordern nur bei den höheren Versionen eine geeignete Grafikkarte, da sie bei geringen Versionen per Software emuliert werden können. Was aber langsamer ist als mit Grafikkarte. Pixelshader können momentan nicht mit Software emuliert werden, weshalb diese unbedingt eine Grafikkarte benötigen, die Pixelshader unterstützt.
Dieses Kapitel soll einige für uns relevante Shader zeigen. Es wird beschrieben, was der Shader macht, wie er aussieht , wo man ihn im realen Leben betrachten kann, welche Programme diesen Effekt schon unterstützen und wie man ihn erstellen könnte. Das Erstellen kann von jedem anders gewählt werden und ist nur theoretisch.
Beschreibung:
Dieser Shader erzeugt auf einer Oberfläche den Eindruck, als spiegele sich die Umgebung auf der Oberfläche. Durch Extra-Parameter kann man einstellen, wie stark sich die Umgebung spiegelt.
Im realen Leben:
Auf frisch gewachsten Autos. Spiegeln. Blanke Metallobjekte, am besten noch verchromt.
Beispielprogramme:
Halo, Never Winter Nights, GTA, ?
Bilde(r): Shader mit Envmapping und Bumpmapping
Erstellung:
Es müssen die Texturkoordinaten für die Umgebungstextur im Vertexshader berechnet werden, dazu werden die Viewmatrix und die Oberflächennormalen in einer kleinen Formel vereinigt. Das ist einer der einfachsten Shader den man aber mit Bumpmapping an Komplexität steigern kann (siehe Bild).
Nutzen:
Für Metalle oder andere spiegelnde Oberflächen.
Beschreibung:
Dieser Shader berechnet aus einer Reihe vorgegebener Lichtquellen (Position, Typ, Lichtfarbe, ...) die Farbe eines jeden Vertexes (oder Pixels, wenn eine PerPixel-Berechnung vorliegt). Dazu werden komplexe Lichtberechnungsformeln genutzt, die für jeden Lichttyp ( Spot, Point, Directional, ...) anders sind.
Im realen Leben:
Im dunklen Raum eine Kerze. Auf der Disco die Suchscheinwerfer, ...
Beispielprogramme:
3Ds Max, Unreal, Half-Life, ?
Bilde(r): Shader mit farbigen Pointlight
Erstellung:
Für jede Lichtquelle wird ein separater Lichtberechnungsalgorithmus benutzt, um die Farbe eines jeden Vertexes (oder Pixels) zu bestimmen. Dazu wird meist die Neigung der Oberflächennormalen zur Lichtquellenposition berechnet und mit einer Lichtstärkeformel kombiniert. Das Endergebnis aller Lichtquellen wird im Anschluss mit Ambientenlicht kombiniert.
Nutzen:
Für alle Objekte, die durch Licht an Atmosphäre gewinnen können.
Beschreibung:
Dieser Shader berechnet den Effekt mehrerer Linsen, auf die ein Licht scheint. Bei den meisten Kameras wurde dieser "Fehler" durch entspiegelte Linsen beseitigt.
Im realen Leben:
Alte Fotos ohne entspiegelte Linsen, Blick durch alte mehrschichtige Fenster in die Sonne (nicht empfehlenswert).
Beispielprogramme:
Serious Sam, Halo, X, ?
Bilde(r): Shader mit Lensflare
Erstellung:
Meist wird dieser Effekt ohne Shader berechnet. Mit Shader geschieht das, indem man die Lichtquelle mehrmals rendert. Jedes Mal indem man die Textur ändert und das Objekt entlang eines Vektors Licht zu Bildschirmmitte verschiebt. Das Objekt wird dann meist noch skaliert, um den Effekt zu verstärken.
Nutzen:
Simulation eines Hauches Realismus.
Beschreibung:
Dieser Shader vergrößert die Lichtquelle bis zu einem Maximum je näher sich die Lichtquelle dem Bildschirmmittelpunkt nähert.
Im realen Leben:
Ins grelle Licht schauen.
Beispielprogramme:
Serious Sam, Halo, Freelancer, ...
Bilde(r): Shader mit Lensglow und Lensflare
Erstellung:
Die Bildschirmausgabeposition wird berechnet, dann wird die Achse die zur Kamera zeigt (Z-Achse) bei der neu berechneten Position durch eine Kombination Oberflächennormale Viewmatrix berechnet. Je mehr sich diese beiden Werte angleichen, desto geringer wird der Z-Achsen Wert. Dieser Wert gibt an, wie nahe das Objekt zur Kamera gerendert werden soll.
Nutzen:
Simulation eines realen Lichteffektes.
Beschreibung:
Dieser Shader simuliert das Vorhandensein einer Lichtquelle, die von einer Abdeckplane abgedeckt wird. Oder auch ein Objekt, das nur an bestimmten Stellen zu leuchten scheint.
Im realen Leben:
In Las Vegas die Kasinobeleuchtungen. Leuchtstoffröhren mit viel Schmutz.
Beispielprogramme:
Tron 2.0, Unreal
Bilde(r): Shader mit Glow (ohne Textur), Shader mit nachberechnetem Glow (CG)
Erstellung:
Das Objekt wird normal mit allen anderen Effekten berechnet und die Glowtextur ohne Effekte (wie Beleuchtung) darübergezeichnet. Eine andere Hardcoremethode, die aber schöner ist und eine "Aura" bietet, wäre, das Objekt in eine Textur zu zeichnen und dann die Textur nachzubearbeiten indem ausgewählte Farbbereiche "verschmiert" werden. Diese Methode würde aber für die aktuelle Rechenleistung zu viel werden.
Nutzen:
Für Magieeffekte, Runen oder für Effekte an Rüstungen.
Beschreibung:
Dieser Shader verändert die Farbe von einer Startfarbe zur Zielfarbe je mehr die Oberflächennormale eines Vertexes von der Kamera wegzeigt.
Im realen Leben:
Mikroben oder Milben im Elektronenrastermikroskop. Manche Metallarten.
Beispielprogramme:
3Ds Max
Bilde(r): 3Ds Max Materialbilder, 3Ds Max Beispielbild
Erstellung:
Der Unterschied zwischen Oberflächennormale und Viewmatrix wird berechnet und aus diesem Punktprodukt wird dann die jeweilige Stärke in Richtung der Zielfarbe berechnet.
Nutzen:
Durch ersetzen der Farben durch Texturen können schöne Textureffekte für Metalle erstellt werden. Andere Möglichkeiten gäbe es auch im Magiebereich durch den Einsatz von Transparenz. Gloweffekte können dadurch auch aufgewertet werden.
Beschreibung:
Dieser Shader simuliert die Materialart Metall, indem Spiegeleffekt, Rosteffekte und Kratzer/Flakes simuliert werden.
Im realen Leben:
Die meisten Objekte mit Metalliclack.
Beispielprogramme:
Keine (mit allen Effekten)
Bilde(r): DirectX Beispielbilder
Erstellung:
Die Spiegelung wird genauso wie bei den Umgebungsspiegelungen berechnet. Danach wird eine Rosttextur in Abhängigkeit einer Noisefunktion und den Grad des Rostes darübergeblendet. Im Abschluss werden die Flakes ebenfalls durch eine Noisefunktion hinzugefügt.
Nutzen:
Viele Metalleffekte an Rüstungen oder Waffen können mit diesem Shader an Realität hinzugewinnen.
Beschreibung:
Dieser Shader simuliert das Vorhandensein von Fell auf einem Objekt. Im Gegensatz zum Haarshader werden hier die einzelnen Häärchen nicht dynamisch verändert. Dieser Shader ist gut für Objekte, bei denen es nicht auf einzelne fein animierte Haare ankommt sondern auf ein dichtes Fell.
Im realen Leben:
Tiere oder andere lebende Genussmittel.
Beispielprogramme:
Keine
Bilde(r): DirectX Beispielbild
Erstellung:
Die einfachste Methode ist es, das Objekt mehrmals zu rendern, jedes mal muss eine Felltextur (das Fell von oben gesehen) benutzt werden, und das zu rendernde Objekt skaliert werden. Durch diese Zwiebelschnitttechnik entsteht der Eindruck eines Fells. Komplexere Fellshader rendern in den Zwischenräumen Fellquerstreben
Nutzen:
Tiere und andere Fellknäule.
Beschreibung:
Dieser Shader simuliert dynamische Haare in Abhängigkeit von der Windstärke, der aktuellen Bewegungsgeschwindigkeit und anderen äußeren Einflüssen.
Im realen Leben:
Frauen (oder Männer) mit langen Haaren im Wind oder in Bewegung.
Beispielprogramme:
Black & White 2
Bilde(r): Cg Browser Beispielbilder (Haare, Gras)
Erstellung:
Die Haare werden zuerst ganz normal mit der Haarwurzel in/an das Objekt gelegt und je nach aktueller Länge des Haares mithilfe von Bezierkurven in Abhängigkeit äußerer Faktoren beeinflusst. Anisotropische Effekte kombiniert mit transparenten Haartexturen können bessere Haarergebnisse liefern.
Nutzen:
Stachelmonster oder ähnliches Getier mit wenigen haarähnlichen Auswüchsen. Haarshader können zu Grasshader umgewandelt werden.
Beschreibung:
Dieser Shader simuliert ein möglichst realitätsnahes Wasser, indem Umgebungstexturen verzerrt werden und mit Wassermaps sowie Specularmaps und Bumpmaps verbunden werden.
Im realen Leben:
Blick aufs Meer oder ähnliche Gewässer.
Beispielprogramme:
Halo, Morrowind, Yager, DoA, ...
Bilde(r): Halo Szenenbild, Cg Browser Beispielbild
Erstellung:
Die Umgebungsmap wird entweder durch Pixelshader oder Vertexshader verzerrt. Danach werden Wassertexturen und Umgebungstexturen durch eine möglichst dynamische Bumpmap verzerrt. Wasserlichtspiegelungen werden ebenfalls durch diese Bumpmap beeinflusst. Die Bumpmap kann man mit mithilfe einer Noisefunktion zeit- und ortabhängig erstellen, was Wiederholungen ausschließt. Dynamische Wellen kann man durch ein Extraobjekt (ein Plane) erzeugen, das NUR auf das Wasser gerendert wird und zwar nur mit einer Wellenmap als Bumpmapersatz.
Nutzen:
Gewässer wie Flüsse und Seen können damit realistischer aussehen und entsprechen somit dem aktuellen Grafikstandard.
Beschreibung:
Dieser Shader erstellt Texturen im Rendervorgang, um zum Beispiel realistische Materialien wie Marmor oder Holz darzustellen. Wolken, Lava oder andere ähnliche sind mit Prozeduralen Texturen ebenfalls möglich.
Im realen Leben:
Die Natur besteht aus Prozeduralen Texturen, zum Beispiel Baumrinden oder Steine.
Beispielprogramme:
3Ds Max, ...
Bilde(r): Cg Browser Beispielbild, 3Ds Max Beispielszene
Erstellung:
Eine Lookup Textur wird mit einer Noisefunktion kombiniert. Die Noisefunktion kann, wenn man sie mit 3D Koordinaten füttert, erstaunliche 3D Texturen erzeugen, die besonders in der Bewegung genial aussehen.
Nutzen:
Man könnte dynamische Wolkensysteme erzeugen, Wassertexturen kreieren oder immer wieder verschieden aussehende Texturen für alle nur erdenklichen Materialien erschaffen. Getarnte Kreaturen können mit 3D Prozeduralen Texturen auch schön in Szene gesetzt werden (schon klar, dass dies ein Widerspruch ist).
Beschreibung:
Dieser Shader erzeugt den Eindruck einer organischen Oberfläche, indem die Specularwerte erhöht werden und ein schmieriger Film über das Objekt gelegt wird. Pulsierende Flächen wären auch möglich.
Im realen Leben:
Nacktschnecken, nasse Zungen,...
Beispielprogramme:
3Ds Max, ...
Bilde(r): Cg Browser Beispielbilder (pulsierend, mit Film), 3Ds Max Beispielbild (mit Specular)
Erstellung:
Noisefunktionen können für die pulsierenden Bewegungen sorgen, wenn diese an Winkelfunktionen gebunden werden. Dann wird eine Specularmap benötigt, um die Specularfarbe korrekt zu berechnen, was einen schleimigen Glanz bringt, wenn die Specularrechweite gut gewählt wird. Ein kleiner Film kann dann noch dazu geblendet werden. Dieser sollte aus einer transparenten Textur bestehen, so dass diese ähnlich wie Speichel aussieht. Diese Filmtextur sollte aber nur sehr leicht über das Objekt geblendet werden und sich bewegen.
Nutzen:
Kreaturen, die im Regen stehen oder neu geboren wurden wie auch Kreaturen, die eine feuchte Haut haben, können mit diesem Shader exzellent dargestellt werden.
Es sind weitaus mehr Shader möglich, als hier aufgelistet, doch auch wir können nicht alle verwenden, da Objekte meist nur einen Shader besitzen können und wir viele Shader sowieso nicht brauchen werden. Falls es jedoch Shader geben sollte, die hier nicht aufgelistet wurden, so könnt Ihr mir das gerne mitteilen, ich werde mich dann daran setzen und ihn in das Konzept einbauen.
Fragen, Kritik und andere Dinge an FallenAngel84[]at[]web.de
Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren?
Editieren Versionen Linkpartnerschaft Top Printversion
Haben Sie einen Fehler gefunden? Dann klicken Sie doch auf Editieren, und beheben den Fehler, keine Angst, Sie können nichts zerstören, das Tutorial kann wiederhergestellt werden
Sprachenübersicht/Programmierung/C / C++/ C#/Spieleprogrammierung/DirectX/Shader Konzept