Hauptseminar Displacement-Mapping mit...

23
Hauptseminar Displacement-Mapping mit Geometry-Shadern Seminararbeit SS09 Stefan Michel © Stefan Michel 2009 1

Transcript of Hauptseminar Displacement-Mapping mit...

Page 1: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

Hauptseminar

Displacement-Mapping mit Geometry-Shadern

Seminararbeit

SS09

Stefan Michel

© Stefan Michel 2009 1

Page 2: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

Hiermit erkläre ich, die vorliegende Arbeit selbständig verfasst zu haben, wörtliche und sinngemäße Zitate als solche markiert zu haben und keine weiteren als die angegebenen Quellen verwendet zu haben.

Stefan Michel

© Stefan Michel 2009 2

Page 3: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

AbstractIn dieser Seminararbeit werden Techniken vorgestellt, wie sich ein per-Pixel Displacement-Mapping und per-Vertex Displacement-Mapping realisieren lässt. Dabei wird insbesondere darauf eingegangen, wie die Einführung des Geometry-Shaders diese Möglichkeiten beeinflusst hat. Bei per-Pixel Displacement-Mapping werden die beiden Such-Strategien der linearen Suche und des Cone Step Mappings betrachtet. Bei per-Vertex Displamcement-Mapping wird kurz auf das Thema des Level of Details eingegangen. Außerdem wird eine kurze Gegenüberstellung beider Verfahren sowie ein Ausblick gegeben.

© Stefan Michel 2009 3

Page 4: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

InhaltsverzeichnisAbstract....................................................................................................................31. Einführung............................................................................................................62. Per-Pixel Displacement-Mapping........................................................................7

2.1 Verwendung des Geometrie-Shaders............................................................72.2 Lineare Suche..............................................................................................102.3 Cone Step Mapping.....................................................................................11

3. Per-Vertex Displacement-Mapping ..................................................................143.1 Datenrepräsentation.....................................................................................143.2 Tesselierung.................................................................................................14

3.2.1 Triangular-Edge Subdivision...............................................................153.2.2 Diamond-Square Subdivision..............................................................15

3.3 Anpassung der Höhen und Darstellung.......................................................173.4 Weitere Aspekte..........................................................................................17

3.4.1 Level of Detail.....................................................................................17Bewertung..............................................................................................................19Ausblick.................................................................................................................21

© Stefan Michel 2009 4

Page 5: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

AbbildungsverzeichnisAbbildung 1: Tetraeder bei per-Pixel Displacement-Mapping mit Geometrie-Shadern [Mic05].......................................................................................................8Abbildung 2: Schnittpunkt-Suche bei per-Pixel Displacement-Mapping mit Geometrie-Shadern [Mic05]....................................................................................9Abbildung 3: per-Pixel Displacement mit Geometrie-Shader angewandt auf ein organisches Modell [Mic05]..................................................................................10Abbildung 4: Lineare Suche bei per-Pixel Displacement-Mapping [Kal06].........11Abbildung 5: Lineare Suche mit Treppen-Artefakten [Kal06]..............................11Abbildung 6: Kegel mit maximalem Öffnungswinkel bei Cone Step Mapping. Der Vektor zeigt die Strecke, auf der kein Schnittpunkt zu erwarten ist. [Dum06].....12Abbildung 7: Iterative Bestimmung des Schnittpunktes mit Cone Step Mapping [Kal06]...................................................................................................................13Abbildung 8: Ein mit Cone Step Mapping gerendertes Modell [Kal06]...............13Abbildung 9: Ablauf des per-Vertex Displacement-Mappings..............................14Abbildung 10: Dreiecks-Tesselierung, aus dem Eingangsdreieck v1,v2,v3 entstehen vier neue Dreiecke..................................................................................15Abbildung 11: Diamond-Square-Subdivision........................................................16Abbildung 12: Lücken bei Level of Detail [Mef09]..............................................19Abbildung 13: Organisches Modell mit per-Vertex Displacement-Mapping und mittlerer Tesselierung [Mic05]..............................................................................20Abbildung 14: Organisches Modell mit per-Vertex Displacement-Mapping und hoher Tesselierung [Mic05]...................................................................................21

© Stefan Michel 2009 5

Page 6: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

1. EinführungDisplacement-Mapping beschreibt im allgemeinen eine Technik, mit der einem Modell zusätzliche Details ( mesostructure ) hinzugefügt werden kann. Die Motivation dahinter ist vielfältig: Zum einen erlaubt einem eine Darstellung der Details mittels einer Textur, diese Kompakt abzulegen und so Speicherplatz zu sparen. Außerdem ist es in vielen Anwendungsfällen einfacher, die Details grafisch mittels Höhenkarten zu beschreiben oder zu zeichnen, als diese explizit mit einem Programm zu modellieren. Außerdem erhält man die Möglichkeit, die Performance und Qualität zur Laufzeit zu beeinflussen, was es ermöglicht flexibel auf Anforderungen zu reagieren.

Im laufe der Zeit haben sich hierbei zwei verschiedene Realisierungsarten entwickelt, die sich als per-Vertex Displacement-Mapping, zum anderen als per-Pixel Displacement-Mapping klassifizieren lassen[Kal06]. Im weiteren wird aufgezeigt, wie sich die Einführung des Geometry-Shaders im Shader-Modell 4 auf die Möglichkeit einer Realisierung ausgewirkt haben.

© Stefan Michel 2009 6

Page 7: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

2. Per-Pixel Displacement-MappingBei diesen Verfahren wird der Pixel-Shader Stufe der Rendering-Pipleline dazu verwendet, zusätzliche Details darzustellen, die Vertex-Shader Stufe modifiert das Modell hingegen nicht. Im Pixel-Shader wird mittels unterschiedlicher Techniken die UV-Koordinate so transformiert, das an diesem Pixel nun möglichst der Farb-Wert erscheint, den man bei einer exakt modellierten Geometrie erhalten hätte. Dabei unterscheiden sich die Verfahren hinsichtlich Ausführungszeit und Exaktheit. Ein einfach zu implementierendes und schnelles Verfahren, bei dem der Punkt an dem die Berechnungen durchgeführt werden aber so gut wie nie genau übereinstimmen, ist das parallax mapping[KKI*01]. Deutlich genauere Ergebnisse können mit Hilfe von rechenintensiven Verfahren wie Cone Step Mapping[Dum06] erreicht werden, welches bei genügend großer Wahl der Anzahl an Iterationen dem tatsächlichen Höhenwert sehr nahe kommen kann.

Problematisch bei diesen Verfahren ist jedoch, das der dem Betrachter zugewandte Rand nicht realistisch dargestellt wird, denn der Fragment-Shader wird nur für die Punkte innerhalb der Grundfläche aufgerufen, wodurch man eine direkte Linie hier sieht. Ein weiteres Problem ist, das sich Höhen, die über das die eigentliche Geometrie hinaus reichen, nicht darstellen lassen. Dieses Problem wurde in einer Implementierung von Microsoft[Mic05] adressiert, welches eine Adaption von [WXS*04] ist.

© Stefan Michel 2009 7

Page 8: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

2.1 Verwendung des Geometrie-ShadersBei dem hier vorgestellten Verfahren wird im Geometrie-Shader aus jedem darzustellenden Dreieck mehrere Tetraeder extrudiert. Dabei werden die neuen Vertices erzeugt, indem man die alten Vertices entlang ihrer Normalen verschiebt.

Dabei erhalten die Basis-Vertices als Textur-Koordinate Z 0, die extrudierten Vertices erhalten Z=1. Im Pixel-Shader erhält man nun für alle Flächen auf dem Strahl die ein Dreieck der Tetraeder treffen, einen Punkt. Über die TEXCOORD-Parameter lassen sich die Parameter der Tetraeder die man im Geometrie-Shader erzeugt hat an den Pixel-Shader übergeben.

© Stefan Michel 2009 8

Abbildung 1: Tetraeder bei per-Pixel Displacement-Mapping mit Geometrie-Shadern [Mic05]

Page 9: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

Im Pixel-Shader wird jetzt, ähnlich zu anderen per-Pixel Verfahren, angefangen vom Eintrittspunkt ein Schnittpunkt des View-Vektors mit dem Terrain gesucht. Für den Such-Algorithmus gibt es zahlreiche Möglichkeiten, wie sie auch im klassischen per-Pixel Displacement-Mapping zum Einsatz kommen. In der betrachteten Implementierung wurde hier eine Lineare Suche [Lev90] verwendet, die im nachfolgenden genauer erläutert wird. Eine neuere Alternative dazu stellt das Cone Step Mapping [Dum06] dar, welches ebenfalls anschließend erläutert wird.

Nun gibt es zwei Möglichkeiten: Entweder, es wurde ein Schnittpunkt gefunden, oder es wurde kein Schnittpunkt gefunden.

Für den Fall das ein Schnittpunkt gefunden wurde, kann nun die Textur-Farbe an der gefundenen Position abgegriffen werden. Auch andere Eigenschaften können hier eingeholt werden, wie etwa die Normale an diesem Punkt sofern man eine Normalen-Textur mit übergeben hat. Damit lässt sich nun die Farbe an diesem Punkt berechnen. Die Berechnungen für nachfolgende Pixel der anderen Tetraeder können werden dann mit Hilfe eines eingeschaltetem Z-Buffer-Tests ignoriert werden.

© Stefan Michel 2009 9

Abbildung 2: Schnittpunkt-Suche bei per-Pixel Displacement-Mapping mit Geometrie-Shadern [Mic05]

Page 10: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

Falls hingegen kein Schnittpunkt gefunden wird, dann kann der Pixel-Shader das aktuelle Pixel verwerfen. Falls also der View-Vektor durch mehrere der Tetraeder führt, dann wird später auch für diese nach einem Schnittpunkt gesucht und möglicherweise doch noch ein Farb-Wert gewählt.

© Stefan Michel 2009 10

Abbildung 3: per-Pixel Displacement mit Geometrie-Shader angewandt auf ein organisches Modell [Mic05]

Page 11: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

2.2 Lineare Suche

Bei der Linearen Suche, welche erstmals in [Lev90] beschrieben wurde und inzwischen im Pixel-Shader ausgeführt werden kann, berechnet man sich im Pixel-Shader anhand der Position und dem Augenpunkt den View-Vektor. Die maximale Höhe der Höhenkarte kann in einem Vorverarbeitungsschritt bestimmt werden, oder dafür die maximal mögliche Höhe (entsprechend des Datentyps) angenommen werden. Beginnend bei dem Eintrittspunkt, den man anhand der Position und der maximalen Höhe bestimmen kann, wird nun der Schnittpunkt gesucht. Dabei wird die Höhe in jedem Schritt um den Faktor 1/Schrittweite reduziert. Anschließend wird eine neue UV-Position (u',v') berechnet, wobei hierzu die Tangente und die Binormale im Texture-Space benötigt werden. Anschließend wird auf die Höhenkarte an der neuen Position (u',v') zugegriffen, um die Höhe des Geländes an dieser Position zu erhalten. Liegt diese erhaltene Höhe unter der aktuellen Höhe, so hat man einen Treffer und kann die Suche beenden. Andernfalls wird weiter gesucht. Um ein exaktes Ergebnis zu erzielen, muss die Schrittweite recht gering gewählt werden, was die effektive Laufzeit verringert. Bei zu kleiner Schrittweite können Treppen entstehen, wie folgendes Beispiel zeigt:

© Stefan Michel 2009 11

Abbildung 4: Lineare Suche bei per-Pixel Displacement-Mapping [Kal06]

Abbildung 5: Lineare Suche mit Treppen-Artefakten [Kal06]

Page 12: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

2.3 Cone Step Mapping

Dieses Verfahren, erstmals beschrieben in [Dum06], arbeitet sich nun im Gegensatz zur Linearen Suche nicht in immer gleichen Abständen vor, sondern verwendet Kegel, um sicher auch über größere Distanzen zu springen. Die Idee dabei ist, an jedem Texel einen Kegel mit der Spitze abwärts aufzustellen, und den maximalen Öffnungswinkel zu bestimmen, bei dem dieser Kegel noch keine anderen Höhen schneidet. Dies kann in einem Vorverarbeitungsschritt durchgeführt werden. Der Öffnungswinkel kann dann gemeinsam mit der Höhenkarte in einer Textur gespeichert werden, wobei dieser Öffnungswinkel nur einen der Kanäle in Anspruch nimmt. Da die Position der Kegel und die Richtung bekannt sind, müssen diese nicht gespeichert werden.

Im Pixel-Shader kann nun beim Iterieren sicher davon ausgegangen werden, das sich auf der Strecke, die in der oberen Grafik durch den grünen Pfeil gekennzeichnet ist, sicher nicht der erste Schnittpunkt befindet. Der Schnittpunkt könnte sich höchstens genau an der Pfeil-Spitze befinden, wodurch man den Schnittpunkt dann gefunden hätte.

© Stefan Michel 2009 12

Abbildung 6: Kegel mit maximalem Öffnungswinkel bei Cone Step Mapping. Der Vektor zeigt die Strecke, auf der kein Schnittpunkt zu erwarten ist. [Dum06]

Page 13: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

Der Algorithmus zur Suche des Schnittpunktes arbeitet dann ähnlich zur Linearen Suche. Allerdings wird die Distanz hier immer um die Strecke reduziert, die der Kegel an der aktuellen Stelle zulässt. Dadurch ist zum einen sichergestellt, das man den Zielpunkt nicht übertritt. Zum anderen gelangt man im Mittel schneller

zum Ziel, da große, flache Gebiete schnell übersprungen werden können. Bereits bei einer Rekursionstiefe von 5 ist es möglich, gut wirkende Ergebnisse zu erzielen und dabei Echtzeit-fähig zu bleiben. Da das Verfahren allerdings kurz vor dem Schnittpunkt selbst langsamer wird, gibt es weiterführende Ansätze, die versuchen diesen Nachteil zu beseitigen.

© Stefan Michel 2009 13

Abbildung 7: Iterative Bestimmung des Schnittpunktes mit Cone Step Mapping [Kal06]

Abbildung 8: Ein mit Cone Step Mapping gerendertes Modell [Kal06]

Page 14: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

3. Per-Vertex Displacement-Mapping Bei diesem Verfahren wird die Oberfläche des Modells genügend stark tesseliert, so dass sich die Details der Mesostruktur durch die Vertex-Positionen darstellen lassen, welche auf entsprechende Positionen verschoben werden. Bis vor der Einführung der Shader Version 4.0 war es hierbei nötig, die Tesselierung auf der CPU-Seite vorzunehmen. Diese Vorgehensweise hat jedoch Nachteile. Zum einen ist dies eine hochgradig parallelisierbare Tätigkeit, für die die GPU besser geeignet wäre. Zum anderen muss man eine große Belastung des Datenbusses zur GPU in Kauf nehmen, der in vielen Anwendungsfällen sowieso schon der Flaschenhals der Anwendung sein kann.

Die Einführung des Shader-Modells 4.0 erlaubt nun, das per-Vertex Displacement-Mapping komplett auf der Grafikkarte auszuführen.

Der Prinzipielle Ablauf ist folgender:

Zuerst werden die Eingangsprimitive spezifiziert. Diese werden dann so lange Tesseliert, bis die gewünschte Detail-Stufe erreicht ist. Anschließend kann eine Beleuchtung und Texturierung vorgenommen werden, und das Ergebnis angezeigt werden.

Im einzelnen werden nun die Schritte dieses Verfahrens sowie weitere Aspekte vorgestellt.

3.1 DatenrepräsentationDie Höhe lässt sich in diesem Modell einfach durch einen Wert an einem Punkt beschreiben. Diese Höheninformation kann beispielsweise im Alpha-Kanal der Textur untergebracht werden, wenn dieser nicht für andere Zwecke verwendet wird. Für sich alleine Betrachtet lassen sich diese Höheninformationen als Grauwert-Bild darstellen.

© Stefan Michel 2009 14

Abbildung 9: Ablauf des per-Vertex Displacement-Mappings

Page 15: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

3.2 TesselierungBei der Tesselierung hat man verschiedene Möglichkeiten, die sich in der Art und Anzahl an Primitiven unterscheiden können. Die hier beschriebenen Verfahren sind in der Literatur weit verbreitet und wurden in [Mil86] verglichen. Hier werden zwei Verfahren auf die Umsetzung im Geometry-Shader untersucht.

3.2.1 Triangular-Edge SubdivisionEine Möglichkeit besteht darin, als Primitive Dreiecke zu verwenden. Im Geometrie-Shader erhält man dann als Parameter die drei Vertices des Dreiecks. Aus diesen können dann 4 Dreiecke erzeugt werden, indem zusätzlich die Vertices auf der Hälfte der Linie zwischen den Eingangs-Vertices erzeugt werden.

Bei dieser Realisierung werden Triangle-Strips als Ausgabe generiert. Da sich die vier Dreiecke nicht geschlossen darstellen lassen, benötigt man zwei Triangle-Strips, also z.B. einen für das obere Dreieck und einen für die drei unteren Dreiecke. Der Geometrie-Shader erzeugt nun also 8 Vertices. Wenn man diese Primitive allerdings mittels Transform-Feedback aufzeichnen will, dann werden diese Strips automatisch wieder zerlegt werden wodurch man dann doch wieder 12 Vertices im Vertex-Buffer-Objekt erhält.

3.2.2 Diamond-Square SubdivisionEine weitere Möglichkeit zur Unterteilung bietet das Diamond-Square-Subdivision. Bei dieser Technik werden als Primitive Rechtecke verwendet. Aus diesen werden dann vier neue Rechtecke erzeugt, indem auch hier die

© Stefan Michel 2009 15

Abbildung 10: Dreiecks-Tesselierung, aus dem Eingangsdreieck v1,v2,v3 entstehen vier neue Dreiecke

Page 16: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

Mittelpunkte errechnet werden. Das Verfahren ist etwas robuster in Bezug auf Numerische Ungenauigkeiten, da hier abwechselnd zwei Schritte ausgeführt werden und Vertices wieder verwendet werden können.

Da der Geometrie-Shader jedoch nicht direkt mit Quads umgehen kann, muss hier eine andere Art der Interpretation gewählt werden. Eine mögliche Implementierung, wie sie in [NVI08] aufgeführt wurde, besteht darin, als Eingabe in den Geometrie-Shader Linien mit Nachbarschaftsinformationen zu verwenden. Diese werden dann im Shader als ein Quad interpretiert. Als Ausgabe werden die Eckpunkte der Vierecke direkt als Punkte ausgegeben.

Ein weiterer Vorteil dieses Verfahrens, neben der höheren Robustheit gegenüber numerischen Ungenauigkeiten ist, dass sich bei einer Implementierung mit Vertex-Buffer-Objekten die 16 Ausgabe-Vertices direkt im Ergebnis-Puffer landen, der Speicherverbrauch ist somit also etwas geringer als bei der Triangle-Edge-Subdivision. Nachteilig ist allerdings, das der Rechenaufwand des Geometrie-Shaders stark mit der Anzahl an Ausgabe-Primitiven abnimmt.

Die Ergebnisse eines Tesselierungs-Schrittes können dann in einem Vertex-Buffer-Objekt aufgesammelt werden. Dabei kann man unterschiedliche Attribute spezifizieren, welche aufgezeichnet werden sollen. Nahe liegend sind die Position der Vertexe, aber auch die Normale könnte im Shader berechnet werden und dann aufgezeichnet werden.

An dieser stelle bietet es sich dann auch an, den Render-Pass vorzeitig abzubrechen, denn eine Darstellung der Zwischenergebnisse ist wenig sinnvoll. Nachdem der Pass also beendet ist, kann man die Daten aus dem Vertex-Buffer-

© Stefan Michel 2009 16

Page 17: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

Objekt welches man zum auffangen der Daten verwendet hat, mit einem erneutem ausführen des selben Shaders wieder als Eingabe verwenden und so eine detailliertere Grund-Geometrie erhalten. Hierbei ist darauf zu achten, dass man zwei alternierende Puffer verwendet, um zu verhindern das die Daten die man gerade als Quelle verwendet inkonsistent werden, wenn Quelle und Ziel identisch sind.

3.3 Anpassung der Höhen und DarstellungDie Vertices können auf die entsprechenden Höhen verschoben werden, nachdem die Rekursion abgeschlossen ist. Eine lineare Interpolation kann erzielt werden, indem mit den Textur-Filter Methoden auf die Höhenkarte zugegriffen wird.

Nach diesen Schritten kann wie üblich die Beleuchtung und Texturierung vorgenommen werden. Der Normalenvektor für die Berechnung von diffusen und spekularen Anteilen kann auch im Geometry-Shader berechnet werden.

© Stefan Michel 2009 17

Page 18: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

3.4 Weitere AspekteDa per-Vertex basiertes Displacement-Mapping zu den Blickwinkel-Unabhängigen Verfahren gehört, ist es hier angebracht, die Erzeugung der Geometrie zu reduzieren. Einer der Schwachpunkte des per-Vertex Displacement-Mapping ist, das die Geometrie meist gleichmäßig Unterteilt wird. Dadurch werden auch Vertexe hinzugefügt, die keine weiteren Details hinzufügen da die Höhen dieser Stelle konstant sind. Allerdings ist es nicht ohne weiteres möglich, solche Fälle im Voraus zu erkennen, da man dafür große Teile der Textur untersuchen müsste um zu entscheiden das hier keine weitere Tesselierung notwendig ist. Ein ähnliches Problem ist, dass ein sehr hoher Grad an Tesselierung notwendig ist, um sehr kleine Details hinzuzufügen.

3.4.1 Level of DetailDa vor der Tesselierung noch nicht bekannt ist, wie viel Platz die Fläche auf dem Bildschirm einnehmen wird, kann diese Größe nicht direkt als Faktor benutzt werden. Andere Faktoren, die man zur Berechnung einer LOD-Stufe heranziehen kann, sind der Abstand vom Betrachter sowie die Fläche des Dreiecks [Mef09].

Ein Problem das sich bei unterschiedlichen Level of Detail Stufen ergeben kann, ist das Lücken entstehen können. Diese können an der Grenze der LOD-Stufen entstehen, wenn einer der zusätzliche Punkte des feiner aufgelösten Bereichs nicht auf der selben Höhe liegt wie die Direkte Verbindung der zwei benachbarten Punkte.

© Stefan Michel 2009 18

Page 19: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

Eine Möglichkeit, dies zu beheben, ist das zusätzliche einfügen von Polygonen um diese Löcher exakt zu schließen. Allerdings ist es nicht trivial zu entscheiden wann und an welchen Stellen dies nötig ist. Da die Nachbarschaftsinformationen im Geometry-Shader sich auf die Position im aktuellen zu zeichnenden Array und nicht auf eine Geografische Nähe beziehen, helfen eine diese hier nicht weiter um die benötigten Vertex-Positionen zu bestimmen.

Ein Ansatz unter Verwendung von Geometry-Shadern, der in [Mef09] beschrieben wurde, fügt s.g. Schürzen an diesen Stellen an. Dabei handelt es sich um mehrere Dreiecke, die eine Fläche bilden die in entgegengesetzter Richtung des Geländes liegt. Um ein Gelände ohne Lücken darzustellen könnten diese Schürzen an alle Dreiecke angehängt werden, was natürlich zu starken Leistungseinbrüchen führen würde. Die Gesamtzahl an Schürzen kann jedoch reduziert werden. Bei der Bestimmung der LOD-Stufe kann überprüft werden, ob das Dreieck sehr knapp noch eine höhere/tiefere LOD-Stufe benötigt. Falls dies der Fall ist müssten in der Nähe Dreiecke existieren die eine andere LOD-Stufe besitzen. Falls dies der Fall ist, werden Schürzen in der vorletzten Rekursionsstufe angebracht.

© Stefan Michel 2009 19

Abbildung 12: Lücken bei Level of Detail [Mef09]

Page 20: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

BewertungSowohl für per-Pixel baisertes Displacement-Mapping als auch per-Vertex basiertes Displacement-Mapping wird es auch in Zukunft Anwendungsgebiete geben. Für organische Modelle, bei denen die Grund-Geometrie bereits aus sehr vielen Primitiven besteht, ist es im Allgemeinen sinnvoller, per-Pixel Displacement-Mapping zu implementieren. Wenn ein Dreieck des Modelles bereits nur noch wenige Pixel auf dem Bildschirm in Anspruch nimmt, dann können für diese im Pixel-Shader auch effizient letzte Details hinzugefügt werden. Eine hohe Tesselierung nur um die Farbe von ein paar Vertices zu bestimmen führt zu starken Leistungseinbrüchen. Außerdem müssen sehr viele Vertices generiert werden, falls man Details wie etwa Augen gut darstellen will, wie das folgende Beispiel zeigt:

© Stefan Michel 2009 20

Abbildung 13: Organisches Modell mit per-Vertex Displacement-Mapping und mittlerer Tesselierung [Mic05]

Page 21: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

Zur Darstellung von Landschaften lässt sich per-Pixel Displacement-Mapping hingegen kaum verwenden, denn auch wenn man mit dem vorgestellten Verfahren geringe Höhen gut darstellen kann, so funktioniert das Verfahren nur so lange wie der Betrachter sich außerhalb der erzeugten Tetraeder befindet.

© Stefan Michel 2009 21

Abbildung 14: Organisches Modell mit per-Vertex Displacement-Mapping und hoher Tesselierung [Mic05]

Page 22: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

AusblickDie Einführung des Geometry-Shaders hat bei per-Pixel Displacement-Mapping Verfahren recht schnell zu einer Verbesserung der Qualität führen können, indem einer der Nachteile aufgehoben werden konnte. In Zukunft dürfte man wohl noch weitere Interessante Ansätze in diese Richtung erwarten dürfen. Bei per-Vertex Displacement-Mapping hingegen ist es zwar jetzt möglich, einen großen Teil der Arbeit auf die GPU zu verladen. Allerdings muss man dort mit vielen Einschränkungen leben die manche effiziente CPU-seitige Techniken voraussetzen würden. Während Viewfrustum-Culling sich vermutlich noch einfach implementieren lassen wird, hat man bei Occlusion-Culling das Problem, das der Geometry-Shader lokal arbeitet und Informationen über andere Dreiecke der Szene nicht abgefragt werden können. Gespannt sein kann man, ob die Einführung des Shader Modell 5.0 neue Ansätze in das Gebiet des Displacement-Mappings bringen wird.

© Stefan Michel 2009 22

Page 23: Hauptseminar Displacement-Mapping mit Geometry-Shadernw3-o.cs.hm.edu/~nischwit/Hauptseminar/2009/Seminararbeit_michel… · Displacement-Mapping beschreibt im allgemeinen eine Technik,

LiteraturverzeichnisKal06: László Szirmay-Kalos, Tamás Umenhoffer, Displacement Mapping on the GPU —State of the Art , Computer Graphics Forum, Volume 27, Number 6 ,Seite: 1567-1592,2006KKI*01: Kaneko T., Kakahei T., Inami M.,Kawakami N., Yanagida Y., Maeda T., Tachi S., Detailed shape representation with parallax mapping , In Proceedings of ICAT 2001 ,Seite: 205–208,2001Dum06: Dummer J., Cone Step Mapping: An IterativeRay-Heightfield Intersection Algorithm, 2006, http://www.lonesock.net/files/ConeStepMapping.pdfMic05: Microsoft, DisplacementMapping10 Sample, 2005WXS*04: Wang, Xi, Xin Tong, Stephen Lin, Shimin Hu, Baining Guo, and Heung-Yeung Shum., Generalized Displacement Maps , In Eurographics Symposium on Rendering 2004 ,Seite: 227-234,2004Lev90: Levoy M., Efficient ray tracing of volume data , ACM Transactions on Graphics 9 ,Seite: 245–261,1990Mil86: Gavin S. P. Miller, The Definition and Rendering of Terrain Maps, Proceedings of the 13th annual conference on Computer graphics and interactive techniques ,ISBN: 0-89791-196-2,1986NVI08: NVIDIA, OpenGL SDK 10, Transform Feedback Fractal, 2008Mef09: Meffert W., Echte Displacement MappingVerfahren mit Hilfe des GeometryShaders, Diplomarbeit an der Universität Koblenz-Landau , http://kola.opus.hbz-nrw.de/volltexte/2009/357/pdf/da_meffert.pdf , 2009

© Stefan Michel 2009 23