Geometry shaders! och Tesselation shaders!

Relevanta dokument
Geometry shaders! och Tesselation shaders!

Grafiska pipelinens funktion

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

Procedurell Terräng med LOD i OpenGL 4

Teknik för avancerade datorspel!

Teknik för avancerade datorspel!

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

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

Grafiska pipelinen. Edvin Fischer

Shaders. Gustav Taxén

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Kurvor och ytor. Gustav Taxén

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

Procedurell renderingsmotor i Javascript och HTML5

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

Procedurell 3D-eld på grafikkortet

Laboration - Shaders

Designing a Shading System. David Larsson

Vector Displacement Mapping

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

OpenGL AGI HT05. Gustav Taxén

Kv. Ogräset. Martin Stenmarck,

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

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

2D1339 Programkonstruktion för F1, ht 2003

Spelutveckling - Scenegrafer. Scenegrafer Optimeringar Culling

TANA17 Matematiska beräkningar med Matlab

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

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

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

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

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

LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer

Teknik bakom tredimensionella datorgrafiken Direct3D

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

Extramaterial till Matematik Y

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

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

Innehållsförteckning

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?

Bézierkurvor och parametriska objektrepresentationer

Utmattningsdimensionering med FEM Lokala metoder

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

TBSK03 Teknik för avancerade Datorspel. Jens Ogniewski Information Coding Group Linköpings universitet

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

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

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

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

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.

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

Displaysystem. Hans Brandtberg Saab Avitronics SAAB AVITRONICS

Explorativ övning 11 GEOMETRI

Omdirigering. Omdirigering

GPGPU-LOD (General Purpose Graphics Processing Unit - Level Of Detail)

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

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

Procedurella Grottor TNM084. Sammanfattning. Alexander Steen

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

Koordinatsystem och Navigation

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

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

Laboration 3 GUI-programmering

Datastrukturer och Algoritmer D0041D

Tentamen PC-teknik 5 p Lösningar och kommentarer

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Innehållsförteckning

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

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

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

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

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

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

Föreläsning 9-10 Innehåll

Parallellism, återblick

Rekursion och induktion för algoritmkonstruktion

Varför behövs grafikbibliotek? Introduktion till OpenGL. OpenGL är ett grafikbibliotek. Fördelar med OpenGL. Allmänt om OpenGL. Nackdelar med OpenGL

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

Datorarkitekturer med operativsystem ERIK LARSSON

Extramaterial till Matematik Y

Tentamen FYTA11 Javaprogrammering

SgLib Simple Graphics Library

CAD. och mer därtill. KTH Industriell Produktion/DKT Lasse Wingård. CAD och mer därtill

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

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

Utveckling av terräng och partikeleffekter med

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

Projekt i TNM084, Procedurella bilder

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

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

Kort introduktion till POV-Ray, del 3

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

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

Innehållsförteckning

Sätt att skriva ut binärträd

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.

Information Coding / Computer Graphics, ISY, LiTH

Effektivt arbetsflöde för att skapa en CG karaktär för film och reklam

Transkript:

5(91) Information Coding / Computer Graphics, ISY, LiTH 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 5(91)

Geometry shaders 6(91)6(91)

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änsingar, kritiserat för dålig prestanda. Dock förbättrat på nyare GPUer 7(91)7(91)

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 8(91)8(91)

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 9(91)9(91)

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

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 11(91)11(91)

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 12(91)12(91)

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

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... 14(91)14(91)

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. 15(91)15(91)

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 16(91)16(91)

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(); } 17(91)17(91)

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(); 18(91)18(91)

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 19(91)19(91)

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

Bézierkurvor Typiskt 3 eller 4 kontrollpunkter per sektion 21(91)21(91)

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 22(91)22(91)

Exempel på Bézierytor 23(91)23(91)

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(); } } 24(91)24(91)

Adjacency Geometri kan skickas tillsammans med information om grannpunkter Detta kan underlätta t.ex. tesselering Triangel med adjacency Linje med adjacency 25(91)25(91)

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. 26(91)26(91)

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 27(91)27(91)

Curved PN Triangles (Se TSBK07) 28(91)28(91)

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. 29(91)29(91)

Tesselation shaders 30(91)30(91)

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 31(91)31(91)

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 32(91)32(91)

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 33(91)33(91)

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) 34(91)34(91)

Exempel: Triangel Outer = 3 Inner = 3 35(91)35(91)

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; } } 36(91)36(91)

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 } 37(91)37(91)

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 38(91)38(91)

Resultat 39(91)39(91)

Variation på outer och inner 40(91)40(91)

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

Tesselering är inget nytt Gamla OpenGL hade Evaluators (glmap) Bra stöd för Bezierkurvor och Bezierytor. Dock begränsad kontrollfrån APIet 42(91)42(91)

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

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 44(91)44(91)

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

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. 46(91)46(91)