Le moderne GPU - C42009
-
Upload
angelo-theodorou -
Category
Technology
-
view
1.201 -
download
8
description
Transcript of Le moderne GPU - C42009
Le moderne GPU
Cosa �e possibile fare oggi e cenni su come farlo
Angelo "Encelo\ Theodorou
Universit�a degli Studi di Napoli "Federico II\
Revisione di [CG2008] per il seminario in aula C4
A. Theodorou ("Federico II\) Le moderne GPU C42009 1 / 152
Sommario
Sommario1 Introduzione
Primo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 2 / 152
Sommario
Sommario1 Introduzione
Primo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 2 / 152
Sommario
Sommario1 Introduzione
Primo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 2 / 152
Sommario
Sommario1 Introduzione
Primo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 2 / 152
Introduzione Primo approccio
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 3 / 152
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra�che
A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra�che
A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra�che
A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra�che
A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra�che
A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra�che
A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra�che
A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra�che
A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152
Introduzione Primo approccio
Primo approccioLa pipeline �ssa
A. Theodorou ("Federico II\) Le moderne GPU C42009 5 / 152
Introduzione Primo approccio
Primo approccioLa pipeline programmabile (SM 4.0)
A. Theodorou ("Federico II\) Le moderne GPU C42009 6 / 152
Introduzione Primo approccio
Primo approccioLo shader
Il sorgente �e speci�cato dal programmatore
Viene eseguito in parallelo su pi�u unit�a autonome
Pu�o modi�care un solo elemento alla volta (gathering/scattering)
Pu�o intervenire in tre fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti
Di default emula le attivit�a della pipeline �ssa
A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152
Introduzione Primo approccio
Primo approccioLo shader
Il sorgente �e speci�cato dal programmatore
Viene eseguito in parallelo su pi�u unit�a autonome
Pu�o modi�care un solo elemento alla volta (gathering/scattering)
Pu�o intervenire in tre fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti
Di default emula le attivit�a della pipeline �ssa
A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152
Introduzione Primo approccio
Primo approccioLo shader
Il sorgente �e speci�cato dal programmatore
Viene eseguito in parallelo su pi�u unit�a autonome
Pu�o modi�care un solo elemento alla volta (gathering/scattering)
Pu�o intervenire in tre fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti
Di default emula le attivit�a della pipeline �ssa
A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152
Introduzione Primo approccio
Primo approccioLo shader
Il sorgente �e speci�cato dal programmatore
Viene eseguito in parallelo su pi�u unit�a autonome
Pu�o modi�care un solo elemento alla volta (gathering/scattering)
Pu�o intervenire in tre fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti
Di default emula le attivit�a della pipeline �ssa
A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152
Introduzione Primo approccio
Primo approccioLo shader
Il sorgente �e speci�cato dal programmatore
Viene eseguito in parallelo su pi�u unit�a autonome
Pu�o modi�care un solo elemento alla volta (gathering/scattering)
Pu�o intervenire in tre fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti
Di default emula le attivit�a della pipeline �ssa
A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152
Introduzione Primo approccio
Primo approccioLo shader
Il sorgente �e speci�cato dal programmatore
Viene eseguito in parallelo su pi�u unit�a autonome
Pu�o modi�care un solo elemento alla volta (gathering/scattering)
Pu�o intervenire in tre fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti
Di default emula le attivit�a della pipeline �ssa
A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152
Introduzione Primo approccio
Primo approccioLo shader
Il sorgente �e speci�cato dal programmatore
Viene eseguito in parallelo su pi�u unit�a autonome
Pu�o modi�care un solo elemento alla volta (gathering/scattering)
Pu�o intervenire in tre fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti
Di default emula le attivit�a della pipeline �ssa
A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152
Introduzione Primo approccio
Primo approccioLo shader
Il sorgente �e speci�cato dal programmatore
Viene eseguito in parallelo su pi�u unit�a autonome
Pu�o modi�care un solo elemento alla volta (gathering/scattering)
Pu�o intervenire in tre fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti
Di default emula le attivit�a della pipeline �ssa
A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152
Introduzione Primo approccio
Primo approccioLo stream processor
Esegue uno qualsiasi dei tre tipi di shader (architettura uni�cata)
Viene istruito da un dispatcher che gestisce il work-load
Opera seguendo un design superscalare
Lavora in singola e doppia precisione (IEEE-754 compliant)
Segue il paradigma dello stream processing (SPMD, kernel, stream)
A. Theodorou ("Federico II\) Le moderne GPU C42009 8 / 152
Introduzione Primo approccio
Primo approccioLo stream processor
Esegue uno qualsiasi dei tre tipi di shader (architettura uni�cata)
Viene istruito da un dispatcher che gestisce il work-load
Opera seguendo un design superscalare
Lavora in singola e doppia precisione (IEEE-754 compliant)
Segue il paradigma dello stream processing (SPMD, kernel, stream)
A. Theodorou ("Federico II\) Le moderne GPU C42009 8 / 152
Introduzione Primo approccio
Primo approccioLo stream processor
Esegue uno qualsiasi dei tre tipi di shader (architettura uni�cata)
Viene istruito da un dispatcher che gestisce il work-load
Opera seguendo un design superscalare
Lavora in singola e doppia precisione (IEEE-754 compliant)
Segue il paradigma dello stream processing (SPMD, kernel, stream)
A. Theodorou ("Federico II\) Le moderne GPU C42009 8 / 152
Introduzione Primo approccio
Primo approccioLo stream processor
Esegue uno qualsiasi dei tre tipi di shader (architettura uni�cata)
Viene istruito da un dispatcher che gestisce il work-load
Opera seguendo un design superscalare
Lavora in singola e doppia precisione (IEEE-754 compliant)
Segue il paradigma dello stream processing (SPMD, kernel, stream)
A. Theodorou ("Federico II\) Le moderne GPU C42009 8 / 152
Introduzione Primo approccio
Primo approccioLo stream processor
Esegue uno qualsiasi dei tre tipi di shader (architettura uni�cata)
Viene istruito da un dispatcher che gestisce il work-load
Opera seguendo un design superscalare
Lavora in singola e doppia precisione (IEEE-754 compliant)
Segue il paradigma dello stream processing (SPMD, kernel, stream)
A. Theodorou ("Federico II\) Le moderne GPU C42009 8 / 152
Introduzione Primo approccio
Primo approccioArchitettura a shader uni�cati
Figura: Architettura discreta
Figura: Architettura uni�cataA. Theodorou ("Federico II\) Le moderne GPU C42009 9 / 152
Introduzione Primo approccio
Primo approccioArchitettura GT200
A. Theodorou ("Federico II\) Le moderne GPU C42009 10 / 152
Introduzione Primo approccio
Primo approccioArchitettura RV770
A. Theodorou ("Federico II\) Le moderne GPU C42009 11 / 152
Introduzione Panoramica storica
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 12 / 152
Introduzione Panoramica storica
Panoramica storicaQuadro generale
1� Generazione (1995): accelerazione 3D di base
2� Generazione (1999): Transform & Lighting in hardware
3� Generazione (2001): Programmabilit�a a livello dei vertici e,limitatamente, a quello dei frammenti (SM 1.0)
4� Generazione (2002): Piena programmabilit�a a livello dei frammenti(SM 2.0)
5� Generazione (2004): Meno limitazioni, molta pi�u libert�a diprogrammazione della pipeline (SM 3.0)
6� Generazione (2006): Programmabilit�a a livello delle primitive,uni�cazione delle unit�a di calcolo (SM 4.0)
7� Generazione (2008): Un'evoluzione prestazionale (SM 4.1)
A. Theodorou ("Federico II\) Le moderne GPU C42009 13 / 152
Introduzione Panoramica storica
Panoramica storicaLa prima generazione
01/12/1996: Diamond Monster 3D (SST1, 1M transistor)01/08/1997: Nvidia Riva 128 (NV3, 3.5M transistor)01/08/1998: Nvidia Riva TNT (NV4, 7M transistor)01/11/1998: Ati Rage 128 (Rage 128, 8M transistor)! OpenGL 1.1 e Direct3D 5.0
Hidden Surface Removal tramite Z-bu�eringMipmappingFlat e Gouraud shadingFiltro bi/trilineare per le textureAlpha blendingStencil bu�er
(a) SST1 (b) NV3 (c) NV4 (d) Rage128A. Theodorou ("Federico II\) Le moderne GPU C42009 14 / 152
Introduzione Panoramica storica
Panoramica storicaLa seconda generazione
01/10/1999: Nvidia GeForce 256 (NV10, 23M transistor)15/06/2000: ATI Radeon (R100, 30M transistor)26/04/2000: Nvidia GeForce2 GTS (NV15, 25M transistor)! OpenGL 1.3 e Direct3D 7.0
Trasformazione, illuminazione e clipping dei verticiZ-bu�er pi�u preciso (compressione dei dati in transito)Rudimentale shading per-pixel (nascosto nell'API, 2 texturemiscelabili)Full Scene Anti Aliasing ed Anisotropic FilteringSupporto hardware alla compressione delle textureSupporto hardware a bump, shadow ed environment mapping
(e) NV10 (f) R100 (g) NV15A. Theodorou ("Federico II\) Le moderne GPU C42009 15 / 152
Introduzione Panoramica storica
Panoramica storicaLa terza generazione
01/05/2001: Nvidia GeForce 3 (NV20, 57M transistor)14/08/2001: ATI Radeon 8500 (R200, 60M transistor)04/02/2002: Nvidia GeForce4 Ti 4600 (NV25, 63M transistor)! OpenGL 1.4 e Direct3D 8.0/8.1
Vertex shader 1.0
Pixel shader 1.0 (parzialmente esposti nelle API, 4 texture miscelabili)
Supporto hardware al True Re ective Bump Mapping, EnvironmentalMapped Bump Mapping, ...
(h) NV20 (i) R200 (j) NV25
A. Theodorou ("Federico II\) Le moderne GPU C42009 16 / 152
Introduzione Panoramica storica
Panoramica storicaLa quarta generazione
19/08/2002: ATI Radeon 9700 PRO (R300, 110M transistor)01/05/2003: Nvidia GeForce FX 5800 (NV30, 125M transistor)04/05/2004: ATI Radeon X800 PRO (R420, 160M transistor)! OpenGL 1.5/2.0 e Direct3D 9.0b
Vertex Shader 2.0
Pixel Shader 2.0 (programmabili direttamente)
Precisione FP16/FP32
(k) R300 (l) NV30 (m) R420
A. Theodorou ("Federico II\) Le moderne GPU C42009 17 / 152
Introduzione Panoramica storica
Panoramica storicaLa quinta generazione
14/04/2004: Nvidia GeForce 6800 (NV40, 222M transistor)22/06/2005: Nvidia GeForce 7800 GTX (G70, ex-NV47, 278M transistor)05/10/2005: ATI Radeon X1800 XT (R520, 321M transistor)! OpenGL 2.0 e Direct3D 9.0c
Vertex e Pixel Shader 3.0Pi�u lunghi e con pi�u registri a disposizioneGestione di cicli dinamiciTexture fetch all'interno dei vertex shader
Multiple Render TargetsAccelerazione HW per ussi video HD
(n) NV40 (o) G70 (p) R520
A. Theodorou ("Federico II\) Le moderne GPU C42009 18 / 152
Introduzione Panoramica storica
Panoramica storicaLa sesta generazione
08/11/2006: Nvidia GeForce 8800 GTX (G80, 681M transistor)14/05/2007: ATI Radeon HD 2900 XT (R600XT, 700M transistor)11/12/2007: Nvidia GeForce 8800 GTS 512 (G92, 754M transistor)! OpenGL 2.0/2.1 e Direct3D 10
Vertex e Pixel Shader 4.0
Geometry Shader 4.0
Archittettura uni�cata
Design superscalare
(q) G80 (r)R600XT
(s) G92
A. Theodorou ("Federico II\) Le moderne GPU C42009 19 / 152
Introduzione Panoramica storica
Panoramica storicaLa settima generazione
19/11/2007: ATI Radeon HD 3870 (RV670XT, 666M transistor)17/06/2008: Nvidia GeForce GTX 280 (G200, 1400M transistor)25/06/2008: ATI Radeon HD 4870 (RV770XT, 956M transistor)! OpenGL 2.1/3.0/3.1 e Direct3D 10/10.1
Shader Model 4.1/Direct3D 10.1 (solo ATI)
Supporto alla doppia precisione
Sempre pi�u stream processor e larghezza di banda
Un'evoluzione pi�u che una rivoluzione
(t)RV670XT
(u) G200 (v)RV770XT
A. Theodorou ("Federico II\) Le moderne GPU C42009 20 / 152
La GPU in azione Potenza elaborativa
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 21 / 152
La GPU in azione Potenza elaborativa
Potenza elaborativaRiferimenti numerici
Processore Core Transistor (M) Frequenza (MHz)York�eld (QX9970) 4 core 220+600 3200Xenon (XBox 360) 3 core 165 3200Cell (PS3) 1 PPE+6 SPE 234 3200RV790XT (HD4890) 800 sp 956 850GT200b (GTX285) 240 1400 1476R700 (HD4870X2) 800x2 sp 956x2 750GT200b (GTX295) 240x2 1400x2 1242Processore SP (GFLOPS) DP (GFLOPS) Banda (GB/s)York�eld (QX9970) 51.1 25.5 12.8Xenon (XBox 360) 115.2 12 21.6Cell (PS3) 204 15 12.8RV790XT (HD4890) 1360 272 124.8GT200b (GTX285) 1209.5 88.8 159R700 (HD4870X2) 2400 480 115.2x2GT200b (GTX295) 1788 131.3 111.9x2
A. Theodorou ("Federico II\) Le moderne GPU C42009 22 / 152
La GPU in azione Potenza elaborativa
Potenza elaborativaGPU vs CPU
Il Commissariat �a l'�Energie Atomique ha ordinato un cluster ibrido da 295 TFlops:
103 TFlops derivanti dalle CPU
192 TFlops derivanti dalle GPU
A. Theodorou ("Federico II\) Le moderne GPU C42009 23 / 152
La GPU in azione Potenza elaborativa
Potenza elaborativaLarghezza di banda
A. Theodorou ("Federico II\) Le moderne GPU C42009 24 / 152
La GPU in azione Potenza elaborativa
Potenza elaborativaLegge di Moore
A. Theodorou ("Federico II\) Le moderne GPU C42009 25 / 152
La GPU in azione Applicazioni general purpose
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 26 / 152
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUIl GPGPU
GPGPU: General-Purpose computation on GPUs
Sito di riferimento: http://www.gpgpu.org
Speci�che a standard aperto: OpenCL (Open Computing Language)
Librerie dei produttori di HW: CUDA e Brook++/CAL
Middleware �sico: Nvidia PhysX (ex Ageia)
Stage nella pipeline Direct3D 11: Compute shader
Vecchie librerie open-source: BrookGPU, Sh
A. Theodorou ("Federico II\) Le moderne GPU C42009 27 / 152
La GPU in azione Applicazioni general purpose
Applicazioni general purposeNvidia Tesla: soluzione ad hoc
Computer desktop o rack che montano pi�u schede videoPensati speci�catamente per applicazioni GPGPU tramite CUDA
La controparte AMD �e chiamata FireStreamA. Theodorou ("Federico II\) Le moderne GPU C42009 28 / 152
La GPU in azione Applicazioni general purpose
Applicazioni general purposeFast Fourier Transforms
CPU: Intel Core 2 Quad, 2.4GHz (FFTW)
GPU: Nvidia GeForce 8800 GTX (CUDA e CUFFT)
A. Theodorou ("Federico II\) Le moderne GPU C42009 29 / 152
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUNvidia Gelato
Renderer ad accelerazione hardware non in tempo reale
A. Theodorou ("Federico II\) Le moderne GPU C42009 30 / 152
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUOpenVIDIA
Computer vision con supporto all'accelerazione della GPU
A. Theodorou ("Federico II\) Le moderne GPU C42009 31 / 152
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUFluidodinamica
Calcolo del sistema di equazioni di�erenziali di Navier-Stokes sulla GPU
A. Theodorou ("Federico II\) Le moderne GPU C42009 32 / 152
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUGenerazione ed erosione di terreni
Fault Formation Circles Perlin NoisePentium 4 3.0 GHz 10612 ms 650803 ms 10033 msGeForce 7600GT 1090 ms 1356 ms 113 msGeForce 8600GT 915 ms 952 ms 46 ms
A. Theodorou ("Federico II\) Le moderne GPU C42009 33 / 152
La GPU in azione Applicazioni general purpose
Applicazioni GPGPURicostruzione tomogra�ca
FASTRA: PC consumer, monta 4 schede video 9800x2 (8 GPU), (Maggio2008, meno di 4000 Euro)
CalcUA: Supercomputer dell'Univerist�a di Antwerp, 256 nodi (512 CPU
Opteron 250), (Marzo 2005, 3.5M di Euro)A. Theodorou ("Federico II\) Le moderne GPU C42009 34 / 152
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUFolding@Home
CPU: 4 mol/day
PS3: 100 mol/day
HD 3870: 170 mol/day
GTX 280: 500 mol/day
A. Theodorou ("Federico II\) Le moderne GPU C42009 35 / 152
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUPassword recovery
ElcomSoft Distributed Password Recovery
http://www.elcomsoft.com/edpr.html
A. Theodorou ("Federico II\) Le moderne GPU C42009 36 / 152
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUNurien tech demo
Fisica dei capelli e degli abiti accelerata dalla GPU
A. Theodorou ("Federico II\) Le moderne GPU C42009 37 / 152
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUFroblins Demo
L'IA degli oltre tremila agenti �e gestita dalla GPU
A. Theodorou ("Federico II\) Le moderne GPU C42009 38 / 152
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUUlteriori applicazioni
60 su 262 applicazioni dal sito CUDA Zone (Marzo 2009)
A. Theodorou ("Federico II\) Le moderne GPU C42009 39 / 152
La GPU in azione Applicazioni tradizionali
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 40 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliLa Game Industry
Uno dei motori trainanti dell'economia statunitense con miliardi didollari di fatturato annuale
Nel 2008 ha superato il mercato mondiale dell'home video con oltre32 miliardi di dollari
Il settore dell'intrattenimento �e meno soggetto alla recente recessioneeconomica
Causa principale della "corsa agli armamenti\ nel settore dell'HW
Uno dei principali campi applicativi della ricerca nella computergra�ca
Porta ad una ricaduta tecnologica anche in altri settori (educativo,medico, industriale, militare)
A. Theodorou ("Federico II\) Le moderne GPU C42009 41 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliLa Game Industry
Uno dei motori trainanti dell'economia statunitense con miliardi didollari di fatturato annuale
Nel 2008 ha superato il mercato mondiale dell'home video con oltre32 miliardi di dollari
Il settore dell'intrattenimento �e meno soggetto alla recente recessioneeconomica
Causa principale della "corsa agli armamenti\ nel settore dell'HW
Uno dei principali campi applicativi della ricerca nella computergra�ca
Porta ad una ricaduta tecnologica anche in altri settori (educativo,medico, industriale, militare)
A. Theodorou ("Federico II\) Le moderne GPU C42009 41 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliLa Game Industry
Uno dei motori trainanti dell'economia statunitense con miliardi didollari di fatturato annuale
Nel 2008 ha superato il mercato mondiale dell'home video con oltre32 miliardi di dollari
Il settore dell'intrattenimento �e meno soggetto alla recente recessioneeconomica
Causa principale della "corsa agli armamenti\ nel settore dell'HW
Uno dei principali campi applicativi della ricerca nella computergra�ca
Porta ad una ricaduta tecnologica anche in altri settori (educativo,medico, industriale, militare)
A. Theodorou ("Federico II\) Le moderne GPU C42009 41 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliLa Game Industry
Uno dei motori trainanti dell'economia statunitense con miliardi didollari di fatturato annuale
Nel 2008 ha superato il mercato mondiale dell'home video con oltre32 miliardi di dollari
Il settore dell'intrattenimento �e meno soggetto alla recente recessioneeconomica
Causa principale della "corsa agli armamenti\ nel settore dell'HW
Uno dei principali campi applicativi della ricerca nella computergra�ca
Porta ad una ricaduta tecnologica anche in altri settori (educativo,medico, industriale, militare)
A. Theodorou ("Federico II\) Le moderne GPU C42009 41 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliLa Game Industry
Uno dei motori trainanti dell'economia statunitense con miliardi didollari di fatturato annuale
Nel 2008 ha superato il mercato mondiale dell'home video con oltre32 miliardi di dollari
Il settore dell'intrattenimento �e meno soggetto alla recente recessioneeconomica
Causa principale della "corsa agli armamenti\ nel settore dell'HW
Uno dei principali campi applicativi della ricerca nella computergra�ca
Porta ad una ricaduta tecnologica anche in altri settori (educativo,medico, industriale, militare)
A. Theodorou ("Federico II\) Le moderne GPU C42009 41 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliLa Game Industry
Uno dei motori trainanti dell'economia statunitense con miliardi didollari di fatturato annuale
Nel 2008 ha superato il mercato mondiale dell'home video con oltre32 miliardi di dollari
Il settore dell'intrattenimento �e meno soggetto alla recente recessioneeconomica
Causa principale della "corsa agli armamenti\ nel settore dell'HW
Uno dei principali campi applicativi della ricerca nella computergra�ca
Porta ad una ricaduta tecnologica anche in altri settori (educativo,medico, industriale, militare)
A. Theodorou ("Federico II\) Le moderne GPU C42009 41 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliHuman Head (14/7/2007)
Demo real-time della Nvidia per la GeForce 8800 Ultra
A. Theodorou ("Federico II\) Le moderne GPU C42009 42 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliCryEngine 2 vs Unreal Engine 3 (1/2)
A. Theodorou ("Federico II\) Le moderne GPU C42009 43 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliCryEngine 2 vs Unreal Engine 3 (2/2)
A. Theodorou ("Federico II\) Le moderne GPU C42009 44 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliCrysis vs Real-life
A. Theodorou ("Federico II\) Le moderne GPU C42009 45 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliFinal Night Round 3 (20/2/2006)
A. Theodorou ("Federico II\) Le moderne GPU C42009 46 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliGears of War (Unreal Engine 3, 9/11/2006)
A. Theodorou ("Federico II\) Le moderne GPU C42009 47 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliCrysis (CryEngine 2, 13/11/2007)
A. Theodorou ("Federico II\) Le moderne GPU C42009 48 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliAssassin's Creed (Scimitar Engine, 14/11/2007)
A. Theodorou ("Federico II\) Le moderne GPU C42009 49 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliMass E�ect (Unreal Engine 3, 20/11/2007)
A. Theodorou ("Federico II\) Le moderne GPU C42009 50 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali3dMark Vantage, 28/4/2008
A. Theodorou ("Federico II\) Le moderne GPU C42009 51 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliDead Space (Unreal Engine 3, 14/10/2008)
A. Theodorou ("Federico II\) Le moderne GPU C42009 52 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliFar Cry 2 (Dunia Engine, 21/10/2008)
A. Theodorou ("Federico II\) Le moderne GPU C42009 53 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliFallout 3 (Gamebryo Engine, 28/10/2008)
A. Theodorou ("Federico II\) Le moderne GPU C42009 54 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliMirror's Edge (Unreal Engine 3, 12/11/2008)
A. Theodorou ("Federico II\) Le moderne GPU C42009 55 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliPrince of Persia (Anvil Engine, 2/12/2008)
A. Theodorou ("Federico II\) Le moderne GPU C42009 56 / 152
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliKillzone 2, 25/2/2009
A. Theodorou ("Federico II\) Le moderne GPU C42009 57 / 152
Cenni sulla programmazione Supporto OpenGL
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 58 / 152
Cenni sulla programmazione Supporto OpenGL
Supporto OpenGLSommario
Creazione shader object
Creazione program object
Utilizzo del program object
Codice di esempio 1
Liberazione delle risorse allocate
Variabili uniformi
Cenni sul resto
Codice di esempio 2
Nota: Le funzioni che verranno esaminate fanno parte del core di OpenGL 2.0 e
successivi.
A. Theodorou ("Federico II\) Le moderne GPU C42009 59 / 152
Cenni sulla programmazione Supporto OpenGL
Supporto OpenGLCreazione shader object
GLuint glCreateShader(GLenum shaderType )
Ritorna l'handle per un nuovo shaderIl tipo pu�o essere GL VERTEX SHADER o GL FRAGMENT SHADER.
void glShaderSource(GLuint shader, GLsizei count, const
GLchar **string, const GLint *length )
Imposta il sorgente per lo shader all'array di stringhe speci�cato.
void glCompileShader(GLuint shader )
Compila il sorgente dello shader speci�cato.
Nota: A partire dalle OpenGL 3.0, glCreateShader() accetta anche il tipo
GL GEOMETRY SHADER ARB.
A. Theodorou ("Federico II\) Le moderne GPU C42009 60 / 152
Cenni sulla programmazione Supporto OpenGL
Supporto OpenGLCreazione program object
GLuint glCreateProgram(void)
Ritorna l'handle per un nuovo programma.
void glAttachShader(GLuint program, GLuint shader )
Associa lo shader al programma speci�cato.
void glLinkProgram(GLuint program );
E�ettua la fase di linking per il programma.
A. Theodorou ("Federico II\) Le moderne GPU C42009 61 / 152
Cenni sulla programmazione Supporto OpenGL
Supporto OpenGLUtilizzo del program object
void glUseProgram(GLuint program )
Speci�ca il programma da usare.Da quel momento in poi, per qualsiasi operazione, non verr�a pi�uutilizzata la pipeline �ssa.Passando "0\ come parametro si ritorna alla pipeline tradizionale.
A. Theodorou ("Federico II\) Le moderne GPU C42009 62 / 152
Cenni sulla programmazione Supporto OpenGL
Supporto OpenGLCodice di esempio 1�
GLuint v , f , p ;char � vs , � f s ;
p = g lCreateProgram ( ) ;v = g lC r e a t eShade r (GL VERTEX SHADER ) ;g lShade rSou r c e ( v , 1 , &vs , NULL ) ;g lComp i l eShade r ( v ) ;g lA t tachShade r (p , v ) ;
f = g lC r e a t eShade r (GL FRAGMENT SHADER) ;g lShade rSou r c e ( f , 1 , &f s , NULL ) ;g lComp i l eShade r ( f ) ;g lA t tachShade r (p , f ) ;
g lL inkProgram (p ) ;g lUseProgram (p ) ;� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 63 / 152
Cenni sulla programmazione Supporto OpenGL
Supporto OpenGLLiberazione delle risorse allocate
void glDeleteShader(GLuint shader )
Comando opposto a quello di creazione, libera la memoria ed ilriferimento associati all'handle passato.
void glDeleteProgram(GLuint program )
Come sopra, ma relativo ai programmi.
void glDetachShader(GLuint program, GLuint shader )
Cancella l'associazione tra shader e programma.
A. Theodorou ("Federico II\) Le moderne GPU C42009 64 / 152
Cenni sulla programmazione Supporto OpenGL
Supporto OpenGLVariabili uniformi
OpenGL permette il passaggio di dati agli shader
GLint glGetUniformLocation(GLuint program, const GLchar
*name )
Ritorna il riferimento alla posizione di una certa variabile all'internodel programma, che dev'essere correntemente in uso.
void glUniformf1|2|3|4gff|ig(GLint location, TYPE v )
Imposta il valore della variabile alla locazione speci�cata a quellopassato dalla funzione.
void glUniformf1|2|3|4gff|igv(GLint location, GLuint
count, const TYPE v )
Come sopra, ma questa volta permette di speci�care un array di valori.
void glUniformMatrixf2|3|4gfv(GLint location, GLuint
count, GLboolean transpose, const GLfloat *v )
Passa allo shader una matrice quadrata della dimensione speci�cata,ordinata per colonne o per righe a seconda del parametro booleano.
A. Theodorou ("Federico II\) Le moderne GPU C42009 65 / 152
Cenni sulla programmazione Supporto OpenGL
Supporto OpenGLCenni sul resto
glGetUniform() e glGetActiveUniform()Ritorna il valore di una o di tutte le variabili uniformi attive nelprogramma speci�cato.
Funzioni di queryPermettono di ricavare lo stato degli oggetti creati, stampare logdiagnostici, conoscere gli oggetti correntemente attivi.
Funzioni relative agli attributi per verticePermettono di speci�care attributi da passare agli shader, all'internodi una coppia glBegin()/glEnd(), diversi per ogni vertice.
Multiple Render TargetsI fragment shader supportano la scrittura contemporanea su pi�u framebu�er.
Ausilio per lo svilupoglValidateProgram() controlla se l'eseguibile del programmaspeci�cato, dato lo stato OpenGL corrente, pu�o funzionare.
A. Theodorou ("Federico II\) Le moderne GPU C42009 66 / 152
Cenni sulla programmazione Supporto OpenGL
Supporto OpenGLCodice di esempio 2
�
GLuint p ;GLint loc1 , l o c 2 ;
g lUseProgram (p ) ;l o c 1 = g lGe tUn i f o rmLoca t i on (p , " Va r i a b l e 1 " ) ;g lUn i f o rm1 f ( loc1 , 1 . 0 f ) ;
l o c 2 = g lGe tUn i f o rmLoca t i on (p , " Va r i a b l e 2 " ) ;g lUn i f o rm1 i ( loc2 , 1 ) ;� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 67 / 152
Cenni sulla programmazione GL Shading Language
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 68 / 152
Cenni sulla programmazione GL Shading Language
GL Shading LanguageSommario
Tipi di dato
Inizializzatori e costruttori
Quali�catori
Flusso di controllo
Swizzling
Operazioni component-wise
Funzioni built-in
Variabili built-in
Codice di esempio
A. Theodorou ("Federico II\) Le moderne GPU C42009 69 / 152
Cenni sulla programmazione GL Shading Language
GL Shading LanguageTipi di dato
Scalari: float, int, bool
Vettori: fe*|i|bgvecf2|3|4g, oating-point, interi o booleani
Matrici: matf2|3|4g, matrici quadrate oating-point
Sampler: samplerf1|2|3gDfe*|Cube|Shadowg, permettono die�ettuare il fetch da una texture
Supporto a strutture ed array
A. Theodorou ("Federico II\) Le moderne GPU C42009 70 / 152
Cenni sulla programmazione GL Shading Language
GL Shading LanguageInizializzatori e costruttori
�
f l o a t a , b = 3 . 0 , c ;
const i n t S i z e = 4 ; // i n i t i a l i z e r i s r e q u i r e d
vec3 c o l o r = vec3 ( 0 . 2 , 0 . 5 , 0 . 8 ) ;vec4 c o l o r 4 = vec4 ( c o l o r , 1 . 0 )
mat2 m = mat2 ( 1 . 0 , 2 . 0 , 3 . 0 , 4 . 0 ) ;
vec3 v = vec3 ( 0 . 6 ) ;� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 71 / 152
Cenni sulla programmazione GL Shading Language
GL Shading LanguageQuali�catori
attribute
Informazioni destinate al vertex shader che variano spessonell'applicazione, anche tra la de�nizione di un vertice e l'altro.
uniform
Informazioni che variano meno spesso, destinate al vertex o alfragment shader.
varying
Informazioni passate per interpolazione dal vertex al fragment shader.
const
Per variabili costanti dichiarate al momento della compilazione, comein C.
Nota: A partire da GLSL 1.30 si usano le parole chiave in ed out al posto di
attribute e varying.
A. Theodorou ("Federico II\) Le moderne GPU C42009 72 / 152
Cenni sulla programmazione GL Shading Language
GL Shading LanguageFlusso di controllo
Cicli for, while e do-while
Presenza delle keyword break e continue
Selezioni tramite if, if-else, ed operatore ternario :?
Presenza della keyword discard, per abortire l'esecuzione delfragment shader per un certo frammento
Assenza del supporto per goto e switch
Nota: Il costrutto switch/case/default �e presente a partire da GLSL 1.30.
A. Theodorou ("Federico II\) Le moderne GPU C42009 73 / 152
Cenni sulla programmazione GL Shading Language
GL Shading LanguageSwizzling
�
vec4 v4 ;v4 . rgba ; // i s a vec4 and the same as j u s t u s i n g v4v4 . rgb ; // i s a vec3v4 . b ; // i s a f l o a tv4 . xy ; // i s a vec2
vec4 pos = vec4 ( 1 . 0 , 2 . 0 , 3 . 0 , 4 . 0 ) ;vec4 sw i z = pos . wzyx ; // sw i z = ( 4 . 0 , 3 . 0 , 2 . 0 , 1 . 0 )vec4 dup = pos . xxyy ; // dup = (1 . 0 , 1 . 0 , 2 . 0 , 2 . 0 )
vec4 pos = vec4 ( 1 . 0 , 2 . 0 , 3 . 0 , 4 . 0 ) ;pos . xw = vec2 ( 5 . 0 , 6 . 0 ) ; // pos = ( 5 . 0 , 2 . 0 , 3 . 0 , 6 . 0 )pos . wx = vec2 ( 7 . 0 , 8 . 0 ) ; // pos = ( 8 . 0 , 2 . 0 , 3 . 0 , 7 . 0 )� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 74 / 152
Cenni sulla programmazione GL Shading Language
GL Shading LanguageOperazioni component-wise
�
vec3 v , u ;f l o a t f ;v = u + f ;
// v . x = u . x + f ;// [ . . . ]
vec3 v , u , w;w = v + u ;
// w. x = v . x + u . x ;// [ . . . ]� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 75 / 152
Cenni sulla programmazione GL Shading Language
GL Shading LanguageFunzioni built-in (1/2)
Supportano l'overloading degli argomenti
Trigonometriche: radians(), degree(), sin(), cos(), tan(), ...
Esponenziali: pow(), exp(), log(), sqrt(), inversesqrt(), ...
Comuni: abs(), sign(), floor(), ceil(), min(), max(),clamp(), mix(), ...
Geometriche: length(), distance(), dot(), cross(),normalize(), reflect(), refract(), ...
A. Theodorou ("Federico II\) Le moderne GPU C42009 76 / 152
Cenni sulla programmazione GL Shading Language
GL Shading LanguageFunzioni built-in (2/2)
Supportano l'overloading degli argomenti
Matriciali: matrixCompMult()
Relazioni tra vettori: lessThan(), greatherThan(), equal(),notEqual(), ...
Accesso alle texture: texturef1|2|3gD, texturef1|2|3gDProj,texturef1|2|3gDLod, texturef1|2|3gDCube, shadowf1|2|3gD, ...
Solo frammenti: dFdx(), dFdy(), fwidth()
Rumore: noisef1|2|3|4g()
A. Theodorou ("Federico II\) Le moderne GPU C42009 77 / 152
Cenni sulla programmazione GL Shading Language
GL Shading LanguageVariabili built-in
Input del vertex shader: gl Color, gl Normal, gl Vertex,gl MultiTexCoordf0..Ng, ...
Output del vertex shader: gl Position, ...
Input del fragment shader: gl FragCoord, gl FrontFacing
Output del fragment shader: gl FragColor, gl FragData[],gl FragDepth
Variabili uniformi comuni: gl ModelViewMatrix,gl ProjectionMatrix, gl ClipPlane, gl Point,gl FrontMaterial, gl LightSource[], gl Fog, ...
A. Theodorou ("Federico II\) Le moderne GPU C42009 78 / 152
Cenni sulla programmazione GL Shading Language
GL Shading LanguageCodice di esempio
Listing 1: Vertex shader�
void main ( void )f
g l P o s i t i o n = f t r a n s f o rm ( ) ;
// g l P o s i t i o n = g l P r o j e c t i o nMa t r i x� g l Mode lV iewMatr i x � g l V e r t e x ;
// g l P o s i t i o n = g l Mode lV i ewP ro j e c t i o nMa t r i x� g l V e r t e x ;
g� �
Listing 2: Fragment shader�
void main ( void )f
g l F r a gCo l o r = g l C o l o r ;g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 79 / 152
Sorgenti di esempi Gouraud e Phong shading
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 80 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingBlinn-Phong re ection model
A. Theodorou ("Federico II\) Le moderne GPU C42009 81 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingGouraud shading
Vertex shader
Trasforma il verticeCalcola l'attenuazioneCalcola i tre contributi del modello di Phong
Fragment shader
Riceve l'intensit�a del vertice interpolataAssegna il colore del frammento in base a questa
Nota: Il prossimo esempio emula una point light come da pipeline �ssa
A. Theodorou ("Federico II\) Le moderne GPU C42009 82 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingVertex shader (1/3)
�
vary ing vec4 i n t e n s i t y ;
void main ( void )f
vec4 ambientG loba l , ambient , d i f f u s e ;vec3 ecPos , normal , l i g h tD i r , h a l fVe c t o r , aux ;f l o a t NdotL , NdotHV , d i s t , a t t ;
ecPos = vec3 ( g l Mode lV iewMatr i x � g l V e r t e x ) ;normal = no rma l i z e ( g l No rma lMat r i x � g l Norma l ) ;aux = g l L i g h t S o u r c e [ 0 ] . p o s i t i o n . xyz � ecPos ;d i s t = l e n g t h ( aux ) ;l i g h t D i r = no rma l i z e ( aux ) ;
� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 83 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingVertex shader (2/3)
�
a t t = 1 .0 / ( g l L i g h t S o u r c e [ 0 ] . c o n s t a n tA t t e nua t i o n+ g l L i g h t S o u r c e [ 0 ] . l i n e a r A t t e n u a t i o n � d i s t+ g l L i g h t S o u r c e [ 0 ] . q u a d r a t i cA t t e n u a t i o n � d i s t � d i s t ) ;
amb i en tG loba l = g l L i gh tMode l . ambient� g l F r o n tMa t e r i a l . ambient ;
ambient = g l L i g h t S o u r c e [ 0 ] . ambient� g l F r o n tMa t e r i a l . ambient ;
i n t e n s i t y = amb i en tG loba l + ambient � a t t ;
d i f f u s e = g l L i g h t S o u r c e [ 0 ] . d i f f u s e� g l F r o n tMa t e r i a l . d i f f u s e ;
� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 84 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingVertex shader (3/3)
�
NdotL = max( dot ( normal , l i g h t D i r ) , 0 . 0 ) ;
i f ( NdotL > 0 . 0 ) fh a l f V e c t o r = no rma l i z e ( l i g h t D i r + no rma l i z e ( ecPos ) ) ;i n t e n s i t y += a t t � ( d i f f u s e � NdotL ) ;NdotHV = max( dot ( normal , h a l f V e c t o r ) , 0 . 0 ) ;i n t e n s i t y += a t t � g l L i g h t S o u r c e [ 0 ] . s p e c u l a r
� g l F r o n tMa t e r i a l . s p e c u l a r� pow(NdotHV , g l F r o n tMa t e r i a l . s h i n i n e s s ) ;
g
g l P o s i t i o n = f t r a n s f o rm ( ) ;g l TexCoord [ 0 ] = g l T e x t u r eMa t r i x [ 0 ] � g l Mu l t iTexCoord0 ;
g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 85 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingFragment shader
�
vary ing vec4 i n t e n s i t y ;uniform sampler2D Tex0 ;
void main ( void )f
vec4 colorMap = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;g l F r a gCo l o r = i n t e n s i t y � colorMap ;
g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 86 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingScreenshot
(a) GLSL parallax (b) GLSL multilight
Per-pixel lighting
A. Theodorou ("Federico II\) Le moderne GPU C42009 87 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingPhong shading
Vertex shader
Trasforma il verticeCalcola il valore del contributo d'ambiente e quello di�uso di partenza
Fragment shader
Riceve la normale e l'eye vector interpolatiCalcola l'attenuazioneCalcola i tre contributi �nali del modello di PhongCalcola il valore di intensit�a luminosa del frammentoAssegna il colore del frammento in base a questo
A. Theodorou ("Federico II\) Le moderne GPU C42009 88 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingVertex shader (1/2)
�
vary ing vec4 ambientG loba l , ambient , d i f f u s e ;vary ing vec3 normal , ecPos ;
void main ( void )f
normal = g l No rma lMat r i x � g l Norma l ;ecPos = vec3 ( g l Mode lV iewMatr i x � g l V e r t e x ) ;
amb i en tG loba l = g l L i gh tMode l . ambient� g l F r o n tMa t e r i a l . ambient ;
� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 89 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingVertex shader (2/2)
�
amb i en tG loba l = g l L i gh tMode l . ambient� g l F r o n tMa t e r i a l . ambient ;
ambient = g l L i g h t S o u r c e [ 0 ] . ambient� g l F r o n tMa t e r i a l . ambient ;
d i f f u s e = g l L i g h t S o u r c e [ 0 ] . d i f f u s e� g l F r o n tMa t e r i a l . d i f f u s e ;
g l P o s i t i o n = f t r a n s f o rm ( ) ;g l TexCoord [ 0 ] = g l T e x t u r eMa t r i x [ 0 ] � g l Mu l t iTexCoord0 ;
g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 90 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingFragment shader (1/3)
�
vary ing vec3 normal , ecPos ;vary ing vec4 ambientG loba l , ambient , d i f f u s e ;uniform sampler2D Tex0 ;
void main ( void )f
vec3 n , aux , l i g h tD i r , r e fVec ;f l o a t NdotL , RdotE ;f l o a t d i s t , a t t ;
vec4 colorMap = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 91 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingFragment shader (2/3)
�
n = no rma l i z e ( normal ) ;aux = g l L i g h t S o u r c e [ 0 ] . p o s i t i o n . xyz � ecPos ;d i s t = l e n g t h ( aux ) ;l i g h t D i r = no rma l i z e ( aux ) ;
a t t = 1 .0 / ( g l L i g h t S o u r c e [ 0 ] . c o n s t a n tA t t e nua t i o n+ g l L i g h t S o u r c e [ 0 ] . l i n e a r A t t e n u a t i o n � d i s t+ g l L i g h t S o u r c e [ 0 ] . q u a d r a t i cA t t e n u a t i o n � d i s t � d i s t ) ;
g l F r a gCo l o r = amb ien tG loba l + ambient � a t t ;
NdotL = dot (n , l i g h t D i r ) ;� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 92 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingFragment shader (3/3)
�
i f ( NdotL > 0 . 0 ) fg l F r a gCo l o r += a t t � ( d i f f u s e � NdotL ) ;r e fVec = r e f l e c t (� l i g h tD i r , n ) ;RdotE = dot ( re fVec , no rma l i z e (�ecPos ) ) ;g l F r a gCo l o r += a t t � g l L i g h t S o u r c e [ 0 ] . s p e c u l a r
� g l F r o n tMa t e r i a l . s p e c u l a r� pow(RdotE , g l F r o n tMa t e r i a l . s h i n i n e s s ) ;
g
g l F r a gCo l o r �= colorMap ;g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 93 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingScreenshot
(c) GLSL parallax (d) GLSL multilight
Per-vertex lighting
A. Theodorou ("Federico II\) Le moderne GPU C42009 94 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingSpecular mapping
Come per il Phong shading, ma in pi�u:
Fragment shader
Esegue il fetch della glossmapModula il costributo speculare secondo la texture precedente
A. Theodorou ("Federico II\) Le moderne GPU C42009 95 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingFragment shader
�
uniform sampler2D Tex1 ;[ . . . ]vec4 glossMap = tex tu re2D (Tex1 , g l TexCoord [ 0 ] . s t ) ;[ . . . ]i f ( NdotL > 0 . 0 ) f
[ . . . ]vec4 spec = a t t � [ . . . ] � pow ( . . . ) ;spec �= glossMap ;g l F r a gCo l o r += spec ;
g[ . . . ]� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 96 / 152
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingScreenshot
A. Theodorou ("Federico II\) Le moderne GPU C42009 97 / 152
Sorgenti di esempi Normal e parallax mapping
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 98 / 152
Sorgenti di esempi Normal e parallax mapping
Normal e parallax mappingTangent space
A. Theodorou ("Federico II\) Le moderne GPU C42009 99 / 152
Sorgenti di esempi Normal e parallax mapping
Normal e parallax mappingNormal mapping
Come per il Phong shading, ma in pi�u:
Vertex shader
Riceve il vettore della tangente dall'applicazioneCalcola il vettore binormale e la matrice TBNTrasforma la normale, il light e l'eye vector secondo la matrice TBN
Fragment shader
Esegue il fetch della normalmapRiporta il valore letto dall'intervallo [0..1] all'intervallo [-1..1]Assegna tale valore alla variabile stabilita per la normale
A. Theodorou ("Federico II\) Le moderne GPU C42009 100 / 152
Sorgenti di esempi Normal e parallax mapping
Normal e parallax mappingVertex shader
�
a t t r i bu te vec3 objTan ;[ . . . ]vec3 t angen t = no rma l i z e ( g l No rma lMat r i x � objTan ) ;vec3 b ino rma l = c r o s s ( normal , t angen t ) ;mat3 tbnMat r i x = mat3( tangen t . x , b i no rma l . x , normal . x ,
t angen t . y , b i no rma l . y , normal . y ,t angen t . z , b i no rma l . z , normal . z ) ;
[ . . . ]l i g h t D i r = tbnMat r i x � l i g h t D i r ;ecPos = tbnMat r i x � ecPos ;
[ . . . ]� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 101 / 152
Sorgenti di esempi Normal e parallax mapping
Normal e parallax mappingFragment shader
�
uniform sampler2D Tex2 ;[ . . . ]vec4 normalMap = textu re2D (Tex2 , g l TexCoord [ 0 ] . s t ) ;normal = no rma l i z e ( 2 . 0 � normalMap . rgb � 1 . 0 ) ;
[ . . . ]� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 102 / 152
Sorgenti di esempi Normal e parallax mapping
Normal e parallax mappingScreenshot
A. Theodorou ("Federico II\) Le moderne GPU C42009 103 / 152
Sorgenti di esempi Normal e parallax mapping
Normal e parallax mappingTeoria sul parallax mapping
Si correggono le coordinate del texture fetch per riferirsi al punto B
Ma c'�e bisogno di una nuova informazione: l'altezza del pixel
A. Theodorou ("Federico II\) Le moderne GPU C42009 104 / 152
Sorgenti di esempi Normal e parallax mapping
Normal e parallax mappingParallax mapping
Come per il normal mapping, ma in pi�u:
Fragment shader
Esegue il fetch della heightmap con le texcoord reali del pixelScala e trasla l'altezza secondo coe�cienti empiriciSposta le nuove texcoord verso l'osservatore secondo il valoreprecedente
A. Theodorou ("Federico II\) Le moderne GPU C42009 105 / 152
Sorgenti di esempi Normal e parallax mapping
Normal e parallax mappingFragment shader
�
[ . . . ]vec2 TexCoord ;f l o a t h e i g h t ;f l o a t s c a l e = 0 . 0 4 ;f l o a t b i a s = 0 . 0 2 ;
h e i g h t = s c a l e � t ex tu re2D (Tex2 , g l TexCoord [ 0 ] . s t ) . a� b i a s ;
TexCoord = g l TexCoord [ 0 ] . s t + he i g h t� no rma l i z e ( ecPos ) . xy ;
[ . . . ]� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 106 / 152
Sorgenti di esempi Normal e parallax mapping
Normal e parallax mappingScreenshot
A. Theodorou ("Federico II\) Le moderne GPU C42009 107 / 152
Sorgenti di esempi Toon shading
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 108 / 152
Sorgenti di esempi Toon shading
Toon shadingImplementazione
Requisiti:
Frame Bu�er Object (per il post-processing in screen space)Multiple Render Targets (per memorizzare le normali al primo passo)
1� passo
Si discretizza l'intensit�a luminosa in pochi valori ammessiSi memorizzano in una texture i vettori delle normali in eye-space
2� passo
Si applica l'operatore di Sobel ad una versione a scala di grigi dellatexture precedenteSi evidenziano i contorni secondo un valore di soglia e spessore
A. Theodorou ("Federico II\) Le moderne GPU C42009 109 / 152
Sorgenti di esempi Toon shading
Toon shading1� passo, fragment shader (1/2)
�
vary ing vec3 normal , ecPos ;uniform sampler2D Tex0 ;
void main ( void )f
vec3 n , l i g h t D i r ;f l o a t NdotL ;
vec4 colorMap = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;
n = no rma l i z e ( normal ) ;l i g h t D i r = no rma l i z e ( g l L i g h t S o u r c e [ 0 ] . p o s i t i o n . xyz� ecPos ) ;
NdotL = dot (n , l i g h t D i r ) ;� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 110 / 152
Sorgenti di esempi Toon shading
Toon shading1� passo, fragment shader (2/2)
�
g l F ragData [ 0 ] = vec4 ( 0 . 0 ) ;
i f ( NdotL > 0 . 95 )g l F ragData [ 0 ] = vec4 ( 1 . 0 ) ;
e l s e i f ( NdotL > 0 . 5 )g l F ragData [ 0 ] = vec4 ( 0 . 7 5 ) ;
e l s e i f ( NdotL > 0 . 25 )g l F ragData [ 0 ] = vec4 ( 0 . 5 ) ;
e l s e i f ( NdotL > 0 . 0 )g l F ragData [ 0 ] = vec4 ( 0 . 2 5 ) ;
g l F ragData [ 0 ] �= colorMap ;g l F ragData [ 1 ] = vec4 (n , 1 . 0 ) ;
g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 111 / 152
Sorgenti di esempi Toon shading
Toon shading2� passo, fragment shader (1/3)
�
uniform in t Width , He ight ;uniform f l o a t Th i ckne s s ;uniform f l o a t Thre sho ld ;uniform sampler2D Tex0 , Tex1 ;
void main ( void )f
vec2 ox = vec2 ( Th i ckne s s / f l o a t (Width ) , 0 . 0 ) ;vec2 oy = vec2 ( 0 . 0 , Th i ckne s s / f l o a t ( He ight ) ) ;vec2 uv = g l TexCoord [ 0 ] . s t ;mat3 gray ;
� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 112 / 152
Sorgenti di esempi Toon shading
Toon shading2� passo, fragment shader (2/3)
�
i n t i , j ;vec2 PP = uv � oy ;f o r ( i = 0 ; i < 3 ; i++) f
gray [ i ] [ 0 ] = dot ( t ex tu re2D (Tex1 , PP � ox ) . rgb , vec3 ( 1 . 0 / 3 . 0 ) ) ;g ray [ i ] [ 1 ] = dot ( t ex tu re2D (Tex1 , PP ) . rgb , vec3 ( 1 . 0 / 3 . 0 ) ) ;g ray [ i ] [ 2 ] = dot ( t ex tu re2D (Tex1 , PP + ox ) . rgb , vec3 ( 1 . 0 / 3 . 0 ) ) ;PP += oy ;
g
mat3 K;K [ 0 ] [ 0 ] =�1.0; K [ 0 ] [ 1 ] =�2.0; K [ 0 ] [ 2 ] =�1.0;K [ 1 ] [ 0 ] = 0 . 0 ; K [ 1 ] [ 1 ] = 0 . 0 ; K [ 1 ] [ 2 ] = 0 . 0 ;K [ 2 ] [ 0 ] = 1 . 0 ; K [ 2 ] [ 1 ] = 2 . 0 ; K [ 2 ] [ 2 ] = 1 . 0 ;
� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 113 / 152
Sorgenti di esempi Toon shading
Toon shading2� passo, fragment shader (3/3)
�
f l o a t sx = 0 . 0 ;f l o a t sy = 0 . 0 ;f o r ( i = 0 ; i < 3 ; i++) f
f o r ( j = 0 ; j < 3 ; j++) fsx += gray [ i ] [ j ] � K[ i ] [ j ] ;sy += gray [ i ] [ j ] � K[ j ] [ i ] ;
ggf l o a t d i s t = s q r t ( sx � sx + sy � sy ) ;
i f ( d i s t > Thre sho ld )g l F r a gCo l o r = vec4 ( 0 . 0 ) ;
e l s eg l F r a gCo l o r = textu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;
g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 114 / 152
Sorgenti di esempi Toon shading
Toon shadingScreenshot
(a) Untextured (b) Textured
(c) Grey normal (d) Edges
A. Theodorou ("Federico II\) Le moderne GPU C42009 115 / 152
Sorgenti di esempi Toon shading
Toon shadingScreenshot
(e) Final
A. Theodorou ("Federico II\) Le moderne GPU C42009 116 / 152
Sorgenti di esempi Depth of �eld
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 117 / 152
Sorgenti di esempi Depth of �eld
Depth of �eldTeoria
x 0=a = s=d ! x 0 = a(s=d)
x 00=a = (s � f )=f ! x 00 = a(s � f )=f = a(s=f � 1)
jx 00 � x 0j = a� sf� 1
�� a
s
d= a
�s
�1
f�
1
d
�� 1
�
A. Theodorou ("Federico II\) Le moderne GPU C42009 118 / 152
Sorgenti di esempi Depth of �eld
Depth of �eldImplementazione
Si compone di 5 passi ed utilizza 4 Frame Bu�er Object
1� passo: rendering della scena in un FBO e calcolo della quantit�a diblur
2� passo: downsampling in un altro FBO avente 1/4 delle dimensionidel precedente
3� passo: applicazione del �ltro gaussiano lungo l'asse X
4� passo: applicazione del �ltro gaussiano lungo l'asse Y
5� passo: interpolazione lineare tra la scena originale e quella ridottae sfumata
A. Theodorou ("Federico II\) Le moderne GPU C42009 119 / 152
Sorgenti di esempi Depth of �eld
Depth of �eld1� passo, vertex shader
�
uniform f l o a t f o c a lD i s t a n c e , f o ca lRange ;vary ing f l o a t Blu r ;
void main ( void )f
vec4 PosWV = gl Mode lV iewMatr i x � g l V e r t e x ;
B lu r = clamp ( abs(�PosWV. z � f o c a lD i s t a n c e )/ foca lRange , 0 . 0 , 1 . 0 ) ;
g l P o s i t i o n = f t r a n s f o rm ( ) ;g l TexCoord [ 0 ] = g l T e x t u r eMa t r i x [ 0 ] � g l Mu l t iTexCoord0 ;
g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 120 / 152
Sorgenti di esempi Depth of �eld
Depth of �eld1� passo, fragment shader
�
vary ing f l o a t Blu r ;uniform sampler2D Tex0 ;
void main ( void )f
g l F ragData [ 0 ] = vec4 ( t ex tu re2D(Tex0 , g l TexCoord [ 0 ] . s t ) . rgb , B lu r ) ;
g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 121 / 152
Sorgenti di esempi Depth of �eld
Depth of �eld5� passo, fragment shader
�
uniform sampler2D Tex0 , Tex1 ;
void main ( void )f
vec4 F u l l r e s = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;vec4 B lu r r e d = tex tu re2D (Tex1 , g l TexCoord [ 1 ] . s t ) ;
g l F r a gCo l o r = F u l l r e s + F u l l r e s . a� ( B l u r r e d � F u l l r e s ) ;
g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 122 / 152
Sorgenti di esempi Depth of �eld
Depth of FieldScreenshot
(a) Depth of Field (b) Quantit�a di blur
A. Theodorou ("Federico II\) Le moderne GPU C42009 123 / 152
Sorgenti di esempi Depth of �eld
Depth of FieldScreenshot
(d) Normal + Parallax + DoFA. Theodorou ("Federico II\) Le moderne GPU C42009 124 / 152
Sorgenti di esempi Deferred shading
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 125 / 152
Sorgenti di esempi Deferred shading
Deferred shadingConfronto (1/3)
Single-pass, multi-light
Per ogni oggetto:renderizzo l'oggetto ed applico l'illuminazione in un solo shader
Spreco di shading nel caso di super�ci invisibili
Mal si integra con le tecniche di shadowing
Poche luci gestibili contemporaneamente
C'�e bisogno di uno shader diverso per ogni combinazione
A. Theodorou ("Federico II\) Le moderne GPU C42009 126 / 152
Sorgenti di esempi Deferred shading
Deferred shadingConfronto (2/3)
Multi-pass, multi-light
Per ogni luce:Per ogni oggetto in uenzato:
aggiungo al framebu�er il contributo della luce sull'oggetto
Spreco di shading nel caso di super�ci invisibili
Le chiamate alla funzioni di disegno possono essere ancheN(luci)� N(oggetti)
Molto lavoro ripetuto (trasformazione dei vertici, ...)
A. Theodorou ("Federico II\) Le moderne GPU C42009 127 / 152
Sorgenti di esempi Deferred shading
Deferred shadingConfronto (3/3)
Deferred shading
Per ogni oggetto:memorizzo gli attributi che servono a calcolare l'illuminazione nel \G-bu�er"
Per ogni luce:aggiungo al framebu�er il contributo della luce tramite il G-bu�er
Sempli�ca la gestione dell'illuminazione (un solo shader permemorizzare gli attributi)
Si integra bene con le tecniche di shadowing
Le chiamate alle funzioni di disegno sono al pi�u N(luci) + N(oggetti)
L'illuminazione diventa un lavoro di post-processing in screen space
Stesso lavoro per calcolare l'illuminazione di una luce grande o ditante piccole
A. Theodorou ("Federico II\) Le moderne GPU C42009 128 / 152
Sorgenti di esempi Deferred shading
Deferred shadingImplementazione
Requisiti:
Texture oating point (per la posizione)Multiple Render Targets (per scrivere tutti gli attributicontemporaneamente)Floating-point blending (per il compositing)
Passi:
Si ricavano gli attributi per ogni verticeSi interpolano per frammento e si scrivono nel G-bu�erSi utilizza il G-bu�er per l'illuminazione
A. Theodorou ("Federico II\) Le moderne GPU C42009 129 / 152
Sorgenti di esempi Deferred shading
Deferred shadingI due fragment shader�
vary ing vec3 p o s i t i o n , normal ;uniform sampler2D Tex0 ;
void main ( void )f
g l F ragData [ 0 ] = vec4 ( p o s i t i o n . xyz , 1 . 0 ) ;g l F ragData [ 1 ] = vec4 ( no rma l i z e ( normal . xyz ) , 0 . 0 ) ;g l F ragData [ 2 ] = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;
g� ��
uniform sampler2D Tex0 , Tex1 , Tex2 ;[ . . . ]vec3 ecPos = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) . xyz ;vec3 normal = tex tu re2D (Tex1 , g l TexCoord [ 1 ] . s t ) . xyz ;vec4 colorMap = tex tu re2D (Tex2 , g l TexCoord [ 2 ] . s t ) ;[ . . . ]
� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 130 / 152
Sorgenti di esempi Deferred shading
Deferred shadingScreenshot
A. Theodorou ("Federico II\) Le moderne GPU C42009 131 / 152
Sorgenti di esempi High Dynamic Range Imaging
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging
A. Theodorou ("Federico II\) Le moderne GPU C42009 132 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRITeoria
Immagini dal rapporto di contrasto molto elevato
Consente un'impostazione accurata dei valori di esposizione
Si presta facilmente all'utilizzo con algoritmi di adattamentotemporale dell'esposizione
Permette di implementare un e�etto di bloom (o glow) realistico
Per la visualizzazione a schermo �e fondamentale il tone-mapping
A. Theodorou ("Federico II\) Le moderne GPU C42009 133 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRIEsempio (HL2: Lost Coast)
(a) Rendering sottoespostoA. Theodorou ("Federico II\) Le moderne GPU C42009 134 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRIEsempio (HL2: Lost Coast)
(b) Rendering ad esposizione normaleA. Theodorou ("Federico II\) Le moderne GPU C42009 135 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRIEsempio (HL2: Lost Coast)
(c) Rendering sovraespostoA. Theodorou ("Federico II\) Le moderne GPU C42009 136 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRIEsempio (HL2: Lost Coast)
(d) Split view
A. Theodorou ("Federico II\) Le moderne GPU C42009 137 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRIPrima implementazione
Si compone di 5 passi ed utilizza 4 Frame Bu�er Object oating-point
1� passo: rendering della scena in un FBO (quad texturizzata con unalight probe HDR)
2� passo: downsampling in un FBO ridotto a 1/4 ed applicazione�ltro high-pass
3� passo: applicazione del �ltro gaussiano lungo l'asse X
4� passo: applicazione del �ltro gaussiano lungo l'asse Y
5� passo: tone-mapping e composizione
A. Theodorou ("Federico II\) Le moderne GPU C42009 138 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRI2� passo, fragment shader
�
uniform sampler2D Tex0 ;
void main ( void )f
vec4 colorMap = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;
i f ( colorMap . r > 1 .0 j j colorMap . g > 1 .0j j colorMap . b > 1 . 0 ) fg l F r a gCo l o r = colorMap ;
ge l s e f
g l F r a gCo l o r = vec4 ( 0 . 0 ) ;g
g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 139 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRI3� e 4� passo, fragment shader�
uniform f l o a t O f f s e t s [ 9 ] ;uniform f l o a t Weights [ 9 ] ;
uniform sampler2D Tex0 ;
void main ( void )f
i n t i ;vec4 c o l o r = vec4 ( 0 . 0 , 0 . 0 , 0 . 0 , 1 . 0 ) ;
f o r ( i =0; i <9; i++) fc o l o r += ( tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t+ vec2 ( O f f s e t s [ i ] , 0 . 0 ) ) � Weights [ i ] ) ;
g
g l F r a gCo l o r = co l o r ;g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 140 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRI5� passo, fragment shader�
uniform f l o a t Fac to r ;uniform f l o a t Exposure ;uniform f l o a t Gamma;
uniform sampler2D Tex0 ;uniform sampler2D Tex1 ;
void main ( void )f
vec4 colorMap = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;vec4 bloomMap = tex tu re2D (Tex1 , g l TexCoord [ 0 ] . s t ) ;
g l F r a gCo l o r = colorMap + Fac to r � ( bloomMap � colorMap ) ;
g l F r a gCo l o r �= Exposure ;g l F r a gCo l o r = pow( g l F r a gCo l o r , vec4 (Gamma ) ) ;
g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 141 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRIScreenshot prima implementazione
(e) Rendering sottoesposto (f) Rendering sovraesposto
A. Theodorou ("Federico II\) Le moderne GPU C42009 142 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRISeconda implementazione
Si compone di 7 passi ed utilizza 5+n Frame Bu�er Object oating-point
1� passo: rendering della scena in un FBO (quad texturizzata con unalight probe HDR)
2� passo: calcolo della luminanza media e massima della scena in pi�upassaggi
3� passo: applicazione di un �ltro bright pass
4� passo: applicazione del �ltro gaussiano lungo l'asse X
5� passo: applicazione del �ltro gaussiano lungo l'asse Y
6� passo: tone-mapping
7� passo: aggiunta dello strato per l'e�etto di glow
A. Theodorou ("Federico II\) Le moderne GPU C42009 143 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRI2� passo, fragment shader (1/2)
�
uniform in t Width ;uniform in t Height ;uniform sampler2D Tex0 ;
const vec2 o f f s e t 2 x 2 = vec2 (�0.5 , 0 . 5 ) ;const vec3 LUMINANCE = vec3 ( 0 . 299 , 0 . 587 , 0 . 1 1 4 ) ;
void main ( void )f
i n t x , y ;f l o a t ave rage = 0 . 0 ;f l o a t maximum = �1e20 ;vec4 c o l o r = vec4 ( 0 . 0 ) ;
� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 144 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRI2� passo, fragment shader (2/2)
�
f o r ( x=0; x<2; x++) ff o r ( y=0; y<2; y++) fvec2 o f f s e t = vec2 ( o f f s e t 2 x 2 [ x ] � ( 1 . 0/ f l o a t (Width ) ) ,
o f f s e t 2 x 2 [ y ] � ( 1 . 0/ f l o a t ( He ight ) ) ) ;c o l o r = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t + o f f s e t ) ;
f l o a t GreyValue = dot ( c o l o r . rgb , LUMINANCE) ;maximum = max(maximum , GreyVa lue ) ;ave r age += log (1 e�5 + GreyValue ) / 4 . 0 ;
gg
ave rage = exp ( ave rage ) ;g l F r a gCo l o r = vec4 ( average , maximum , 0 . 0 , 1 . 0 ) ;
g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 145 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRI3� passo, fragment shader (1/2)
�
uniform f l o a t Exposure ;uniform f l o a t Thre sho ld ;
uniform sampler2D Tex0 ;uniform sampler2D Tex1 ;
const vec3 LUMINANCE = vec3 ( 0 . 299 , 0 . 587 , 0 . 1 1 4 ) ;
void main ( void )f
f l o a t lum , sca leLum ;
vec4 c o l o r = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;vec4 l c = tex tu re2D (Tex1 , vec2 ( 0 . 5 , 0 . 5 ) ) ;
� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 146 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRI3� passo, fragment shader (2/2)
�
lum = dot ( c o l o r . rgb , LUMINANCE) ;
sca leLum = ( lum � Exposure ) / l c . r ;c o l o r . rgb �= ( scaleLum �
( 1 . 0 + ( sca leLum / ( l c . g � l c . g ) ) ) ) / ( 1 . 0 + scaleLum ) ;c o l o r . rgb �= Thresho ld ;c o l o r . rgb = max( c o l o r . rgb , 0 . 0 ) ;
g l F r a gCo l o r = co l o r ;g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 147 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRI6� passo, fragment shader (1/2)
�
uniform f l o a t Exposure ;uniform sampler2D Tex0 ;uniform sampler2D Tex1 ;
void main ( void )f
f l o a t Lp , LmSqr , t o n eS c a l a r ;
vec4 c o l o r = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;vec4 l = tex tu re2D (Tex1 , vec2 ( 0 . 5 , 0 . 5 ) ) ;
� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 148 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRI6� passo, fragment shader (2/2)
�
Lp = ( Exposure / l . r ) �max( c o l o r . r , max( c o l o r . g , c o l o r . b ) ) ;
LmSqr = ( l . g � l . g ) � ( l . g � l . g ) ;t o n eS c a l a r = (Lp � ( 1 . 0 + (Lp / (LmSqr ) ) ) ) / ( 1 . 0 + Lp ) ;
c o l o r . rgb �= ton eS c a l a r ;
g l F r a gCo l o r = co l o r ;g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 149 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRI7� passo, fragment shader
�
uniform sampler2D Tex0 ;uniform sampler2D Tex1 ;
void main ( void )f
vec4 c o l o r = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;c o l o r . rgb += textu re2D (Tex1 , g l TexCoord [ 0 ] . s t ) . rgb ;
g l F r a gCo l o r = co l o r ;g� �
A. Theodorou ("Federico II\) Le moderne GPU C42009 150 / 152
Sorgenti di esempi High Dynamic Range Imaging
HDRIScreenshot seconda implementazione
(g) Rendering sottoesposto (h) Rendering sovraesposto
A. Theodorou ("Federico II\) Le moderne GPU C42009 151 / 152
Approfondimenti
ApprofondimentiAlcuni link interessanti
http://www.khronos.org/opengl/
http://www.3dshaders.com/home/
http://www.lighthouse3d.com/opengl/glsl/
http://www.codesampler.com/oglsrc.htm
http://www.humus.ca/index.php?page=3D
http://www.clockworkcoders.com/oglsl/index.html
http://www.ozone3d.net/tutorials/
http://http.developer.nvidia.com/GPUGems/gpugems part01.html
http://http.developer.nvidia.com/GPUGems2/gpugems2 part01.html
http://http.developer.nvidia.com/GPUGems3/gpugems3 part01.html
http://encelo.netsons.org/programming/opengl
http://encelo.netsons.org/blog
A. Theodorou ("Federico II\) Le moderne GPU C42009 152 / 152