Texturen

So funktioniert Raytracing
<- Staub/Nebel und Wolken
-> Bumpmaps
Allgemeines / Würfel / Marmor / Holz / Landschaften / Projektion eines Bitmaps / Wolken / Noise und Turbulenz
Texturen im Allgemeinen

Texturen sind prinzipiell fast das gleiche wie Zusammenfassungen von Objekten; sie werden intern genauso verwaltet, und auch fast genauso in der Script-Sprache definiert. Zusammenfassungen nehmen ja nach erfolgter Schnittpunktberechnung die Farbe des Objektes an, auf dem der Schnittpunkt liegt. Und das wird jetzt geändert: Die Farbe, die die Textur annimmt, wird aus der Position des Schnittpunktes im Raum berechnet. Es handelt sich hier also um wirkliche 3D-Texturen, und nicht nur um die Projektion einer zweidimensionalen Texturen. Die Textur setzt sich also quasi auch im Inneren der Objekte fort.
Für jedes Texturobjekt muss jetzt genau ein Textur-Basisalgorithmus ausgewählt werden (in der Implementierung ist dies bei mir ein eigenes C++-Objekt). Er sorgt für die Zuordnung von Farben zu Koordinaten. Dazu kommen beliebig viele Textur-Modifizierer: Sie skalieren, rotieren und verschieben die Textur. Dabei werden die Koordinaten zuerst von den Modifizierern zurücktransformiert, und danach passiert erst die Farbzuordnung mittels Basisalgorithmus.
Bei der Vorstellug der Basisalgorithmen für Marmor und Holz wird man sich leicht wundern, denn die Basisalgorithmen an sich liefern nicht direkt etwas, was wie Holz oder Marmor aussieht. Damit man eine realistische Textur erhält, braucht man noch einen speziellen Modifizierer: Die Turbulenz, die ich ganz unten erkläre. Dabei wird die Textur nach einer bestimmten Regel durcheinangergewirbelt.

[nach oben]
Basistextur: Würfel
Basistextur: Würfel

Dies ist die einfachste Textur. Das Bild erklärt eigentlich schon alles: Es handelt sich einfach um aufgeschichtete Farbwürfel bzw. ein 3D-Schachbrett.

[nach oben]
Basistextur: Marmor
Basistextur: Marmor

Diese Textur sieht zwar erstmal überhaupt nicht wir Marmor aus. Etwas Turbulenz liefert aber direkt ein verblüffendes Ergebnis, doch dazu mehr weiter unten.
Bei dieser Basistextur handelt es sich einfach um ein Streifenmuster, wobei die weichen Übergänge mit dem Sinus der x-Koordinate erzeugt werden. Um die Breite/Schärfe der Streifen zu beeinflussen, kann man den Sinus nuch in eine beliebige Potenz erheben. Ein höherer Exponent sorgt dabei für schärfere Streifen.

[nach oben]
Basistextur: Holz
Basistextur: Holz

Die Grundlage für die Holztextur sind konzentrische Kreise um die y-Achse. Genauer gesagt: Die Farbe wird durch den Abstand von der y-Achse bestimmt. Wenn man von innen nach außen geht, dann folgt die Farbe einer Art Sägezahn-Kurve

[nach oben]
Basistextur: Landschaften
Basistextur: Landschaften

Der Name deutet schon an, wofür diese Textur gedacht ist; man kann sie natürlich auch für andere Dinge brauchen.
Man definiert dabei selbst beliebig viele Farbverläufe entlang der y-Achse. Damit kann man bei Landschaften z.B. höheren y-Werten die Farbe weiß zuordnen, um damit schneebedeckte Gipfel zu erhalten etc.

[nach oben]
Basistextur: XY-Projektion eines Bitmaps
Basistextur: Zylinderprojektion eines Bitmaps
Basistextur: Kugelprojektion eines Bitmaps
Basistextur: Projektion eines Bitmaps

Hier wird eine Textur aus einer Windows-BMP-Datei gelesen und auf die Objekte "projiziert". Dabei gibt es drei verschiedene Projektionen: Bei der XY-Projektion wird das Bitmap einfach frontal auf die Objekte projiziert. Das heißt, die x- und y- Koordinaten im Raum geben auch die Koordinaten auf dem Bitmap an.
Die zweite Möglichkeit ist die Zylinderprojektion. Dabei wird die y-Komponente im Bitmap weiterhin mit der y-Komponente im Raum identifiziert; die x-Komponente im Bitmap ergibt sich allerdings aus dem "Längengrad".
Was noch fehlt, ist schließlich die Kugelprojektion. Dabei wird die y-Komponente im Bitmap aus dem Breitengrad, die x-Komponente aus dem Längengrad berechnet.

[nach oben]
Basistextur: Wolken
Besondere Basistextur: Wolken

Das Besondere an dieser Textur ist, dass sie nicht die Farbe des Objektes modifiziert, sondern die Transparenz und Lichtreflexion. Gedacht ist sie eigentlich ausschließlich, um sie auf Staub anzuwenden. Mit noch etwas Turbulenz sieht das schon ganz brauchbar aus. Ansonsten hat die Textur große Ähnlichkeit mit der Marmor-Textur.

[nach oben]
Marmortextur mit Turbulenz
Holztextur mit Turbulenz
Wolkentextur mit Turbulenz
Noise und Turbulenz

Noise und Turbulenz sind zwei ganz besondere Textur-Modifizierer. Sie verwirbeln die Textur nach einem bestimmten Schema, aber doch zufällig durcheinander. Erst damit werden aus den Basistexturen richtig interessante Texturen.
Noise und Turbulenz sind ein Kapitel für sich. Anstatt hier alles zu erklären, verweise ich nur auf die Procedural Texture Page.
Um schöne Texturen hinzukriegen, ist manchmal ein bisschen Probiererei gefragt; am Anfang kann man ja von meinen Beispielen links ausgehen. Ich benutze in den Beispielen nur Turbulenz, die liefert in der Regel schönere Ergebnisse.

[nach oben]

Copyright (c) 1999-2000 Martin Melcher