Geometry shaders! och Tesselation shaders!

Relevanta dokument
Geometry shaders! och Tesselation shaders!

Shaders. Renderingssystem. Renderingssystem. Renderingssystem. Hårdvara för 3D-rendering. Hårdvara för 3D-rendering

Grafiska pipelinens funktion

Procedurell Terräng med LOD i OpenGL 4

Procedurell renderingsmotor i Javascript och HTML5

Information Coding / Computer Graphics, ISY, LiTH. Compute shaders!! Framtiden för GPU computing eller sen efterapning av Direct Compute?

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Grafiska pipelinen. Edvin Fischer

Teknik för avancerade datorspel!

Kurvor och ytor. Gustav Taxén

Shaders. Gustav Taxén

Teknik för avancerade datorspel!

A comparison study between OpenGL 4.3, OpenGL ES 3.0 and WebGL 1.0 With focus on rendering pipeline and texture handling

PROCEDUELL TERRÄNG. Proceduella metoder för bilder (TNM084) Jimmy Liikala Institutionen för teknik och naturvetenskap

Information Coding / Computer Graphics, ISY, LiTH. Bump mapping!

Procedurell 3D-eld på grafikkortet

Spelutveckling - Scenegrafer. Scenegrafer Optimeringar Culling

Laboration - Shaders

Designing a Shading System. David Larsson

Spelutveckling 3d-grafik och modellering. Grunder för 3d-grafik Blender Animering

Vector Displacement Mapping

OpenGL AGI HT05. Gustav Taxén

Repetition + lite av varje. Ulf Assarsson Department of Computer Engineering Chalmers University of Technology

Kv. Ogräset. Martin Stenmarck,

EXAMENSARBETE. Tesselering och Displacement. Ökad realism inom realtidsgrafik. Jonas Malm Teknologie kandidatexamen Datorgrafik

TANA17 Matematiska beräkningar med Matlab

2D1339 Programkonstruktion för F1, ht 2003

Rastrering och displayalgoritmer. Gustav Taxén

Tentamen TNM061, 3D-grafik och animering för MT2. Tisdag 3/ kl 8-12 TP51, TP52, TP54, TP56, TP41, TP43. Inga hjälpmedel

Datastrukturer och Algoritmer D0041D

Extramaterial till Matematik Y

Avalanche Studios. OpenGL. Vår teknik. Våra spel. Lite inspiration... Stora, öppna spelvärldar. Sandbox-gameplay. Hög audiovisuell standard

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel

Mälardalens högskola Västerås, Maj 2006 Institutionen för Datavetenskap och Elektronik, IDE Student: Alexander Andersson E-post:

Tron Style OpenGL ES 2.0 Shaders för ios Möjligheten att implementera ett Bloomfilter på ett ios-device

Procedurella Grottor TNM084. Sammanfattning. Alexander Steen

Information Coding / Computer Graphics, ISY, LiTH. Minnesaccess. Vitalt för prestanda! Minnestyper. Coalescing

Utmattningsdimensionering med FEM Lokala metoder

Explorativ övning 11 GEOMETRI

Bézierkurvor och parametriska objektrepresentationer

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Approximerande Splines. B-splines. Minsta kvadrat anpassning. Design av kurvor och ytor.

Föreläsning 10. Grafer, Dijkstra och Prim

Innehållsförteckning

Föreläsning 10. Grafer, Dijkstra och Prim

RTG-formatet Gustav Taxén,

Texturmappningsalgoritmer

I rastergrafikens barndom...gjorde man grafik genom att skriva i ett videominne. Operationer på buffert och pixlar. Idag... Varför grafikkort?

Teknik bakom tredimensionella datorgrafiken Direct3D

Programmeringsuppgift Game of Life

LAB 3. INTERPOLATION. 1 Inledning. 2 Interpolation med polynom. 3 Splineinterpolation. 1.1 Innehåll. 3.1 Problembeskrivning

LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer

Information Coding / Computer Graphics, ISY, LiTH

Varför behövs det? I Allegro finns t.ex. stöd för:

TANA09 Föreläsning 8. Kubiska splines. B-Splines. Approximerande Splines. B-splines. Minsta kvadrat anpassning. Design av kurvor och ytor.

Tentamen i Grundläggande Programvaruutveckling, TDA548

Autodesk 3ds Max Design Som nämnts tidigare kan du ändra storlek i tre olika steg genom att klicka på den lilla svarta pilen.

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Information Coding / Computer Graphics, ISY, LiTH CUDA. En lösning för generella beräkningar. En introduktion: Programmingsmodell och språk

VRay för SketchUp Camilla Ravenna / André Ravenna Alto Punto 2014 Alto Punto Askims Stationsväg Askim

Extramaterial till Matematik Y

För att komma igång. Ta skissen från designlabben eller motsvarande och lägg in den i front/side/top fönstret/fönstrena.

Kurvlängd och geometri på en sfärisk yta

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

Realtidsalgoritmer för ljusets spridning och absorption mot partiklar i luften P E T E R L Ö N N Q U I S T

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Rekursion och induktion för algoritmkonstruktion

Omdirigering. Omdirigering

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Kort introduktion till POV-Ray, del 3

Tentamen FYTA11 Javaprogrammering

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

Tor Sterner-Johansson Thomas Johansson Daniel Henriksson

Föreläsning 9: NP-fullständighet

Föreläsning 10. Grafer, Dijkstra och Prim

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Bra ekonomi för T4. Frågeställning. Svar

PM 2012:14. En metodbeskrivning för beräkning av avrinningsområden utifrån Nya nationella höjdmodellen i ArcMap

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Föreläsning 6: Introduktion av listor

JAVASCRIPT-POWERED LOADRUNNER CHRISTIAN GERDES PERFORMANCE ENGINEER LIGHTS IN LINE AB

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Skinning. Ännu fler koordinatsystem att hålla reda på. SUPPLEMENT 2 till "So How Can We Make Them Scream?" 1. Olika metoder för kroppsanimation

Tentamen , Introduktion till Java, dtaa98, dtea53

Fingerprint Matching

Pipelining i Intel Pentium II

Omtentamen. TNM077 3D-datorgrafik och animering kl 8-12 Inga hjälpmedel. (samt även TNM008 3D-datorgrafik och VR)

int iarray[]= new int[3]; // deklarera ett heltalsfält med tre heltal int jarray[]={ 1, 3, 5, 7, 9, 11, 13, 15}; // initierat fält 8 element

Laboration 3 GUI-programmering

Den tekniska utvecklingen av hårdvara och mjukvara för realtidsgrafik

Processor pipelining genom historien (Intel i9-intel i7)

Koordinatsystem och Navigation

C-Uppsats i Datavetenskap. Skinning på GPUn. Med dubbel kvaternioner. Författare: Björn Overå Handledare: Martin Blomberg Termin: VT12 Kurskod: 2DV40E

Innehållsförteckning

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm?

DGI/SUDOA Den historiska utvecklingen. Globala - lokala belysningsmodeller. Lokala belysningsmodeller. Rendering equation

Transkript:

6(87) Geometry shaders och Tesselation shaders Ytterligare shadersteg i geometristeget i OpenGLpipelinen Kan modifiera, lägga till och ta bort geometri Kan mata ut andra sorters geometri än vad som matas in 6(87)

Geometry shaders 7(87)7(87)

Geometry shaders OpenGL 3 (extension i GL 2) Shader mellan vertex och fragment, bearbetar geometri, kan lägga till ny geometri Blygsamma hårdvarukrav: G80 eller bättre (2007+) Core sedan GL3. Vissa begränsningar, kritiserat för dålig prestanda. Dock förbättrat på nyare GPUer 8(87)8(87)

OpenGL pipeline Primitives, connectivity Vertex coordinates and normal vectors Vertex processing Transformed coordinates Geometry processing Triangles etc Texture Clip, cull Fragment operations Frame buffer operations +color, texture Fragment processing Pixel coord Raster conversion 9(87)9(87)

Geometry stage: Shaderprogram kan modifiera, lägga till eller ta bort geometri. TIll skillnad från vertexsteget jobbar vi på hela primitiver. Primitives, connectivity Vertex coordinates and normal vectors Vertex processing Transformed coordinates Geometry processing Triangles etc Texture Clip, cull Fragment operations Frame buffer operations +color, texture Fragment processing Pixel coord Raster conversion 10(87) 10(87)

Tillämpningar för geometry shaders: Splines/spline-ytor Kantextraktion, silhuetter Shadow volumes Effekter på polygonnivå (t.ex. uppbruten mesh genom att krympa trianglar) Dynamiskt hår/gräs definierat från en uppsättning "rotpunkter". Adaptive subdivision (inkl displacement mapping) Visualisering av normalvektorer etc Flat shading Wireframes 11(87)11(87)

Geometry shader-exempel Input:En enda triangle (som första exempel) Ladda geometry shader tillsammans med vertex och fragment. Indata till shader: triangel, linje eller punkt Output: triangle strip, line strip 12(87)12(87)

Pass-through geometry shader #version 150 layout(triangles) in; layout(triangle_strip, max_vertices = 3) out; void main() { for(int i = 0; i < gl_in.length(); i++) { gl_position = gl_in[i].gl_position; EmitVertex(); } } Tala om att en primitiv är klar Skicka vidare samma vertex 13(87)13(87)

Flat shading Lätt med geometry shaders: Tag medelvärde av alla normaler i GS, beräkna ljus från detta. 14(87)14(87)

void main() { vec4 middleoftriangle = vec4(0.0); vec3 avgnormal = vec3(0.0);; for(int i = 0; i < gl_in.length(); i++) { avgnormal += exnormal[i]; } middleoftriangle /= gl_in.length(); avgnormal /= gl_in.length(); avgnormal = normalize(avgnormal); } for(int i = 0; i < gl_in.length(); i++) { gl_position = gl_in[i].gl_position; texcoordg = texcoord[i]; exnormalg = avgnormal; EmitVertex(); } EndPrimitive(); En aning bök för att få till något trivialt... 15(87)15(87)

Wireframe Wireframes kan genereras av geometry shader direkt från polygoner. Omvandla varje triangel till line strip i GS. Mycket användbart för visualisering av geometri. 16(87)16(87)

Lätt: line_strip ut i stället för triangle_strip layout(triangles) in; //layout(triangle_strip, max_vertices = 90) out; // Normal, solid layout(line_strip, max_vertices = 90) out; // Wireframe 17(87)17(87)

Hår och gräs Använd geometrin som startpunkter, generera linjer/kurvor från dessa for(float u = 0.0; u < 1.0; u += offs) for(float v = 0.0; u+v < 1.0; v += offs) { float u0 = u; float u1 = u + offs; float v0 = v; float v1 = v + offs; emit(u0,v0); EndPrimitive(); } (Figuren visar enbart normalvektorer) 18(87)18(87)

Crack shader Mindre generellt användbart men rolig effekt. Flytta alla vertexar närmare centrum av triangeln. void main() { vec4 middleoftriangle = vec4(0.0); float tw = 1.0 / offs; for(int i = 0; i < gl_in.length(); i++) middleoftriangle += gl_in[i].gl_position; middleoftriangle /= gl_in.length(); for(int i = 0; i < gl_in.length(); i++) { gl_position = (gl_in[i].gl_position * offs) + (middleoftriangle) * (1.0 - offs); } texcoordg = texcoord[i]; exnormalg = exnormal[i]; EmitVertex(); } EndPrimitive(); 19(87)19(87)

Tesselering då... Dela upp geometri för att 1) runda till en grov polygonmodell 2) lägga till detalj (displacement mapping mm) 3) Hantera level-of-detail Baseras ofta på splines Möjligt i både geometry och tesselation shaders 20(87)20(87)

Displacement mapping nu på geometrin, inte bump mapping Gråd & Forslund TSBK03 2016 21(87)21(87)

Bézierkurvor Typiskt 3 eller 4 kontrollpunkter per sektion 22(87)22(87)

Bézierytor En yta byggd av en uppsättning Bézier-ytsektioner (Bézier patches) En Bézierpatch består av 16 kontrollpunkter i ett 4x4- rutnät 23(87)23(87)

Exempel på Bézierytor 24(87)24(87)

Bezierkurva i en geometry shader // Simple 3-point spline geometry shader #version 150 layout(triangles) in; layout(line_strip, max_vertices = 50) out; // quadratic bezier 0..1 vec4 bez3(vec3 a, vec3 b, vec3 c, float u) { float aw = (1-u)*(1-u); float bw = 2*(1-u)*u; float cw = u*u; return vec4(a*aw+b*bw+c*cw, 1.0); } void main() { for (int i = 0; i <= 20; i++) { gl_position = bez3( vec3(gl_in[0].gl_position), vec3(gl_in[1].gl_position), vec3(gl_in[2].gl_position), float(i)/20.0); EmitVertex(); } } 25(87)25(87)

Adjacency Geometri kan skickas tillsammans med information om grannpunkter Detta kan underlätta t.ex. tesselering Triangel med adjacency Linje med adjacency Mer tillämpningar: Shadow volumes, konturextraktion 26(87)26(87)

Bezierpatches (4x4 punkter) med geometry shader? Passar dåligt Geometry shader arbetar med trianglar. Adjacency räcker inte till, och kräver mycket extraarbete på modeller för att använda. 27(87)27(87)

Curved PN Triangles Passar bra för geometry shaders Behöver bara vertexar samt normalvektorer för en triangel i taget - ej adjacency. Bekvämt. PN = Point + Normal 28(87)28(87)

Curved PN Triangles (Se TSBK07) 29(87)29(87)

Instancing av geometry shaders Prestandaproblem vid få element in och många ut. Instancing kör g.s. flera gånger på samma primitiv layout(invocations = num_instances ) in; gl_invocationid Minst 32 instanser garanterade Standard från OpenGL 4.0 30(87)30(87)

Slutsatser Geometry shader mycket användbar, med många tillämpningar. Ett extra shadersteg krånglar inte till det så farligt. Räcker till det mesta - men inte allt. 31(87)31(87)

Tesselation shaders 32(87)32(87)

Tesselation shaders Problem med tidiga geometry shaders: Mycket geometri från få indata ineffektivt, seriellt. Åtgärd 1: Invocations i nyare hårdvara, snabbare geometry shaders Åtgärd 2: Tesselation shaders 33(87)33(87)

Tesselation shaders Ligger mellan vertex shader och geometry shader Inte en shader utan två, plus mellansteg. 1) Tesselation control shader 2) Primitive generation 3) Tesselation evaluation shader 34(87)34(87)

OpenGL pipeline - extended Primitives, connectivity Primitives, connectivity Geometry processing Vertex coordinates and normal vectors Vertex shader Transformed coordinates Tesselation control shader Primitive generation Tesselation evaluation shader Geometry shader Texture Clip, cull Fragment operations Frame buffer operations +color, texture Fragment processing Pixel coord Raster conversion 35(87)35(87)

Uppgifter hos tesselation shaders Indata: Patchar, ett antal vertexar utan given konstellation. TC-shadern anger önskad detaljnivå per kant samt inre nivåer TE-shadern beräknar slutliga positioner på önskat sätt (t.ex. med en splinefunktion) 36(87)36(87)

Exempel: Triangel Outer = 3 Inner = 3 37(87)37(87)

Exempel: Tesselation Control #version 400 layout(vertices = 3) out; in vec3 vposition[]; // From vertex shader out vec3 tcposition[]; // Output of TC uniform float TessLevelInner; // Sent from main program uniform float TessLevelOuter; void main() { tcposition[gl_invocationid] = vposition[gl_invocationid]; // Pass on vertex if (gl_invocationid == 0) { gl_tesslevelinner[0] = TessLevelInner; // Decide tesselation level gl_tesslevelouter[0] = TessLevelOuter; gl_tesslevelouter[1] = TessLevelOuter; gl_tesslevelouter[2] = TessLevelOuter; } } 38(87)38(87)

Exempel: Tesselation Evaluation #version 400 layout(triangles, equal_spacing, cw) in; in vec3 tcposition[]; // Original patch vertices void main() { vec3 p0 = gl_tesscoord.x * tcposition[0]; // Barycentric vec3 p1 = gl_tesscoord.y * tcposition[1]; vec3 p2 = gl_tesscoord.z * tcposition[2]; gl_position = vec4(p0 + p1 + p2, 1); // Sum with weights from the barycentric coords any way we like // Apply vertex transformation here if we want } 39(87)39(87)

Control + Evaluation Control avgör hur många stegs tesselering som är önskvärd Evaluation anropas så många gånger, får unika koordinater, från vilka vi skall beräkna resulterande vertexar 40(87)40(87)

Resultat 41(87)41(87)

Variation på outer och inner 42(87)42(87)

Outer görs per kant Viktigt Beräkning per kant ger samma täthet på gemensam kant mellan olika delar Inga glipor 43(87)43(87)

Tesselering är inget nytt Gamla OpenGL hade Evaluators (glmap) Bra stöd för Bezierkurvor och Bezierytor. Dock begränsad kontroll från APIet 44(87)44(87)

Evaluators Gammalt API för att evaluera Bezierkurvor. Lättanvänt men numera deprecated. Stödjer både kurvor och ytor 45(87)45(87)

Evaluators Rättframt men inte så flexibelt glmap1f(gl_map1_vertex_3, u0, u1, 3, 4, &data2[0][0]); glenable(gl_map1_vertex_3); glbegin(gl_line_strip); for (int i = 0; i <= 20; i++) glevalcoord1f(u0 + i*(u1-u0)/20); Control points glend(); Evaluation, specifies vertices 46(87)46(87)

Evaluators Gammalmodiga Enbart quads - knepigt att använda på generella modeller. => satsa på geometry shaders och tesselation shaders 47(87)47(87)

Slutsatser om tesselation shaders Dubbla steg - mer komplicerat än geometry shaders Vertex shader överflödig Poängen är tesselering. Inget annat? Fler tillämpningar hos Geometry shaders? Har vi inte nog shadersteg snart? Tekniken så ny att det är svårt att förutse vad som slår. 48(87)48(87)