Shader und Texturen

Aus Hexer Wiki
Wechseln zu: Navigation, Suche

Während bei 3D-Modellen die "Geometrie" die Form bestimmt, wird das Aussehen und die Eigenschaften durch das "Material" bestimmt.

Dabei versteht man unter Material die Summe aller dieser Eigenschaften, die in der Regel durch Texturen und Shader bestimmt werden.

Texturen[Bearbeiten | Quelltext bearbeiten]

Der Begriff Textur wird dabei im allgemeinen für 2D-Grafiken verwendet, die auf die Oberfläche des Objektes projeziert werden. In der 3D-Grafik spricht man dabei auch von "Mapping". Diese Textur kann verwendet werden, um dem Objekt seine typische Färbung zu verleihen.

Da es bei dem Auftragen einer zweidimensionalen Darstellung auf einen dreidimensionalen Körper zu Problemen kommen kann (wie jeder weiß, der einmal versucht hat, einen Ball in ein Blatt Papier einzuwickeln), wurden verschiedene "Mapping"-Arten entwickelt. Diese gehen in den Grundformen auf bereits vor Jahrhunderten in der Kartographie entwickelte Projektionsarten zurück, z.B. die Mercator-Projektion. Diese Standardformen haben jedoch meist den Nachteil, daß es in bestimmten Bereichen (z.B. den Polen einer Kugel) zu deutlichen Verzerrungen kommt. Für komplexe Formen wie z.B. Lebewesen, bei denen es viele solcher Zonen gibt, wurde daher auch eine neue Form entwickelt, das sogennante UVW-Mapping.

Bei diesem Verfahren hat man dann nicht mehr, wie bei sonstigen Texturen ein rechteckiges Bild mit x*y Pixeln Länge und Breite, vielmehr wird das "Gitternetz" auf die verfügbare Fläche projeziert und ein Polygon auf dem "Blatt" entspricht einem Poylgon im Modell. Durch Anpassung dieser Polygone können Verzerrungen weitestgehend vermieden werden.

Die Verwendung von 2D-Bildateien hat den Vorteil, dass man sehr große Kontrolle über das Resultat hat, und z.B. durch Verwendung von Fotographien sehr realistische Texturen erzeugen kann (z.B. für eine Darstellung der Erde durch die Verwendung von Satelitenbildern). Gleichzeitig ist damit aber ein großer Nachteil verbunden: Die benötigte Größe der Bilddatei und die fehlende Möglichkeit der beliebigen Vergrößerung. Wer ein Bild aus dem Internet schon einmal in einem Bildbetrachter vergrößert hat, wird wissen, wie schnell ein solches Bild zu einem "Pixelbrei" verkommen kann, in dem man das dargestellte Objekt nicht mehr erkennen kann. Daher gilt die grobe Regel, daß eine Texturdatei mindestens doppelt so groß sein sollte wie die maximale Darstellungsgröße auf dem Bildschirm. Ein Beispiel: Um die Erde bildschirmfüllend bei einer Auflösung von 1024*768 Bildpunkten sauber darstellen zu können benötigt man eine Textur von mindestens 2048*768 Punkten ("Vorderseite" 1024*768, "Rückseite"

1024*768). Eine solche Datei benötigt bei 24 Bit "Farbtiefe" (True Color) einen Speicherplatz von ca. 4,6 Megabyte (Kompressionsformate wie JPEG bringen hier keine Ersparnis, da die Kompression sich lediglich auf den benötigten Platz auf dem Speichermedium auswirkt, im Arbeitsspeicher entfaltet sich die Datei zu ihrer vollen Größe). Dieses Problem potenziert sich in der Regel bei komplexeren Effekten und Darstellungen, wenn mehrere Texturen verwendet werden müssen. So können für die in einer Szene verwendeten Texturen ohne größere Probleme durchaus mehrere hunderte Megabyte zusammenkommen.

TexturiertWiki.jpg

Shader[Bearbeiten | Quelltext bearbeiten]

Unter "Shadern" versteht man im allgemeinen mathematische Funktionen die bestimmte Muster erzeugen (z.B. einen Farbverlauf oder ein Kachelmuster). Solche "Softwareshader" benötigen deutlich weniger Speicher, häufig nur wenige Kilobyte, da der Speicherplatz nur für die mathematische Formel, die Ausgangswerte und, je nach Arbeitsweise des Shaders, einige Zwischenergebnisse. Der Nachteil der Shader liegt zum einen in der (mathematisch bedingten) Gleichmäßigkeit des Ergebnisses, zum anderen in dem erheblichen Aufwand, der damit verbunden sein kann, ein bestimmtes Ergebnis zu erzielen. So muß man in der Regel durch ständiges Ausprobieren seine Einstellungen immer wieder schrittweise verbessern. Um das zu erleichtern gibt es aber zu vielen Shadern sogenannte "Presets" (Voreinstellungen), die für verschiedene Materialien bereits die typischen Ausgangswerte mitbringen. Besonders gerne werden Shader für Materialien wie Metall, Holz, Wasser, Stein usw. verwendet.

Neben dieser Grundform der Shader treten sie aber auch noch in weiteren Formen auf. So gibt es Shader, die selbst keine Materialeigenschaften erzeugen, sondern der Kombination von Shadern und Texturen dienen. Mit diesen lassen sich z.B. Farbwerte einer Textur während einer Animation verändern (z.B. ein Tuch, welches sich voll Wasser saugt und dabei dunkler oder transparent wird) oder Spezialeffekte wie Transluzenz erzeugen (Eine partielle Lichtdurchlässigkeit, wie sie auch die menschliche Haut aufweist).

Hardwareshader, eine weitere From der Shader machen zwar im Prinzip das gleiche wie auch die zuvor angesprochenen Shader, nur mit dem Unterschied, daß sie eben nicht als Software vorliegen, sondern als (mehr oder minder) feste Schaltungen in den Chips (Grafikkarten) vorliegen.

ShaderWiki3.jpg

Verwendung von Shadern und Texturen[Bearbeiten | Quelltext bearbeiten]

Shader und Texturen finden nicht nur für die Farbgebung Verwendung, mit ihnen kann man weitaus mehr steuern als es zunächst den Anschein haben mag. Da 3D-Modelle im Kern nur aus Punkten bestehen, die Geraden verbunden sind, wäre ohne Shader keine Darstellung von gerundeten Objekten möglich. Hier bedient man sich eines Tricks. Polygone besitzen eine sogenannte "Normale", einen Vektor der rechtwinkling aus der Fläche des Polygons hinauszeigt. Vergleicht man diese Normale mit denen der benachbarten Polygone, dann kann man über die unterschiedlichen Winkel, die diese zur "Kamera" (dem Betrachter) haben, dem Programm mitteilen, ob das Objekt in diesem Bereich nun gerundet oder kantig sein soll, in dem man einen Grenzwert festlegt. Setzt man diesen Wert auf 90 Grad, so heißt dies für die Software, daß alle Winkel unter 90 Grad eine Rundung, und Werte ab 90 Grad eine Kante bedeuten. Je nach Qualität der Software kann bei diesen Werten ein Zwölfflächer bereits als perfekte Kugel erscheinen, da die Winkel weniger als 90 Grad betragen. Am bekanntesten dürfte hier das Garoud-Shading sein. Die Rundung wird dabei erzeugt, indem die Software den Farbwert zu den vom Betrachter abgewandten Seiten anhand der Normalen-Winkel gleichmäig dunkler werden lässt.

Eine Variante dieses Tricks wird beim rendern (berechnen der Bilder) in Echtzeit gerne verwendet, um die Polygonzahl der Modelle niedrig zu halten, das "Normal-Mapping".

Für großen Detailreichtum werden große Polygonzahlen benötigt, die aber eine hohe Rechenleistung und -zeit benötigen. Der Trick besteht nun darin, zwei Modelle eines Objets zu erstellen. Eines davon ist stark detailliert und verfügt beispielsweise über 20 Millionen Polygone, das andere hat aber nur 10.000. Das hochdetailierte Modell wird nun berechnet und das Bild in eine spezielle Datei geschrieben. Diese setzt die Normalen in bestimmte Farben um. Benutzt man dieses Bild als Textur für das niedrig detailierte Modell, so hat (rechnerisch) jedes seiner Polygone statt einer Normale nun 2.000. Die Winkelschwankungen zwischen diesen Normalen werden nun dazu benutzt, für dieses einfache Modell eine Schattierung zu erzeugen, die der des hochdetailierten Modells entspricht.

Weitere Eigenschaften, die über Texturen und Shader gesteuert werden sind u.a. die Oberlächenstruktur mittels Relief (engl.: Bump), Transparenz, Reflektion, Diffusion (Lichtstreuung) und Glanzlichter.

Beim Relief wird ein Graustufenbild (oder -shader) verwendet, um erhabene und abgesenkte Bereiche auf der Oberfläche darszustellen. Je nach Software bedeuten dabei reines Weiß oder reines Schwarz die größten Höhen oder Tiefen. Die Farbwerte der Höhen werden dabei aufgehellt, die Tiefen abgedunkelt. Für das menschliche Auge sieht es dann so aus, als würden sich auf der Oberfläche kleine Schatten bilden, und wo Schatten sind, sagt unser Gehirn, muß dann auch eine Struktur vorhanden sein. Auffällig wird dieser Trick aber an den Rändern und Kanten des Objekts, da keine wirkliche Struktur erschaffen wird.

Die Transparenz kann nach dem gleichen System gesteuert werden, wobei die Effekte von undruchsichtig bis unsichtbar (bis ggf. auf Lichtbrechung) reichen können. Auch die Reflektionen können so gesteuert werden. Nachvollziehbar wird dies bei Wasser und Glas. Diese sind bei bestimmten Blickwinkeln sehr durchsichtig, bei anderen können sie aber zu beinahe perfekten Spiegeln werden. Mittels Shadern kann angegeben werden, wie der Reflektionsgrad in Abhängigkeit vom Bilckwinkel gesteuert werden soll. So auch bei der Diffusion: Sauberes Wasser streut das Licht kaum, finden sich aber viele Schwebeteilchen darin, dann wird es schnell zu einer trüben Brühe, da das Licht so stark gestreut wird, dass es dem Auge schwerfällt, etwas zu erkennen. Glanzlichter treten bei harten, glatten Oberflächen deutlich sichtbar auf (z.B. Christbaumkugeln), bei rauhen, weichen Oberflächen kaum. Auch hier kann über Shader und Texturen einem Material gesagt werden, wo diese auftreten sollen und wo nicht.

Durch die Kombination dieser "Kanäle" können so realistisch wirkende Materialien erzeugt werden, eine Oberfläche kann an einer Stelle andere Eigenschaften aufweisen, als an anderen. In vielen Fällen ist es erst die Kombination dieser Kanäle unter Verwendung ausgefeilter Texturen und Shader, die ein Objekt, wie z.B. Wasser, erst glaubwürdig machen (gerade Wasser ist dabei schwierig darzustellen).

Weiterführende Links[Bearbeiten | Quelltext bearbeiten]