Information Coding / Computer Graphics, ISY, LiTH

Relevanta dokument
Teknik för avancerade datorspel!

Teknik för avancerade datorspel!

Grafiska pipelinen. Edvin Fischer

OpenGL AGI HT05. Gustav Taxén

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

Här är ett väldigt bra tidpunkt att spara scenen. Jag har valt att bygga ett litet pyramidtorn.

Spelutveckling - Scenegrafer. Scenegrafer Optimeringar Culling

Rendera med mental ray

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

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

Visualisering med Rhino/Vray/Photoshop av modell som skapats i Revit. AADA15 Revit Workshop 2017 LTH Ludvig Hofsten

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

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

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

Procedurell 3D-eld på grafikkortet

Grafik raytracing. Mattias Axblom.

Shaders. Gustav Taxén

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

Koordinatsystem och Navigation

LANDING ZONE IV (v1.0, uppgift 4 av 4) för 3D Animering B 1112

Grafiska pipelinens funktion

Procedurell Terräng med LOD i OpenGL 4

Rastrering och displayalgoritmer. Gustav Taxén

Geometry shaders! och Tesselation shaders!

BACHELOR THESIS. Efficient Optimizations Inside the Digital Advertise Production Pipeline. Michal Marcinkowski Mehmet Özdemir

Fotorealistiska bilder 1 PV360 kap 1 7: Grunder samt material och dekaler i Photoview 360

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

Procedurell renderingsmotor i Javascript och HTML5

TNM022 Proceduella Bilder Rendering av proceduell päls i realtid

HAND TRACKING MED DJUPKAMERA

Fotorealism, animering, SW resurser

Bildbehandling, del 1

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Umeå universitet 4 februari 2004 Institutionen för datavetenskap David Olsson

Geometry shaders! och Tesselation shaders!

Bézierkurvor och parametriska objektrepresentationer

Designing a Shading System. David Larsson

Kort introduktion till POV-Ray, del 3

MR-laboration: design av pulssekvenser

En introduktion till OpenGL. Gustav Taxén

En jämförande studie mellan Mental Ray och V-Ray

BRUKSANVISNING / MANUAL

Lagermask och urklippsmask

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

Kort introduktion till POV-Ray, del 5

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

Innehållsförteckning

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

Realtidsskuggalgoritmer för virtuella 3D-världar på modern grafikhårdvara M A R C U S B E A U S A N G

GRAPHIC GUIDE. ISY System AB Box Habo Sweden tel fax

BRUKSANVISNING / MANUAL

IE1205 Digital Design: F6 : Digital aritmetik 2

Effektiva renderingstekniker av subsurface scattering med mental ray

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

Projekt i bildanalys Trafikövervakning

Omtentamen TNM077, 3D datorgrafik och animering (samt även TNM008, 3D datorgrafik och VR)

1. Compute the following matrix: (2 p) 2. Compute the determinant of the following matrix: (2 p)

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

Inledning. Kapitel Bakgrund. 1.2 Syfte

Innehåll Introduktion... 3 InteractiveScene.config... 3 Scener <scenes>... 3 Typsnitt <fonts>... 3 Övergångar <transitions>...

Lösningar till tentamen i EIT070 Datorteknik

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

Laboration 4: Digitala bilder

Introduktion till 3dsMax TNM061/TNGD25 Lab 3: Ljussättning och rendering

Borttagning av skymda ytor Painter s Algorithm och Z-buffering. MICHAEL HJORTHOLT och ANDREAS PAULSSON

Retuschera och laga bilder med Photoshop

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

Projekt 6. Fourieroptik Av Eva Danielsson och Carl-Martin Sikström

Affina avbildningar Fraktala bilder Itererade funktionssystem. Affina avbildningar, itererade funktionssystem och fraktala bilde

Föreläsning 9 10: Bildkvalitet (PSF och MTF)

ATT UPPTÄCKA DOLDA OBJEKT I SPEL

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

V-Ray SketchUp. Detta är ett testkapitel på utbildnings materialet för V-Ray for Trimble SketchUp.

TEM Projekt Transformmetoder

Introduktion till 3dsMax TNM061/TNGD25 Lab 3: Ljussättning och rendering

Introduktion till 3dsMax TNM061/TNGD25 Lab 3: Ljussättning och rendering

Transparens i en deferred pipeline Stefan Hanna

Kurvor och ytor. Gustav Taxén

Specifikation av kandidatexjobb

Kort introduktion till POV-Ray, del 1

Metoder för att öka realismen vid animerade 3Dförlopp. Master of Science Thesis MARTIN REBAS

Smart Clock. Du kan även ladda ner en PDF manual på box850.com, välj Smart Clock och tryck på Nerladdning.

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

Datastrukturer. föreläsning 6. Maps 1

Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Datorgrafik Ray tracing. Mattias Ekström, Västerås,

WindPRO version feb SHADOW - Main Result. Calculation: inkl Halmstad SWT 2.3. Assumptions for shadow calculations. Shadow receptor-input

Tentamen TNM061 3D-grafik och animering för MT2 och DAV1

DIGITAL RASTRERING Sasan Gooran. DIGITALA BILDER (pixelbaserad) ppi (pixels per inch)

Inledning... 7 Arbetsgång... 8 Välkomstskärm (Welcome Screen)... 8 Övningsfiler... 9

Introduktion till 3dsMax TNM061/TNGD25 Lab 3: Ljussättning och rendering

Flera vyer. Plan-, fasad-, sektions- och 3D-vy

Att skapa och hantera bilder från Pro/E

Interiör visualisering av ett kontor i Braxen 3

Kv. Ogräset. Martin Stenmarck,

Pressrelease Artes Industriambassadör Mer realistiska skuggor i datorspel och virtual reality-applikationer

8 Binär bildbehandling

Laboration - Shaders

Datorstödd konstruktion fortsättningskurs, TM051B Tentamen: Del 2-3D CAD - modellering

Transkript:

12(73) Shadow maps/skuggmappning Mycket populär skuggningsmetod Två renderingar av scenen Beräkning för beslut i fragmentshader Mycket beräkningar (filter) för god kvalitet Fördel: Behöver ingen kunskap om scenens innehåll, klarar alla sorters former. Occluder och receiver hittas automatiskt Selfshadowing inget problem. 12(73)

Shadow maps Tvåpassalgoritm: 1: Rendera från ljuskällan. Endast Z-buffern är av intresse Z-buffern är vår shadow map, en 2Dfunktion som anger avståndet till ljuskällan. 2: Z-buffern används i andra passet: Z-buffern används som projicerad textur, men inte för att rita med 13(73)13(73)

Shadow maps Z-buffern är en djuptextur. När den projiceras över scenen så nås varje fragmentberäkning av ett Z-värde. A: Om fragmentet (pixeln) är belyst så är Z-bufferns värde lika med avståndet till ljuskällan B: Om den är i skugga så är Z-värdet mindre än avståndet till ljuskällan. Om vi kan testa denna likhet/olikhet så vet vi om pixeln är i skugga Detta kan göras med fragment shader eller avancerad texturaritmetik. 14(73)14(73)

Shadow maps - princip Ljuskälla Kamera Bildplan för djupbilden Bildplan Via projicerad textur kan djupbilden avläsas för varje bildpunkt. Jämförs med avstånd 15(73)15(73)

Shadow maps - exempel Med skuggor Utan skuggor 16(73)16(73)

Shadow maps - exempel Rendering av shadow map Sedd från ljuskällan Z-buffer från ljuskällan 17(73)17(73)

Shadow maps - exempel Shadow map som projicerad textur Z-buffer projicerad på scenen Avstånd till ljuskällan När dessa är lika: ej i skugga 18(73)18(73)

Områden med avvikande värden: 19(73)19(73)

Shadow maps - problem Problem 1: Lika är ett dåligt villkor Måste ha en viss maginal för att undvika artefakter. För lite marginal: Nästan allting blir skugga (liknar Z-fightning) För mycket marginal: Skuggor krymper Måttligt problem Problem 2: Shadow buffer kräver hög upplösning för att inte ge kantartefakter 20(73)20(73)

Shadow maps - problem Problem 3: Shadow mapping täcker inte automatiskt alla riktningar. Skuggkartan görs inom ett begränsat frustum. Flera renderingar behövs för att täcka alla riktiningar. (I princip en cube map ut från ljuskällan.) 21(73)21(73)

Shadow buffer-exempel Baserat på demo av Fabien Saglard, förenklat, generaliserat. Shaderbaserat. (Fixed pipeline-lösningar fanns också men var mindre flexibelt.) 22(73)22(73)

Shadow buffer-exempel Viktiga detaljer Placera kameran i ljuskällan Z-buffer till textur Projicera textur Utför avståndsjämförelse 23(73)23(73)

Z-buffer till textur Kan göras med kopiering mellan buffrar. glcopyteximage2d(gl_texture_2d, 0, GL_DEPTH_COMPONENT, 0,0, width, height,0); Nya, snabbare metoden: FBO Skapa FBO med enbart Z-buffer Lite annorlunda FBO; stäng av de vanliga delarna: gldrawbuffer(gl_none); glreadbuffer(gl_none); Komplett kod finns på kurssidan. 24(73)24(73)

Renderingens olika steg 1) Rendera från ljuskällan till FBO (med enbart Z- buffer) 2) Rendera med Z-buffern projicerad över scenen från ljuskällan 3) I shaders, använd Z-buffern för skuggtest 25(73)25(73)

1) Rendera från ljuskällan till FBO (med enbart Z-buffer) // Bind the depth FBO glbindframebuffer(gl_framebuffer,fboid); //Rendering offscreen //Using a simple shader to render to the depthbuffer gluseprogram(simpleshader); FBO // Modify viewport glviewport(0,0,render_width * SHADOW_MAP_RATIO,RENDER_HEIGHT* SHADOW_MAP_RATIO); // Clear previous frame values glclear(gl_depth_buffer_bit); Enbart Z //Disable color rendering, we only want to write to the Z-Buffer glcolormask(gl_false, GL_FALSE, GL_FALSE, GL_FALSE); // Setup the projection and modelview from the light source setupmatrices(p_light[0],p_light[1],p_light[2],l_light[0],l_light[1],l_light[2]); // Culling switching, rendering only backface, this is done to avoid self-shadowing Culling-trick glcullface(gl_front); drawobjects(); //Save modelview/projection matrice into the texture matrix, also add a bias settexturematrix(); Spara matriser för texturprojicering 26(73)26(73)

2) Rendera från kamera // Now rendering from the camera POV, using the FBO to generate shadows glbindframebuffer(gl_framebuffer,0); glviewport(0,0,render_width,render_height); //Enabling color write (previously disabled for light POV z-buffer rendering) glcolormask(gl_true, GL_TRUE, GL_TRUE, GL_TRUE); Ingen FBO - nu är den textur // Clear previous frame values glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); //Using the shadow shader gluseprogram(shadowshaderid); gluniform1i(shadowmapuniform,tex_unit); gluniform1i(texunit,tex_unit); glactivetexture(gl_texture0 + TEX_UNIT); glbindtexture(gl_texture_2d,depthtextureid); // Setup the projection and modelview from the camera setupmatrices(p_camera[0],p_camera[1],p_camera[2],l_camera[0],l_camera[1],l_camera[2]); Shaders och textur glcullface(gl_back); drawobjects(); glutswapbuffers(); 27(73)27(73)

3) Fragment shader uniform sampler2d shadowmap; in vec4 shadowcoord; // Surface position in light source coordinates out vec4 fragcolor; void main() { // Perform perspective division to get the actual texture position vec4 shadowcoordinatewdivide = shadowcoord / shadowcoord.w ; Texturprojektion, samma som tidigare // Used to lower moire' pattern and self-shadowing // The optimal value here depends on Z buffer resolution. shadowcoordinatewdivide.z += 0.002; // 0.0005; // Look up the depth value float distancefromlight = texture(shadowmap, shadowcoordinatewdivide.st).z; // Compare float shadow = 1.0; if (shadowcoord.w > 0.0) if (distancefromlight < shadowcoordinatewdivide.z) shadow = 0.5; fragcolor = shadow * gl_color; } Men nu hämtar vi Z-värdet......och jämför med avståndet till kameran, som vi redan har 28(73)28(73)

Snyggt? Nja, det var ju hyfsade skuggor - bitvis. Kastade skuggor blir fina Tre problemområden: 1) Belysta områden. 2) Attached shadow, objektens baksidor. 3) Gränsområdet mellan dessa två. 29(73)29(73)

3 1 2 Problem med 1) kan elimineras av culling... men då flyttas problemen till 2). 3) är det värsta, beror på upplösningen 30(73)30(73)

Cascaded shadow maps Löser problem 2 Dela upp viewing frustum i flera zoner, rendera till olika Z-buffrar, med olika upplösning, i de olika zonerna. 31(73)31(73)

Ljuskälla Ljuskällans/ djupbildens frustum Kamera Nära zon: Högre upplösning Fjärran zon: Lägre upplösning Kamerans frustum 32(73)32(73)

Aiming for constant resolution from the camera. 33(73)33(73)

Vi återkommer till shadow mapping straxt... 34(73)34(73)

Shadow volumes (Stencil shadows) En tredje skuggningsmetod. Idé: projicera skuggande objekt till kantytor på en volym. Med hjälp av stencilbuffern kan vi avgöra om en viss punkt är inom eller utanför volymen. Fördel: Undviker upplösningsberoendet som shadow buffer har. 35(73)35(73)

Shadow volumes Princip Ljuskälla Skuggvolymens sidor ritas i stencilbffern. Antal gånger man ritar avgör Kamera Skuggande objektets ytterkanter projiceras till skuggande kon Passerar ytan 2 gånger - ej skugga Passerar ytan 1 gång - skugga 36(73)36(73)

Shadow volumes Algoritm: Bilda polygoner som utgör sidorna på skuggvolymen Initiera stencilbuffern till 1 om kameran är i skuggvolymen, annars 0 Rita alla framsidor i stencilbuffern, med inkrement Rita alla baksidor i stencilbuffern, med dekrement Rita scenen Rita skuggor i alla pixlar där stencilbuffern > 0 37(73)37(73)

Non-zero winding number Shadow volumes är samma princip i 3D 1 1 2 0 2 2 Odd-even rule, udda antal kanter är innanför (fel) Non-zero winding number rule, summan av upp-kanter och ner-kanter är noll när vi är utanför (rätt) 38(73)38(73)

Shadow volumes Stencilbufferns uppdatering och beslut Här är stencil=0-1 för baksidan Ljuskälla Här är stencil=1 Här är stencil=0 Kamera +1 för framsidan 39(73)39(73)

Shadow volumes Fördelar: Inga upplösningsproblem, bra hårda skuggor Bygger helt på scencilbuffern Klarar självskuggning Klarar alla riktningar Nackdelar: Bökigt att beräkna volymen Många renderingspass över samma yta 40(73)40(73)

Skuggor Sammanfattning Projektionsskuggor lätta att göra, men fungerar bara på plana ytor Shadow maps fungerar mycket bra, klarar de flesta scener fint, om man bygger en bit vidare från grundmetoden Shadow volumes ger fina skuggor, men är scenberoende, kräver specifik processning av skuggande objekt Ett tämligen svårt problem som börjar få sin lösning. En självklarhet för högklassig grafik 41(73)41(73)

Mer skuggor Vad mer kan man göra? Shadow volume BSP trees: En metod för att hantera många skuggande objekt i samma scen Shadow penumbras: Metoder för att få mjuka skuggor i realtid Det finns mycket att göra. Ändå bygger det mesta på resultat från 70- och 80-talet. 42(73)42(73)

Mjuka skuggor Simulera skuggor från icke punktformiga ljuskällor Multipassrendering Percentage Closer Filtering Smoothies Soft shadow volumes Single sample soft shadows 43(73)43(73)

Mjuka skuggor = ljuskällor med signifikant utsträckning 44(73)44(73)

Mjuka skuggor genom multipassrendering Enkel men ineffektiv lösning Gör flera renderingar med ljuskällan i olika positioner. Variant: Rendera enbart skuggor flera gånger. Kräver många renderingar innan det blir snyggt. Omöjlig balans för många scener. 45(73)45(73)

Percentage Closer Filtering Vanligaste? Den viktigaste för allmänbildning i ämnet. Relativt enkel metod som beräknar skuggningsgrad ur bilden/skuggmappen. Uniform filtrering i bildplanet -> penumbrastorleken dåligt avbildad, konstant storlek i bildplanet. 46(73)46(73)

Percentage Closer Filtering Testa n punkter kring samplingspunkten. Om k av dessa är belysta belysningsnivå k/n OBS att bilddata inte filtreras Räkning av skugga/ej skugga. Materialtextur etc är orört, får enbart ljussätttning. Man kan INTE skapa mjuka skuggor med konventionella lågpassfilter 4 belysta av 9 -> ljusnivå 4/9 47(73)47(73)

Smoothies Smoothies Fake till och med enligt uppfinnaren Yttre penumbra simuleras med extrakanter i utkanten av occluderns projektion. Shadow map + rendering av kanterna. Objekt Projicerad profil Smoothies läggs till i kanterna 48(73)48(73)

Soft Shadow Volumes Soft Shadow Volumes mer ambitiös, multipassmetod med både inre och yttre penumbra. Besläktad med Smoothies. Single Sample Soft Shadows Besläktad med PCF. Beräknar avstånd till närmaste skugga. Vissa problem med att närmaste skugga inte alltid är den som har närmast penumbra En djungel av algoritmer för mjuka skuggor finns 49(73)49(73)

Slutsatser om skuggor Mycket viktig aspekt i spel och annan modern realtidsgrafik Skuggvolymer ger hög kvalitet men är krävande för komplexa modeller. Scenberoende Skuggmappning har i sin enklaste form artefakter och riktningsberoende, men dessa kan hanteras. Ger speciellt bra resultat för mjuka skuggor. Många algoritmer för mjuka skuggor. Skall man nöja sig med PCF eller gå längre? 50(73)50(73)