seminararbeit im hauptseminar „grafikprogrammierung“ · die methode des gouraud shading, 1971...

16
Christina Nell 3D-Computergrafik Seminararbeit im Hauptseminar „Grafikprogrammierung“ Universität Ulm Sommersemester 2008 1

Upload: others

Post on 29-Oct-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

Christina Nell3D-ComputergrafikSeminararbeit im Hauptseminar „Grafikprogrammierung“

Universität UlmSommersemester 2008

1

Page 2: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

Inhalt

1 Einleitung 3

2 Beleuchtung 32.1 Grundlagen 32.2 Beleuchtung 42.3 Shading 5

2.3.1 Flat Shading 52.3.2 Gouraud Shading 52.3.3 Phong Shading 6

3 Texturierung 73.1 Texture Mapping 73.2 Bump Mapping 83.3 Normal Mapping 93.4 Displacement Mapping 93.5 Parallax Mapping 10

4 Texturfilterung 104.1 Mipmaps 114.2 Nearest-Neighbor-Interpolation 114.3 Bilineares Filtern 124.4 Trilineares Filtern 124.5 Anisotropes Filtern 13

5 Zusammenfassung und Ausblick 14

Literatur 15

2

Page 3: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

1 Einleitung

Die Geschichte der Computergrafik ist länger, als man denkt. So wurde zum Beispiel die Special Interest Group on Graphics (SIGGRAPH) der Association for Computing Machinery (ACM) offiziell bereits 1969 gegründet – der Gründung ging eine sechsjährige Existenz als Special Interest Committee voraus [4].Allerdings geht die Geschichte der 3D-Computergrafik nicht so weit zurück, denn auch wenn es bereits Anfang der 1970er Jahre einige Durchbrüche zu vermelden gab, so stand damals noch nicht die entsprechende Hardware zur Verfügung, um die zugehörigen Berechnungen in Echtzeit durchführen zu können. Viele der heute verwendeten Algorithmen zur Beleuchtung oder Texturierung, wie u.a. Gouraud Shading oder Bump Mapping, stammen noch aus dieser Zeit und finden sich als weit verbreitete Methoden in modernen Grafikkarten wieder.Diese Ausarbeitung befasst sich lediglich mit einem relativ kleinen Teil der Grafikpipeline. Die Grafikpipeline ist eine Modellvorstellung der Computergrafik, die den Vorgang beschreibt, in dessen Verlauf aus einer dreidimensionalen Szene nach und nach ein zweidimensionales Ausgabebild wird [19]. In diesem Verlauf werden auch die für das letztendliche Erscheinungsbild der Szene nötigen Berechnungen zur Beleuchtung, dem Shading, der Texturierung und der Texturfilterung durchgeführt, die Thema dieser Ausarbeitung sein sollen.

2 Beleuchtung

2.1 Grundlagen

Um zu verstehen, wie die Beleuchtung einer Szene funktioniert, muss man zuerst die nötigen geometrischen Grundlagen schaffen. Hierzu gehören die Definitionen des Vertex, des Polygons und des Normalenvektors.Als Vertex bezeichnet man einen Punkt im dreidimensionalen Raum, der über je eine x-, y- und z-Koordinate verfügt. Zusätzlich können für jeden Vertex Eigenschaften wie z.B. Farbwert oder auch Transparenz definiert werden.Werden mindestens drei Vertizes miteinander verbunden, so spricht man von einem Polygon bzw. von einem Dreieck, wenn es genau drei Vertizes sind. Diese Ausarbeitung geht davon aus, dass die Objekte in Form von Dreiecken vorliegen, da ein aus mehr als drei Vertizes bestehendes Polygon mittels verschiedener Algorithmen leicht in Dreiecke zerlegt werden kann.Als Normalenvektor bezeichnet man einen – in der Computergrafik meist dreidimensionalen – Vektor, der senkrecht zu einer gegebenen Oberfläche, also z.B. einem Polygon, steht. Damit gibt der Normalenvektor gewissermaßen die Ausrichtung der Oberfläche an, was in der Computergrafik von großer Bedeutung ist, wie später noch dargelegt werden soll.

Die eigentliche Beleuchtung beruht auf einfachen physikalischen Modellen. Diese Modelle stellen deswegen eine Vereinfachung der Realität dar, weil diese als Ganzes sehr komplex ist. Man denke nur an den sogenannten Welle-Teilchen-Dualismus, der das Phänomen bezeichnet, dass Licht sowohl ein Teilchen als auch eine Welle sein kann [24]. Da es viel zu aufwändig – und für den Zweck auch schlicht und ergreifend unnötig – wäre, diesen Dualismus in der Computergrafik nachzubilden, vereinfacht man an dieser Stelle und zieht für die Berechnung der Beleuchtung oft nur die Teilcheneigenschaft des Lichts in Betracht.Ein weiteres Beispiel für diese Vereinfachung der physikalischen Realität ist der Verzicht auf Radiosity. Als Radiosity bezeichnet man das Rückleuchten von Objekten, d.h. dass Oberflächen von Objekten Licht nicht nur in die Szene hinein, sondern auch zu anderen Objekten hin reflektieren können (vgl. [23]). Wenn man dies konsequent verfolgt, so können sich die Objekte

3

Page 4: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

innerhalb einer Szene quasi gegenseitig beleuchten. Die Abbildungen 1.1 und 1.2 sollen verdeutlichen, wie sehr Radiosity helfen kann, eine Szene realistischer erscheinen zu lassen: In Abb. 1.1 wurde lediglich direkte Beleuchtung verwendet, d.h. die Beleuchtung erfolgt nur durch das Licht selbst. Abb. 1.2 hingegen wurde mit Hilfe von Radiosity berechnet. Die Helligkeit stammt hier nicht nur vom Licht selbst, sondern auch von anderen Objekten in der Szene. So lässt sich z.B. an der weißen Säule das Rückleuchten des roten Teppichs beobachten.Lange Zeit wurde die Berechnung von Radiosity als zu aufwändig angesehen, um in Echtzeit berechnet werden zu können, doch 2004 stellten Greg Coombe et al. eine Technik vor, die für eine Szene mit 10.000 Elementen weniger als eine Sekunde Rechenzeit benötigte [6]. Man kann sich also vorstellen, dass mit fortschreitender Entwicklung der Grafikkarten bei der Verwendung dieses Algorithmus die Anzahl der Elemente steigen und die zur Berechnung benötigte Zeit sinken wird.

2.2 Beleuchtung

Grundsätzlich geht es bei der Berechnung der Beleuchtung darum festzustellen, wieviel Licht sich in der Szene befindet. In Analogie zur physikalischen Realität werden auch in der Computergrafik Lichtquellen als die Stellen im Raum definiert, die das Licht in die Szene einbringen. Diese sogenannten geometrischen Lichtquellen [15] existieren in dieser Form zwar nicht in der wirklichen Welt, stellen aber eine Annäherung dar, die für Echtzeitgrafik ausreichend ist. Hierbei lassen sich Lichtquellen grob in lokale und globale Lichtquellen unterteilen, die sich – wie die Bezeichnung schon impliziert – darin unterscheiden, auf welchen Teil der Szene sie wirken.Globale Lichtquellen befinden sich in unendlich großer Entfernung zur Szene und sind – wenn man Verdeckung vernachlässigt – in der Lage, die gesamte Szene zu beleuchten. Zu dieser Art von Lichtquellen zählen Lichtquellen, die gerichtetes Licht abstrahlen. Diese Lichtstrahlen sind parallel zueinander und haben alle die gleiche Richtung. Das beste Beispiel für eine solche Lichtquelle ist die Sonne.Lokale Lichtquellen befinden sich hingegen an einer eindeutigen Position innerhalb der Szene und wirken nur auf einen bestimmten Teil derselben. Hier gibt es insbesondere zwei Arten, Punktlichtquellen und Spotlights. Punktlichtquellen strahlen von ihrer Position aus Licht in alle Richtungen ab, wie z.B. eine Glühbirne in einem Zimmer. Im Gegensatz dazu strahlen Spotlights Licht nur in eine Richtung ab, und zwar in Form eines Lichtkegels, wie man ihn z.B. von einem Scheinwerferspot auf einer Konzertbühne her kennt.

Bis zum Jahr 1999 wurden die Berechnungen zur Beleuchtung, also wieviel Licht von welcher Lichtquelle in der Szene bei den jeweiligen Objekten ankommt, auf der CPU ausgeführt. So mussten oft Kompromisse zu Lasten der Bildqualität eingegangen werden, da die Kapazität der CPU auch durch Systemdienste oder andere zur Anwendung gehörende Berechnungen belastet wird. 1999 stellte nVidia mit der GeForce 256 die erste Grafikkarte vor, die diese Berechnungen mithilfe integrierter Engines für Transformation und Beleuchtung auf der Graphics Processing Unit (GPU), also in Hardware, durchführte [1, 9]. Dieser Vorgang trägt den Namen „Transform and Lighting“. Diese Engines sind darauf spezialisiert, genau die mathematischen Funktionen zu berechnen, die für die Transformation bzw. Beleuchtung von Dreiecken nötig sind, und sind daher in der Lage, in der gleichen Zeit mehr Dreiecke und Lichtquellen zu bearbeiten als die CPU. Diese wird zudem durch das das Ausführen dieser Berechnungen auf der GPU entlastet, so dass mehr Kapazität der CPU für andere Aufgaben, wie z.B. Berechnungen zur künstlichen Intelligenz, zur Verfügung steht.

4

Abb. 1.1: ohne Radiosity

Abb. 1.2: mit Radiosity

Page 5: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

2.3 Shading

Beleuchtung und Shading sind eng miteinander verwandt, dennoch werden die entsprechenden Berechnungen an unterschiedlichen Stellen in der Grafikpipeline durchgeführt. Ein Zitat von David Kirk, Mitglied der Forschungsabteilung bei nVidia, lässt den Unterschied vielleicht klarer erscheinen: „Beleuchtung ist der Helligkeitswert, wohingegen es beim Shading um Reflektion und/oder Lichtdurchlässigkeit geht.“ ([15], Übersetzung d. Verf.) Während die Beleuchtung sich damit beschäftigt, woher das Licht kommt und mit welcher Intensität es auf die Oberfläche trifft, geht es im Shading-Schritt darum, was passiert wenn das Licht auf die Oberfläche getroffen ist, wie das Material auf das Licht reagiert, wieviel Licht reflektiert wird und somit sichtbar ist. Da beim Shading unmittelbar mit dem Licht gerechnet wird ist es nur logisch, dass Shading erst nach der Beleuchtung passiert.Das Ausgabemedium ist dabei in der Höhe in sogenannte Scanlines aufgeteilt, wobei jede Scanline einem Pixel entspricht. Diese Scanlines werden der Reihe nach von oben nach unten durchlaufen. Der Rasterizer erhält pro Scanline die beiden Endpunkte eines Dreiecks und berechnet für diese beiden Punkte jeweils die Farbwerte. Die Farbwerte der Pixel zwischen diesen Endpunkten werden dann mithilfe verschiedener Algorithmen interpoliert. Die drei bekanntesten sollen im Folgenden vorgestellt werden.

2.3.1 Flat Shading

Beim Flat Shading handelt es sich um die einfachste Shading-Methode. Der Algorithmus arbeitet auf den Dreiecken, wobei für jedes Dreieck nur eine einzige Farbe verwendet wird – aufwändige Interpolationen finden hier also nicht statt. Als Farbe wird entweder der Mittelwert der Farben der drei Vertizes des jeweiligen Dreiecks gewählt oder – wie im Fall von Direct3D – es wird aus den Farben der drei Vertizes zufällig eine ausgewählt [15].Diese Shading-Methode ist sehr einfach und leicht zu berechnen. Allerdings sehen derart geshadete Objekte sehr unrealistisch und blockartig aus; Glanzlichter werden nur dann dargestellt, wenn sie sich in der Fläche über das gesamte Dreieck hinweg erstrecken, d.h. wenn für jeden Vertex eine dem Glanzlicht entsprechende Farbe definiert ist. Aus dieser Einschränkung muss man jedoch folgern, dass Flat Shading Glanzlichter nicht zuverlässig reproduzieren kann. Dazu kommen noch die Auswirkungen des Mach-Band-Effektes, die beim Flat Shading besonders deutlich zu beobachten sind.Der Mach-Band-Effekt bezeichnet ein Phänomen der menschlichen Wahrnehmung [20]. Dieses Phänomen liegt in der Eigenschaft des menschlichen Auges begründet, Kanten besonders stark wahrzunehmen, und lässt sich vor allem bei benachbarten Farbflächen unterschiedlicher Farbe bzw. unterschiedlichen Farbtons beobachten, zwischen denen es keinen Übergang gibt. Da diese Übergänge beim Flat Shading nicht vorhanden sind und somit der Mach-Band-Effekt auftritt, tritt die blockartige Struktur besonders in den Vordergrund.

2.3.2 Gouraud Shading

Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung verwendet, was wie oben dargelegt nicht hundertprozentig korrekt ist, da eigentlich zwischen Shading und Beleuchtung unterschieden werden muss. Vielmehr handelt es sich um eine Beschreibung der Grundlage, auf welcher dieser Algorithmus die Farbwerte berechnet:Beim Gouraud Shading werden die Farbwerte herangezogen, die in den einzelnen Vertizes gespeichert sind. Zusätzlich werden die Normalen in diesen Punkten benötigt, die entweder direkt aus der umgebenden Oberfläche bestimmt oder durch die Oberflächennormalen der umliegenden

5

Page 6: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

Dreiecke approximiert werden können. Wie in Abb. 2 dargestellt werden die Farbwerte der Vertizes nun in Laufrichtung der Scanlines, d.h. von oben nach unten, entlang der Kanten interpoliert. Anschließend werden in jeder Scanline auch die Farbwerte innerhalb des Dreiecks, d.h. von links nach rechts, interpoliert [10].Gouraud Shading kann den Mach-Band-Effekt deutlich verringern, wenn auch nicht ganz verhindern. Durch die Interpolationen zwischen den Dreiecken erscheinen die Übergänge weicher, was den Eindruck einer glatteren Oberfläche und somit von mehr Realitätsnähe erweckt. Auf der anderen Seite bezahlt man dieses Weichzeichnen bei einer niedrigen Zahl von Dreiecken mit dem Verlust besonders hoher oder niedriger Intensitäten – diese starken Kontraste können durch die Interpolation so stark abgeschwächt werden, dass sie als solche nicht mehr zu erkennen sind. Falls Glanzlichter verwendet werden, die nicht auf einen Vertex fallen – von wo aus sie zwar über die Dreiecksfläche interpoliert werden würden, aber immerhin noch sichtbar wären – sondern auf eine Position im Inneren des Dreiecks, so gehen diese Glanzlichter verloren. Dieses Problem ist allein der Berechnung der Dreiecksfarbe über die Farbwerte der Vertizes zu schulden – im Inneren des Dreiecks werden schlicht und ergreifend keine Farbwerte berechnet. Auch eine Aufteilung des Dreiecks in mehrere kleinere kann hier nicht unbedingt Abhilfe schaffen, da auch bei einer höheren Anzahl an Dreiecken das Glanzlicht auf mindestens einen Vertex fallen müsste, um berücksichtigt zu werden. Ganz abgesehen davon, dass eine derart künstlich erhöhte Zahl von Dreiecken aus Gründen der Berechnungsgeschwindigkeit unbedingt vermieden werden sollte.Dennoch ist das Gouraud Shading dem Flat Shading vorzuziehen, da es im Vergleich die höhere Bildqualität bietet und dabei vergleichsweise annehmbaren Rechenaufwand erfordert.

2.3.3 Phong Shading

Die dem Phong Shading zugrundeliegenden Methoden wurden von Phong Bui Tuong entwickelt, der diese erstmals in seiner Doktorarbeit 1973 präsentierte [14]. Beim Phong Shading werden nun nicht die Intensitäten der einzelnen Vertizes, sondern die Oberflächennormalen der Dreiecke interpoliert. Analog zum Gouraud Shading wird auch für diese Shading-Technik ein nicht ganz korrekter Begriff, nämlich der der Per-Pixel-Beleuchtung, synonym verwendet.Die Farbwerte werden hier für jedes Pixel anstatt für jeden Vertex berechnet, daher der Name Per-Pixel-Beleuchtung. Auch das Phong Shading erfordert, dass für jeden der drei Vertizes des Dreiecks die Oberflächennormale an dem entsprechenden Vertex definiert ist. Diese Normalen werden dann – analog zu den Farbwerten beim Gouraud Shading – entlang der Dreieckskanten von oben nach unten, also wieder in Laufrichtung der Scanlines, interpoliert, so dass für jeden Punkt auf diesen Kanten eine Oberflächennormale definiert ist. Anhand dieser Normalen wird anschließend unter Zuhilfenahme des Phong-Beleuchtungsmodells (oder eines beliebigen anderen Beleuchtungs-modells) der Farbwert des Pixels für jeden Farbkanal (Rot, Grün, Blau) einzeln bestimmt [8].Phong Shading stellt eine Verbesserung des Gouraud Shading dar, allerdings ist mit dieser Verbesserung der Bildqualität auch ein wesentlich höheres Maß an Rechenaufwand verbunden, da die zu berechnende Gleichung um Reflektionsmodell eine Summe über die Anzahl der Lichtquellen ist und – im Standardfall eines Farbbildes – für jeden Farbkanal einzeln berechnet werden muss. Auch wenn Per-Pixel-Beleuchtung von den Grafikkartenherstellern – sicherlich nicht ganz zu unrecht – als der neue große Quantensprung in der 3D-Computergrafik gefeiert wird, so ist die Anzahl der Lichtquellen noch durch die zur Verfügung gestellte Hardware begrenzt.

6

Abb. 2.: Interpolation beim Gouraud Shading

Page 7: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

Abb. 3 zeigt die drei Shadingmethoden im direkten Vergleich: Beim Flat Shading (links) wird das Glanzlicht nicht dargestellt, zudem bewirkt der Mach-Band-Effekt eine überdeutliche Wahrnehmung der Blockstruktur. Zwar kann das Glanzlicht durch das Gouraud Shading (Mitte) dargestellt werden, allerdings nur sehr verschwommen. Einzig das Phong Shading (rechts) kann das Glanzlicht richtig darstellen.

Abb. 3: Shadingmethoden im VergleichFlat Shading Gouraud Shading Phong Shading

3 Texturierung

Die meisten Gegenstände, denen man im täglichen Leben begegnet, besitzen auf die eine oder andere Art ein Muster aus Farbe und/ oder eine Oberflächenstruktur, sei es eine tapezierte Wand, ein Stück Holz oder auch eine Backsteinmauer. Selbst mit der heutigen Hardware ist es illusorisch, eine Oberfläche in all ihren Details durch die Modellierung mit Polygonen oder Dreiecken darstellen zu wollen.Um dieses Problem zu umgehen wurden verschiedene Methoden entwickelt, um einer Oberfläche Struktur bzw. Muster und damit mehr Realitätsnähe zu verleihen. Viele dieser Methoden sind in Hinblick auf die benötigte Rechenzeit sehr günstig, was vor allem früher wegen der bereits angesprochenen nicht sehr leistungsstarken Hardware von großer Bedeutung war.Die wichtigsten dieser Methoden sollen nun im Folgenden vorgestellt werden.

3.1 Texture Mapping

Texture Mapping wird dazu benutzt, um einer Oberfläche ein farbiges Muster, eine sogenannte Textur, zu verleihen. Eine Textur ist definiert als ein gewöhnliches zweidimensionales Bild, das meistens im Bildformat Bitmap abgelegt wird. Dieses Bild wird auch als Texture Map bezeichnet. Die einzelnen Pixel innerhalb dieser Textur werden Texel (kurz für Texture Pixel) genannt. Der Term Texture Mapping bezeichnet das Abbilden einer Textur auf ein Objekt. Dies kann im Wesentlichen auf zwei verschiedene Arten geschehen: Zweidimensional oder dreidimensional [25].

Zweidimensionales Texture Mapping bedeutet, dass die Textur auf eine Art und Weise auf das Objekt aufgebracht wird, die analog zum Bekleben des Objektes mit einem Aufkleber, gemustertem Papier oder ähnlichem ist. Hierbei hat man es mit zwei verschiedenen Koordinatensystemen zu tun: Dem zweidimensionalen Textur- und dem dreiminensionalen Objektkoordinatensystem. Bei der Abbildung der Textur auf das Objekt muss deswegen eine Umrechnung vorgenommen werden. Falls dies durch Projektion geschieht, spricht man von non-parametrischem Texture Mapping. Bei planarer Projektion wird eine der (x,y,z)-Koordinaten des Objekts projeziert und die verbleibenden zwei Koordinaten werden dazu benutzt, die Farbe aus der mit (u,v) parametrisierten Texture Map zu berechnen. Es wären auch andere Formen der Projektion denkbar, wie z.B. zylindrische oder spärische Projektion, bei denen jeweils noch eine Umrechnung in die entsprechenden Koordinaten nötig wäre. Im Gegensatz

7

Page 8: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

dazu steht das parametrische Texture Mapping, bei dem die Textur am Objekt verankert ist und die entsprechenden Farbinformationen mit Hilfe baryzentrischer Koordinaten berechnet werden.

Abb. 4: Texture MappingParametrisches Texture Mapping Non-parametrisches Texture Mapping (hier:

zylindrische Projektion)

Um bei Objekten mit regelmäßigen, sich wiederholenden Mustern, wie z.B. einer Mauer, nicht eine große Texture Map für die gesamte Mauer speichern zu müssen, was potentiell negative Auswirkungen auf den Speicherverbrauch haben könnte, versucht man die Größe der Texture Map möglichst gering zu halten. Nun gibt es verschiedene Modi, die Texture Map an das wesentlich größere Objekt anzupassen: Wrap, Mirror, Clamp und Border [12]. Der Modus Wrap bedeutet lediglich eine Kachelung mit der entsprechenden Textur, wohingegen Mirror die Textur immer an der jeweiligen Kante spiegelt – man erhält also eine viermal größere Textur mit dem Speicherbedarf der kleinen Textur. Clamp ist die Fortführung der Randfarben der kleinen Textur auf dem Objekt und Border ist z.B. ideal, um mittels Texture Mapping ein Etikett auf ein Objekt aufzubringen, da es lediglich die Textur abbildet und die umgebenden Pixel außer acht lässt.

Dreidimensionales Texture Mapping lässt am ehesten mit der Fertigung eines Objektes aus einem Block des gewünschten Materials, z.B. Holz, vergleichen. Hierbei werden im Allgemeinen keine Farbinformationen in Form einer Textur gespeichert, stattdessen wird die Farbe des entsprechenden Pixels anhand der Koordinaten mit Hilfe einer gegebenen Prozedur berechnet. Deswegen werden diese Texturen auch als prozedurale Texturen bezeichnet.

3.2 Bump Mapping

Die Technik des Bump Mapping ist grob gesagt eine Anwendung des Texture Mapping, wurde 1978 von James F. Blinn vorgestellt [3]. Hierbei geht es darum, vor der Berechnung der Beleuchtung die Reaktionseigenschaft der Oberfläche bezüglich des Lichteinfalls zu ändern.Realisiert wird diese Änderung durch die Verwendung einer sogenannten Heightmap, in der die „Störung“ der Normalen, die einer Oberflächenstruktur zu schulden wäre, gespeichert ist. Für den Betrachter erscheinen die Punkte der Oberfläche dadurch leicht in der Höhe versetzt. Diese Heightmap wird als Graustufenbild im Speicher abgelegt, aus dem sich schon ablesen lässt, wie sich die Struktur gestaltet: Die Grauwerte zwischen 0 und 255 geben an, wie stark die Oberflächennormale verändert wird.Genau hier liegt allerdings auch das Problem des Bump Mapping: Da lediglich die Oberflächennormale verändert wird, bleibt die Geometrie unverändert – und damit auch die Silhouette des betreffenden Objektes. Da es sich bei der Anwendung der Heightmap lediglich um eine Skalierung handelt, sind Änderungen nur in einem eingeschränkten Rahmen möglich.

8

Page 9: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

Abb. 5: Bump MappingEine einfache Kugel ohne Bump Mapping

Die Height Map, die auf die Kugel angewendet werden soll

Die Kugel mit angewandter Bump Map

3.3 Normal Mapping

Auch beim Normal Mapping kommt eine Heightmap zum Einsatz, die allerdings als Normal Map bezeichnet wird. Bei dieser Normal Map handelt es sich nicht mehr um ein Graustufen- sondern vielmehr um ein RGB-Bild, wobei jeder Farbkanal eine Koordinate der Normalen repräsentiert.Es existieren zwei verschiedene Varianten des Normal Mapping, deren Unterschied im jeweils verwendeten Koordinatensystem besteht, anhand desen die Normalen berechnet und gespeichert werden; dies kann im objekt- oder im tangentenbezogenen Koordinatensystem geschehen.Eine der interessantesten Anwendungen des Normal Mapping ist die Verwendung der Normal Map eines hoch aufgelösten Modells mit vielen Details in Zusammenhang mit einer deutlich niedriger aufgelösten Version desselben Modells [22]. Diese Technik erlaubt es, ein hohes Maß an Detailreichtum mit wesentlich geringerem Aufwand zu erreichen.Da Normal Mapping im Wesentlichen die gleiche Methodik anwendet wie Bump Mapping besteht auch der Nachteil dieser Technik in der Tatsache, dass lediglich die Reaktionseigenschaft auf Lichteinfall verändert wird und nicht die Geometrie selbst.

Abb. 6: Normal MappingUrsprüngliche, hochaufgelöste Version des Modells

Niedriger aufgelöste Version des Modells

Niedriger aufgelöste Version mit angewandter Normal Map der höher aufgelösten Version

3.4 Displacement Mapping

Displacement Mapping wurde 1984 von Robert L. Cook vorgestellt, der die Technik als „eine Erweiterung von Bump Maps“ bezeichnete [5]. Tatsächlich löst Displacement Mapping das

9

Page 10: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

Problem, das bei Bump Mapping und Normal Mapping auftritt, nämlich die fehlende Übereinstimmung zwischen Oberflächenstruktur und Silhouette.Die Angleichung der Silhouette an die Oberflächenstruktur kann jedoch nur dadurch erfolgen, dass Änderungen an der Geometrie vorgenommen werden. Diesen Ansatz wählt das Displacement Mapping: Anstatt die Oberflächennormalen zu verändern oder zu ersetzen sind es hier die Punkte der Oberfläche, die ersetzt werden, was oftmals entlang der Oberflächennormalen geschieht. Dadurch sind hier auch solche Phänomene wie Verdeckung, Selbstverdeckung, Silhouetten und Selbstschattierung möglich.Bei Displacement Mapping handelt es sich um die in Bezug auf Rechenzeit teuerste Mapping-Technik, da viel zusätzliche Geometrie berechnet werden muss.

Abb. 7: Displacement MappingUrsprüngliches Objekt Displacement Map Objekt mit angewandter

Displacement Map

3.5 Parallax Mapping

Parallax Mapping, auch Virtual Displacement Mapping genannt, wurde erst 2001 vorgestellt [11], und ist damit im Vergleich noch eine sehr junge Technik. Der Name leitet sich aus dem englischen Term „motion parallax“ ab, der die scheinbare Änderung der Position eines Objektes bezeichnet, wenn der Beobachter seine Position verschiebt. Aktuelle Hardware kann die notwendigen Berechnungen sogar in Echtzeit ausführen.Der angesprochene „motion parallax“-Effekt wird dabei durch Texture Mapping einer dynamisch verzerrten Struktur realisiert, die verzerrt wurde um der anzupassenden Form zu entsprechen. Wichtig ist hierbei, dass nicht die ursprüngliche Textur verzerrt wird, stattdessen werden während des Texture Mapping-Prozesses die Texturkoordinaten der Pixel verschoben. Dafür wird zusätzlich zur Texture Map eine Depth Map benötigt, die Informationen zur Tiefe der Struktur enthält.Abb. 8 veranschaulicht den Vorgang: Wenn ein beliebiger Punkt innerhalb eines Dreiecks gerendert werden soll, wird die Tiefeninformation aus der Depth Map gelesen und dazu benutzt, den Vektor, der die Blickrichtung angibt, zu skalieren. So erhält man einen neuen Punkt, dessen Koordinaten dazu verwendet werden, die Farbe aus der Texture Map zu berechnen [16].Texturierte Objekte wie z.B. Steinmauern erhalten so scheinbar mehr Tiefe und wirken somit realistischer (vgl. Abb. 9).

4 Texturfilterung

Um die Motivation für Texturfilterung erklären zu können, muss man sich zunächst klar

10

Abb. 8: Parallax Mapping

Abb. 9: ohne Parallax Mapping (links) und mit Parallax Mapping (rechts)

Page 11: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

machen, was im Texture Mapping-Schritt vor sich gegangen ist: Eine Textur wurde auf ein Objekt abgebildet. Womöglich wurden hierbei weniger Texel benötigt als eigentlich zur Verfügung stehen. Man spricht dann von Undersampling. Falls es sich um eine einfarbige oder zumindest sehr gleichförmige Textur gehandelt haben sollte, sind die Auswirkungen unter Umständen nicht wahrzunehmen, doch wenn eine sehr detail- und kontrastreiche, hochaufgelöste Textur verwendet wurde, so fehlen Farbinformationen aus der Textur, was zu unerwünschten Nebeneffekten oder Artefakten führen kann. Dieses Problem bezeichnet man als Aliasing. (vgl. Abb. 10: Die Vergrößerung zeigt, dass die feinen roten Linien nicht durchgehend erhalten geblieben sind.)Generell gibt es zwei Ansätze, um Aliasing zu verhindern: Supersamling und Prefiltering [25]. Supersamling bedeutet im Wortsinn das Abtasten des Punktes mit höherer Auflösung. So könnten z.B. die vier Eckpunkte des Pixels auf die Textur abgebildet werden, so dass die endgültige Farbe der Mittelwert aus diesen vier Werten ist. Dies muss nicht per se zu besseren Ergebnissen führen, auch wenn stochastische Abtastfunktionen in der Regel gute Ergebnisse liefern.Die Methode des Prefiltering geht etwas anders vor: anstatt der Eckpunkte wird die Fläche des Pixels in die Textur abgebildet. Bei der Berechnung der endgültigen Farbe für das Pixel werden nun die Flächenanteile der einzelnen Texel berücksichtigt, sodass das Ergebnis eine gewichtete Durchschnittsfarbe ist.

4.1 Mipmaps

Eine weit verbreitete Anwendung des Prefiltering sind die sogenannten Mipmaps. Bei Mipmaps handelt es sich um vorberechnete, kleinere Versionen der ursprünglichen Textur, deren Auflösung in x- und y-Richtung immer halb so groß ist wie die der vorhergehenden Mipmapstufe [21]. Aus diesem Grund sollten Texturen möglichst quadratisch sein, mit einer Seitenlänge, die eine Potenz von zwei ist. So entsteht nach und nach eine Texturpyramide. Diese Verkleinerung kann weitergehen, bis eine Größe von 1x1 Pixeln erreicht ist; diese letztmögliche Mipmapstufe enthält dann die Durchschnittsfarbe der gesamten Textur.Zusätzlich erspart diese Vorberechnung von Texturen eine dynamische Skalierung und hilft somit, Zugriffs- und Rechenzeit zu verringern.

Im Folgenden werden einige Verfahren vorgestellt, die – teilweise basierend auf Mipmapping – versuchen, möglichst viele Details einer Textur zu erhalten und gleichzeitig Aliasing entgegenzuwirken.

4.2 Nearest-Neighbor-Interpolation

Diese Interpolationsmethode, auch Point Sampling genannt, stellt die einfachste, aber auch die schlechteste Methode für Texturfilterung dar [13]. Nach der Abbildung des Pixels in die Textur wird überprüft, zu welchem Texel der Abstand des Mittelpunkts des Pixels am geringsten ist. Die unter Umständen nötigen Skalierungen nimmt die Abbildungsfunktion vor. Die Farbe des ausgewählten Texels wird dann als Farbe des Pixels verwendet.Es ist auch möglich, diese Methode der Texturfilterung mit Mipmapping zu verbinden. Dabei wird zuerst die näheste Mipmapstufe gesucht und davon ausgehend dann das entsprechende Texel ausgewählt.Beide Methoden leiden allerdings unter dem einfachen Ansatz, der hier gewählt wird – die

11

Abb. 10: Aliasing als Konsequenz von Under-sampling

Page 12: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

Konsequenzen sind Artefakte, wie sie aus der Bildbearbeitung bekannt sind: Eine gewisse Blockstruktur im Fall einer Vergrößerung, wohingegen diese Methode im Fall einer Verkleinerung schnell zu Aliasing führt, was zur Konsequenz hat, dass Muster innerhalb der Textur auf dem Bildschirm nicht mehr zu erkennen sind. Die Verwendung von Mipmapping verringert das Aliasing zwar recht deutlich, doch die deutlich sichtbaren Blöcke im Fall einer Vergrößerung bleiben.

4.3 Bilineares Filtern

Bilineares Filtern ist gegenüber der Nearest-Neighbor-Interpolation ein deutlicher Fortschritt, was die Qualität des Ergebnisses angeht. Hierbei wird quasi standardmäßig Mipmapping verwendet. Beim bilinearen Filtern wird auf die Mipmapstufe zugegriffen, die von der Größe her der Größe des Objekts am nächsten kommt. Innerhalb dieser Textur wird dann über die vier angrenzenden Texel gemittelt, was im Vergleich zur Nearest-Neighbor-Interpolation eine wesentlich bessere Annäherung darstellt [2].Der Nachteil ist dass das Ergebnis oft verschwommen wirkt. Falls die Oberfläche sich nahe beim Betrachter befindet, so kann dieser die Unschärfe deutlich wahrnehmen, die daher rührt, dass auch bei der niedrigsten Mipmapstufe über die angrenzenden Pixel gemittelt wird. Weiter hinten liegende Objekte verschwimmen noch stärker, da auch hier über die noch kleineren Mipmapstufen gemittelt wird. Zudem entstehen beim Wechsel zwischen den Mipmapstufen deutlich sichtbare, vertikale Linien, die sich immer im gleichen Abstand zum Betrachter befinden, sich also nicht mit der Szene mitbewegen, was sehr unrealistisch wirkt. Dies wird auch als MIP banding bezeichnet.

4.4 Trilineares Filtern

Das Problem des MIP banding beseitigt trilineares Filtern, eine Erweiterung bzw. Verbesserung des bilinearen Filterns. Der wesentliche Unterschied besteht darin, dass bei trilinearem Filtern auch zwischen zwei aufeinanderfolgenden Mipmapstufen interpoliert wird. Innerhalb einer Mipmapstufe wird bilineares Filtern verwendet, für die Interpolation zwischen den Mipmap-stufen werden natürlich die zwei Mipmapstufen gewählt, die der geforderten Detailauflösung am nähesten kommen [2].

12

Abb. 11: Nearest-Neighbor-Interpolation (links) und Nearest-Neighbor-Interpolation mit Mipmapping

Abb. 12: Bilineares FilternDie roten Pfeile zeigen die Stellen an, an denen MIP banding auftritt

Page 13: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

Für den Fall, dass die Größe eines Pixels genau der Größe eines Texels entspricht, ergibt sich durch trilineares Filtern kein Vorteil gegenüber bilinearem Filtern – vielmehr liefert trilineares Filtern hier das gleiche Ergebnis bei höherem Aufwand.Trilineares Filtern unterliegt desweiteren den gleichen Einschränkungen wie bilineares Filtern, dass es nämlich nicht angewendet werden kann, falls die Fläche des Pixels größer als die Fläche eines Texels in der Originaltextur ist. Diese Beschränkung kommt durch die Verwendung von Mipmapping, denn Mipmaps sind nur bis maximal zur Größe der Originaltextur definiert.

4.5 Anisotropes Filtern

Sowohl bilineares als auch trilineares Filtern erwarten, dass die abzutastente Pixelfläche quadratisch ist. Diese Beschränkung führt zu Problemen bei Texturen, die in steilem Winkel zur Kamera stehen. Unter anderem können hierbei Details verloren gehen. Anisotropes Filtern wurde entwickelt, um dieses Problem zu beheben. Anisotropie bezeichnet ganz allgemein die Richtungsabhängigkeit einer Eigenschaft [18]. Im Zusammenhang mit Filterung bedeutet das, dass es sich um ein richtungsabhängiges Abtastmuster handelt – ein Abtastmuster also, das entlang unterschiedlicher Achsen unterschiedliche Werte annimmt.Beim anisotropen Filtern ist das Abtastmuster nicht quadratisch, sondern normalerweise rechteckig, manchmal auch in der Form eines Parallelogramms oder eines Trapezes. Die Güte eines anisotropen Abtastmusters bemisst sich danach, wieviele Pixel in die Berechnung miteinbezogen werden – je stärker die Textur zur Kamera geneigt ist, desto mehr Texel müssen gelesen werden, um den Schärfeeffekt gleichbleibend zu erhalten [2]. Oft wird anisotropes Filtern von den Grafikkarten durch Ripmapping realisiert [17]. Ripmaps funktionieren ähnlich wie Mipmaps, allerdings wird die Auflösung hier nicht in x- und y-Richtung gleich stark reduziert (was wieder isotropes Verhalten wäre), sondern stattdessen in x- und y-Richtung unterschiedlich stark. Aus einer 128x128 großen Textur würden also Texturen der Größen 128x64, 128x32 oder auch 16x128 vorberechnet werden, auf die dann entsprechend zugegriffen werden kann.Besonders gut sind die Ergebnisse bei schräg zur Kamera verlaufenden Flächen, wie z.B. gekachelten Wänden oder Straßen mit Kopfsteinpflaster.

13

Abb. 14: Anisotropes Filtern

Abb. 13: Trilineares Filtern

Page 14: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

5 Zusammenfassung und Ausblick

Erst wenn man bedenkt, dass viele der hier vorgestellten Algorithmen bis vor wenigen Jahren noch innerhalb der Anwendung implementiert wurden, und welche Fortschritte die 3D-Computergrafik gemacht hat, seit Beleuchtung und Texturierung auf der Grafikkarte berechnet werden können, wird man sich der Tatsache bewusst, wie stark die Entwicklung der Computergrafik mit der der Grafikkarten zusammenhängt.Mit das Spannendste an der Computergrafik ist die rasante Entwicklung, die vor allem die 3D-Computergrafik seit ihren frühen Anfängen vollzogen hat. Heute sind Algorithmen und Methoden wie z.B. Phong Shading – wenn auch noch unter gewissen Voraussetzungen – in Echtzeit möglich, was früher niemand zu träumen gewagt hätte. Die Entwicklung der GPUs hat die der CPUs schon weit hinter sich gelassen. Genauso wie man sich in den 1970er Jahren nicht vorstellen konnte, dass eines Tages detailreiche, hochaufgelöste Grafik in Echtzeit möglich sein könnte, so ist für die 3D-Computergrafik heute die letzte Grenze wohl nur noch die Realität. Es gibt noch viele Algorithmen, die Raum zur Optimierung lassen, aber wenn man die Entwicklung der Grafikkarten über die letzten zwanzig bis dreißig Jahre betrachtet, werden es in den nächsten Jahren mit Sicherheit immer weniger werden. Mit neuen, noch schnelleren Grafikkarten wird es immer mehr Möglichkeiten zur Realisierung geben und man darf gespannt sein, was in Zukunft auf uns zukommen wird.

14

Page 15: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

Literatur

[1] Hardware Transform and Lighting. nVidia Technical Brief, November 1999.

[2] Grafik-Filter: Bilinear bis Anisotrop im Detail. Dezember 2001.http://alt.3dcenter.org/artikel/grafikfilter/

[3] Blinn, J. F. Simulation of Wrinkled Surfaces. Computer Graphics 12(3), August 1978, 286-292.

[4] Brown, J., Cunningham, S. A History of ACM SIGGRAPH. Communications of the ACM 50(5), Mai 2007, 54-61.

[5] Cook, R. L. Shade Trees. Computer Graphics 18(3), Juli 1984, 223-231.

[6] Coombe, G., Harris, M. J., Lastra, A. Radiosity on Graphics Hardware. Proceedings of Graphics Interface 2004, Mai 2004.

[7] Cross, J. Antialiasing and Anisotropic Filtering Explained. Mai 2007.http://www.extremetech.com/article2/0,1697,2136956,00.asp

[8] Foley, J., van Dam, A., Feiner, S. und Hughes, J. Computer Graphics: Principles and Practice. 2nd ed. Addison-Wesley, 1995.

[9] Huddy, R. Hardware Transform and Lighting. Beitrag zur Games Developer Convention 2000.

[10] Ivanchev, M., Thörnquist, H. Software Rendering School, Part IV: Shading and Filling. Juni 2004.http://www.devmaster.net/articles/software-rendering/part4.php

[11] Kaneko, T., Takahei, T., Inami, T., Kawakami, N., Yanagida, Y., Maeda, T. und Tachi, S. Detailed Shape Representation with Parallax Mapping. Proceedings of ICAT 2001, 205-208.

[12] Keller, A. Grundlagen der Computergraphik. Vorlesungsskript, 2006.

[13] Meko Ltd. Point Sampling. Eintrag im “Displays Glossary”.http://www.meko.co.uk/pointsamp.shtml

[14] Phong, B. T. Illumination for Computer Generated Pictures. Communications of the ACM 18(6), Juni 1975, 311-317.

[15] Salvator, D. ExtremeTech 3D Pipeline Tutorial. Juni 2001.http://www.extremetech.com/article2/0,1697,9722,00.asp

[16] West, M. Parallax Mapped Bullet Holes. Januar 2007.http://cowboyprogramming.com/2007/01/05/parallax-mapped-bullet-holes/

[17] Wikipedia. Anisotropic Filtering. April 2008.http://en.wikipedia.org/wiki/Anisotropic_filtering

[18] Wikipedia. Anisotropy. Mai 2008.http://en.wikipedia.org/wiki/Anisotropy

15

Page 16: Seminararbeit im Hauptseminar „Grafikprogrammierung“ · Die Methode des Gouraud Shading, 1971 von Henri Gouraud vorgestellt [8], wird oft im Zusammenhang mit dem Term Per-Vertex-Beleuchtung

[19] Wikipedia. Grafikpipeline. Juni 2008.http://de.wikipedia.org/wiki/Grafikpipeline

[20] Wikipedia. Mach-Band-Effekt. Juni 2008.http://de.wikipedia.org/wiki/Mach-Band-Effekt

[21] Wikipedia. Mipmap. Juni 2008.http://en.wikipedia.org/wiki/Mipmap

[22] Wikipedia. Normal Mapping. Mai 2008.http://en.wikipedia.org/wiki/Normal_mapping

[23] Wikipedia. Radiosity (Computergrafik). Juni 2008.http://de.wikipedia.org/wiki/Radiosity_%28Computergrafik%29

[24] Wikipedia. Welle-Teilchen-Dualismus. Juni 2008.http://de.wikipedia.org/wiki/Welle-Teilchen-Dualismus

[25] Wolfe, R. Teaching Texture Mapping Visually. SIGGRAPH 1997 Education Slide Set. http://www.siggraph.org/education/materials/HyperGraph/mapping/r_wolfe/r_wolfe_mapping_1.htm

16