Displacement Mapping
Total Page:16
File Type:pdf, Size:1020Kb
Displacement Mapping Studienarbeit Vorgelegt von Ruth-Maria Recker Institut fur¨ Computervisualistik Arbeitsgruppe Computergraphik Betreuer: Dipl.-Inform. Thorsten Grosch Prufer:¨ Prof. Dr.-Ing. Stefan Muller¨ Januar 2006 Inhaltsverzeichnis 1 Einleitung 5 2 GPU Programmierung 6 2.1 Entwicklung der GPU ............................. 6 2.2 Fixed-Function-Pipeline ............................ 6 2.3 Programmierbare Graphik-Pipeline ..................... 8 2.4 Vertex-Prozessor ................................. 9 2.5 Fragment-Prozessor ............................... 10 2.6 Cg ......................................... 11 3 Bump Mapping 13 3.1 Blinn-Bump Mapping ............................. 13 3.2 Normal Mapping ................................ 15 3.2.1 Normal-Maps .............................. 15 3.3 Berechnung des Texture Space ......................... 16 3.4 Beleuchtung ................................... 18 3.5 Anwendung von Bump Mapping ....................... 18 4 Parallax Mapping 20 4.1 Idee von Parallax Mapping .......................... 20 4.2 Parallax Mapping mit Offset Limiting .................... 22 4.3 Anwendung von Parallax Mapping ..................... 23 5 Displacement Mapping 25 5.1 Idee von Displacement Mapping ....................... 25 5.2 View-dependent Displacement Mapping .................. 26 5.3 Per-Pixel Displacement Mapping ....................... 28 5.4 Erstellung einer Distance-Map ........................ 31 5.5 Rendern des Bildes mit Per-Pixel Displacement Mapping ......... 34 5.5.1 Der Vertex-Shader ........................... 34 5.5.2 Der Fragment-Shader ......................... 34 5.5.3 Selbstverschattung ........................... 35 5.5.4 Filterung ................................. 37 5.6 Anwendung von Per-Pixel Displacement Mapping ............. 39 i 6 Die Beispielszene 41 6.1 Modellierung der Szene ............................ 41 6.2 VRML ....................................... 42 7 Ergebnisse 44 8 Fazit und Ausblick 51 ii Abbildungsverzeichnis 2.1 Fixed-Function-Pipeline [6] .......................... 7 2.2 Programmierbare Graphik-Pipeline [6] .................... 8 2.3 Vertex-Prozessor [10] .............................. 9 2.4 Fragment-Prozessor [10] ............................ 10 2.5 Einfaches Vertex-Programm .......................... 12 2.6 Einfaches Fragment-Programm ........................ 12 3.1 Idee des Bump Mapping [1] .......................... 14 3.2 Konvertierung eines Height-Fields in eine Normal-Map .......... 16 3.3 Ergebnis des Bump Mappings ......................... 19 4.1 Parallax Mapping [15] ............................. 20 4.2 Berechnung des Offset-Vektors [15] ...................... 21 4.3 Berechnung des Offsets-Vektors mit Offset Limiting [15] ......... 22 4.4 Ergebnis des Parallax Mappings ....................... 24 5.1 Idee von Displacement Mapping [3] ..................... 25 5.2 Displacements mit View-dependent Displacement Mapping [14] ..... 27 5.3 Krummung¨ der Oberflache¨ [14] ........................ 27 5.4 Undersampling [5] ............................... 29 5.5 Oversampling [5] ................................ 29 5.6 Sphere Tracing [4] ................................ 30 5.7 Erstellung einer 2D-Distance-Map [4] .................... 31 5.8 Selbstverschattung [14] ............................. 36 5.9 Ohne Filterung ................................. 38 5.10 Mipmapping und Anisotrope Filterung ................... 38 5.11 Ergebnis des Displacement Mappings: Steine ................ 40 5.12 Ergebnis des Displacement Mappings: Text ................. 40 6.1 Modellierte Beispielszene ........................... 41 7.1 Gerenderte Beispielszene ............................ 44 7.2 Vergleich der verschiedenen Verfahren .................... 45 7.3 Ergebnisse des Displacement Mappings im Detail ............. 47 7.4 Gullideckel .................................... 48 iii 1 Einleitung In immer mehr Bereichen kommen heutzutage dreidimensionale computergenerierte Szenen zum Einsatz. Dies ist insbesondere in der Film- sowie der Computerspieleindu- strie zu beobachten. Aber auch weitere Einsatzgebiete wie beispielsweise Virtual Rea- lity sind moglich.¨ Bei der Generierung der 3D-Szenen liegt das Hauptaugenmerk auf einer moglichst¨ realitatsgetreuen¨ Darstellung der Szene. Neben der korrekten Simu- lation des Lichtes tragen auch die verwendeten Materialien einen wichtigen Teil zur Darstellungsqualitat¨ der Szene bei. Ein wichtiger Aspekt bei den Materialien ist die Simulation der Oberflachenstruk-¨ tur. In der Realitat¨ existieren so gut wie keine vollkommen glatten Oberflachen.¨ Selbst Metall- und Plastikmaterialien besitzen feine, auf den ersten Blick kaum sichtbare Struk- turen, welche jedoch einen wichtigen Teil zum Erscheinungsbild des Objektes beitra- gen. Fehlen diese Strukturen, so verliert das Objekt einen Teil seiner Realitatsn¨ ahe,¨ da das Licht nun anders von der Oberflache¨ reflektiert wird und dem Objekt so ein ande- res Aussehen verleiht. Da es zu aufwendig ist, sehr feine Strukturen auszumodellieren, werden haufig¨ Verfahren zur Simulation dieser Strukturen eingesetzt. Doch auch bei verhaltnism¨ aßig¨ groben Strukturen der Oberflache¨ ist eine Ausmo- dellierung der einzelnen Strukturen oft zu aufwendig. Durch den Einsatz geeigneter Verfahren, wie beispielsweise Bump Mapping oder Displacement Mapping, laßt¨ sich der Aufwand zur Generierung der Szene reduzieren. Daruberhinaus¨ ermoglichen¨ viele der eingesetzten Verfahren eine Simulation der Oberflachenstruktur¨ ohne die Generie- rung neuer Dreiecke. Die Reduzierung der Renderzeit sowie des Speicherverbrauchs wird als enormer Vorteil dieser Verfahren angesehen. So werden zum Beispiel in Com- puterspielen Szenen mit Hilfe dieser Verfahren mit detailreichen Oberflachen¨ versehen und lassen sich dennoch in Echtzeit darstellen. In dieser Studienarbeit werden verschiedene Verfahren zur Verbesserung der Ober- flachenstruktur¨ vorgestellt, die zur Implementierung auf moderner Graphik-Hardware geeignet sind. Dabei liegt der Schwerpunkt auf dem Displacement Mapping. Nach einer kurzen Einfuhrung¨ in die GPU Programmierung sowie in die hier ver- wendete Sprache Cg wird das Bump Mapping vorgestellt. Im Anschluß daran wird ein weiteres Verfahren zur Verbesserung der Oberflachenstruktur,¨ das Parallax Map- ping, erlautert.¨ Das nachste¨ Kapitel beschaftigt¨ sich mit Displacement Mapping sowie dessen Einsatzmoglichkeiten.¨ Zum Vergleich der einzelnen Verfahren dient eine Bei- spielszene, deren Erstellung im nachsten¨ Kapitel vorgestellt wird. Daruberhinaus¨ wird hier auch der Import der Szene in die eigene Anwendung erlautert.¨ Die Ergebnisse des Vergleichs hinsichtlich Speicherverbrauch, Renderzeit und Darstellungsqualitat¨ wer- den zum Schluß vorgestellt. 5 2 GPU Programmierung 2.1 Entwicklung der GPU Wahrend¨ fruher¨ die CPU noch alleine fur¨ die Berechnung der gesamten Darstellung zustandig¨ war, gewann die Graphik-Hardware in den letzten Jahren zunehmend an Be- deutung. Die moderne Graphik-Hardware ist mittlerweile in ihrer Leistungsfahigkeit¨ soweit entwickelt, dass sie die meisten Berechnungen zur Darstellung einer komplexen 3D-Szene ubernehmen¨ kann. Vor der Entwicklung der ersten GPUs 1 ermoglichte¨ nur eine spezielle Graphik- Hardware von Firmen wie Silicon Graphics (SGI) oder Evans & Sutherland Konzepte wie Vertex-Transformationen oder Texture Mapping. Diese Hardware war allerdings durch ihren hohen Preis fur¨ den Massenmarkt nicht erschwinglich und wurde aus- schließlich in speziellen Workstations eingesetzt. Dies anderte¨ sich erst Mitte der 90iger Jahre mit der Entwicklung der ersten 3D-Chips fur¨ PCs. Unterstutzt¨ durch eine starke Entwicklung der Computerspieleindustrie ka- men in immer kurzeren¨ Abstanden¨ neue 3D-Chips auf den Markt. Seit 2001 gibt es auch die ersten programmierbaren Graphikchips, zum Beispiel von ATI und NVIDIA. Diese Graphikchips ermoglichten¨ erstmals die Programmierung des Vertex-Prozessors. Mit spater¨ entwickelten Graphikchips kam auch die Moglichkeit¨ der Programmierung des Fragment Prozessors hinzu. 2.2 Fixed-Function-Pipeline Im Computer entworfene 3D-Modelle mussen¨ gerendert werden, damit sie auf dem Bildschirm in 2D dargestellt werden konnen.¨ Wahrend¨ des Rendering-Vorgangs durch- laufen die Objekte eine sogenannte Rendering-Pipeline, welche die zur Umrechnung notigen¨ Schritte durchfuhrt.¨ Ursprunglich¨ war die Funktionalitat¨ der einzelnen Stufen dieser Rendering-Pipeline genau festgelegt, deshalb spricht man hier von einer Fixed- Function-Pipeline. In der Abbildung 2.1 konnen¨ die verschiedenen Schritte der Pipeline nachvollzogen werden. 1Graphics Processing Unit 6 2.2 Fixed-Function-Pipeline 3D Application or Game 3D API: OpenGL or Direct3D CPU - GPU Boundary Fragment GPU Vertex Primitive Raster Frame Rasterization Texturing & Front End Transformation Assembly Operations Buffer Coloring Abbildung 2.1: Fixed-Function-Pipeline [6] Die Eingabedaten, welche ublicherweise¨ aus einer 3D-Anwendung oder einem 3D- Computerspiel stammen, werden zur Steuerung der 3D-API 2 verwendet. Man unter- scheidet heute im Allgemeinen bei den 3D-APIs zwischen Direct3D und OpenGL. Bei Direct3D handelt es sich um einen Bestandteil von DirectX, entwickelt und betreut von Microsoft. Der Standard OpenGL entstand aus dem IRIS GL, entwickelt von Silicon Graphics (SGI). Heute wird die OpenGL-Spezifikation vom OpenGL Architecture Re- view Board (ARB) betreut. Wahrend¨ OpenGL plattformunabhangig¨ ist, lauft¨ Direct3D lediglich auf Windows Plattformen. Mit Hilfe der Methoden einer 3D-API konnen¨ 3D- Objekte gerendert