19
CG (Subject) / Geometry und Tasselation Shader (Lesson)
Advertisement
- Was ist optional, was ist programmierbar, was sind die Aufgaben: Tesselation optional - Tesselation Control Shader programmierbar - Tesselator fest - Tesselation Evaluation Shader programmierbar - Geometry Shader optional
- Was macht Geometry Shader Geometry Shader bekommt Geometrie, verändert sie oder erstellt andere Geometrie
- Ein- und Ausgaben der Shader Alle Variablen, die als “out”-Variablen deklariert sind, sind in dem folgenden Shader als “in”-Variablen verfügbar - uniform Variablen sind überall (unveränderlich) verfügbar
- Ein- und Ausgaben Vertex Shader: Eingabe: - rohe, untransformierte Attribute - Vertices, Normalen, Texturkoordinaten etc. - Transformationsmatrizen Ausgabe: transformierte Attribute Build-In Variablen: gl_Position
- Ein- und Ausgaben Tesselation Control Shader Eingabe:- Position des Eingabevertices (gl_in[X].gl_Position) - Ausgabe:- Array mit transformierten Attributen des Primitivs - Faktor der Tesselierung für glTessLevelInner und glTessLevelOuter Build-In Variablen: - gl_in, glTessLevelInner, glTessLevelOuter
- Ein- und Ausgaben Tess. Evaluation Shader Eingabe:- Array aus transformierten Attributen des Primitivs - baryzentrische Koordinaten (gl_TessCoord.xyz) desaktuellen Punktes - Ausgabe: - Tesselierter Vertex im bestimmten Ausgabeprimitiv Build-In Variablen:gl_TessCoord
- Ein- und Ausgaben Geometry Shader Eingabe:- Primitivtyp der Eingabe - Array mit Positionen, Normalen, etc. der Vertices des Eingabeprimitivs Ausgabe: - Primitivtyp der Ausgabe - beliebige Anzahl an Punkten mit Vertex, Normale, etc.
- Minimale Shader: Vertex Shader layout(location = 0) in vec3 positionAttribute; void main(){ gl_Position = vec4(positionAttribute,1); }
- Minimale Shader: Tesselation Control Shader layout(vertices = 3) out;out vec4 tcPosition[]; void main() {tcPosition[gl_InvocationID] = gl_in[gl_InvocationID].gl_Position; if (gl_InvocationID == 0) { gl_TessLevelInner[0] = 16.0; gl_TessLevelOuter[0] = 16.0; gl_TessLevelOuter[1] = 16.0; gl_TessLevelOuter[2] = 16.0;} }
- Minimale Shader: Tesselation Evaluation Shader layout(triangles, equal_spacing, ccw) in;in vec4 tcPosition[];out vec4 tePosition; void main() { vec4 p0 = gl_TessCoord.x * tcPosition[0]; vec4 p1 = gl_TessCoord.y * tcPosition[1]; vec4 p2 = gl_TessCoord.z * tcPosition[2]; tePosition = (p0 + p1 + p2)/3.0; gl_Position = tePosition; }
- Advertisement
- Minimale Shader: Geometry Shader layout(triangles) in; layout(triangle_strip, max_vertices=3) out; void main(){ for(int i=0; i<3; i++){ gl_Position = gl_in[i].gl_Position; EmitVertex(); } EndPrimitive(); }
- Minimale Shader: Fragment Shader - Oft zusätzlich: - FBOs für Post Processing oder Screen-Space Effekte - Beleuchtung mit Lichtquellen, Texturen, etc. out vec4 fragColor; void main(){ fragColor = vec4(0.0, 1.0, 0.0, 1.0); }
- Was ist Transform Feedback - Mehrfaches Rendern von Geometrie - Geometrie wird in jedem Durchlauf von Tesselation und Geometry Shader verändert - Speicherung der veränderten Geometrie in zweitem VBO - Ping Pong Prinzip
- Transform Feedback - Wofür kann man es verwenden? - Berechnung vieler Primitive aus wenigen Eingabeprimitiven - Berechnung von mathematischen Funktionen (Bsp: Koch Kurve) - Iteratives Berechnen von Objektmodellen (Bsp: Bäume)
- Beispiele zu Tesselation und Geometry Shader - Darstellung von Normalen - Eingabe ist das Primitiv (Bsp: Dreieck) - Ausgabe durch den Geometry Shader sind Linien - Je Eckpunkt wird eine Normale berechnet - Ausgabe also 3 Linien (je zwei Punkte) - 3 mal “endPrimitive();”, je 2 mal “emitVertex();”
- Beispiele zu Tesselation und Geometry Shader - Vervielfältigung von Geometrie - Eingabe ist ein Primitiv - Ausgabe durch den Geometry Shader sind viele Primitive an unterschiedlichen Positionen, eventuell mit anderen Attributen
- Beispiele zu Tesselation und Geometry Shader - Transform Feedback - Eingabe sind Primitive (Bsp.: Punkte oder Dreiecke) - Ausgabe sind mehr Primitive oder veränderte Positionen - Partikelsysteme - Meshanimation
- Beispiele zu Tesselation und Geometry Shader - Verfeinerung von Geometrie - Eingabe ist ein Primitiv - Ausgabe sind viele Primitive durch Tesselation - Bsp: Displacement Mapping - Bsp: Heightmap und Terrainerzeugung - Bsp: Feinere Geometrie (PN-Triangles Algorithmus)
- Beispiele zu Tesselation und Geometry Shader - Level of Detail - Nahe Objekte hochaufgelöst berechnen - Ferne Objekte normal aufgelöst lassen - Durch Tesselation Control Shader Auflösung entscheiden