19

CG (Subject) / Geometry und Tasselation Shader (Lesson)

-

This lesson was created by Missunderstand.

Learn lesson

This lesson is not released for learning.

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