Upload
angelo-theodorou
View
852
Download
6
Embed Size (px)
DESCRIPTION
Le Moderne GPU: Cosa è possibile fare oggi e cenni su come farlo. Presentata a Napoli durante il Linux Day 2009 il giorno 24 Ottobre 2009. Versione ridotta ed aggiornata di quella presentata in aula C4.
Citation preview
Le moderne GPU
Cosa �e possibile fare oggi e cenni su come farlo
Angelo "Encelo\ Theodorou
Linux Day 2009
24 Ottobre 2009
A. Theodorou (LD2009) Le moderne GPU 24/10/09 1 / 105
Sommario
Sommario
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneGL Shading Language 1.20
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 2 / 105
Sommario
Sommario
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneGL Shading Language 1.20
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 2 / 105
Sommario
Sommario
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneGL Shading Language 1.20
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 2 / 105
Sommario
Sommario
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneGL Shading Language 1.20
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 2 / 105
Introduzione Primo approccio
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneGL Shading Language 1.20
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 3 / 105
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Tessellation engine (SM 5.0)
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 (LD2009) Le moderne GPU 24/10/09 4 / 105
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Tessellation engine (SM 5.0)
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 (LD2009) Le moderne GPU 24/10/09 4 / 105
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Tessellation engine (SM 5.0)
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 (LD2009) Le moderne GPU 24/10/09 4 / 105
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Tessellation engine (SM 5.0)
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 (LD2009) Le moderne GPU 24/10/09 4 / 105
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Tessellation engine (SM 5.0)
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 (LD2009) Le moderne GPU 24/10/09 4 / 105
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Tessellation engine (SM 5.0)
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 (LD2009) Le moderne GPU 24/10/09 4 / 105
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Tessellation engine (SM 5.0)
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 (LD2009) Le moderne GPU 24/10/09 4 / 105
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Tessellation engine (SM 5.0)
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 (LD2009) Le moderne GPU 24/10/09 4 / 105
Introduzione Primo approccio
Primo aprroccioLa GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni�cata)
Tessellation engine (SM 5.0)
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 (LD2009) Le moderne GPU 24/10/09 4 / 105
Introduzione Primo approccio
Primo approccioLa pipeline �ssa
A. Theodorou (LD2009) Le moderne GPU 24/10/09 5 / 105
Introduzione Primo approccio
Primo approccioLa pipeline programmabile (SM 4.0)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 6 / 105
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 quattro fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
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 quattro fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
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 quattro fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
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 quattro fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
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 quattro fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
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 quattro fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
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 quattro fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
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 quattro fasi distinte:
Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
Introduzione Primo approccio
Primo approccioLo stream processor
Esegue un qualsiasi tipo 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 (LD2009) Le moderne GPU 24/10/09 8 / 105
Introduzione Primo approccio
Primo approccioLo stream processor
Esegue un qualsiasi tipo 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 (LD2009) Le moderne GPU 24/10/09 8 / 105
Introduzione Primo approccio
Primo approccioLo stream processor
Esegue un qualsiasi tipo 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 (LD2009) Le moderne GPU 24/10/09 8 / 105
Introduzione Primo approccio
Primo approccioLo stream processor
Esegue un qualsiasi tipo 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 (LD2009) Le moderne GPU 24/10/09 8 / 105
Introduzione Primo approccio
Primo approccioLo stream processor
Esegue un qualsiasi tipo 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 (LD2009) Le moderne GPU 24/10/09 8 / 105
Introduzione Primo approccio
Primo approccioArchitettura a shader uni�cati
Figura: Architettura discreta
Figura: Architettura uni�cataA. Theodorou (LD2009) Le moderne GPU 24/10/09 9 / 105
Introduzione Primo approccio
Primo approccioTassellazione
(a) Wireframe senza tassellazione (b) Wireframe con tassellazione
A. Theodorou (LD2009) Le moderne GPU 24/10/09 10 / 105
Introduzione Panoramica storica
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneGL Shading Language 1.20
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 11 / 105
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)
8� Generazione (2009): Tassellazione programmabile (SM 5.0)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 12 / 105
Introduzione Panoramica storica
Panoramica storicaLe prime generazioni
OpenGL 1.1 e Direct3D 5.001/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.3 e Direct3D 7.001/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.4 e Direct3D 8.0/8.101/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)
(c)NV3
(d)NV4
(e)Rage128
(f)NV10
(g)R100
(h)NV15
(i) NV20 (j)R200
(k)NV25
A. Theodorou (LD2009) Le moderne GPU 24/10/09 13 / 105
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
(l) R300 (m) NV30 (n) R420
A. Theodorou (LD2009) Le moderne GPU 24/10/09 14 / 105
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
(o) NV40 (p) G70 (q) R520
A. Theodorou (LD2009) Le moderne GPU 24/10/09 15 / 105
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
(r) G80 (s)R600XT
(t) G92
A. Theodorou (LD2009) Le moderne GPU 24/10/09 16 / 105
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
(u)RV670XT
(v) G200 (w)RV770XT
A. Theodorou (LD2009) Le moderne GPU 24/10/09 17 / 105
Introduzione Panoramica storica
Panoramica storicaL'ottava generazione
23/09/2009: ATI Radeon HD5870 (R870, 2150M transistor)xx/xx/2010: Nvidia Fermi (G300, 3000M transistor)! OpenGL 2.1/3.2 e Direct3D 11
Shader Model 5.0
Tesselletion engine
Incremento nelle performance doppia precisione
(x) RV870 (y) G300
A. Theodorou (LD2009) Le moderne GPU 24/10/09 18 / 105
La GPU in azione Potenza elaborativa
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneGL Shading Language 1.20
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 19 / 105
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 3200RV870 (HD5870) 1600 sp 2154 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.8RV870 (HD5870) 2720 544 153.6GT200b (GTX285) 1209.5 88.8 159R700 (HD4870X2) 2400 480 115.2x2GT200b (GTX295) 1788 131.3 111.9x2
A. Theodorou (LD2009) Le moderne GPU 24/10/09 20 / 105
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 (LD2009) Le moderne GPU 24/10/09 21 / 105
La GPU in azione Potenza elaborativa
Potenza elaborativaLegge di Moore
A. Theodorou (LD2009) Le moderne GPU 24/10/09 22 / 105
La GPU in azione Applicazioni general purpose
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneGL Shading Language 1.20
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 23 / 105
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 (LD2009) Le moderne GPU 24/10/09 24 / 105
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 (LD2009) Le moderne GPU 24/10/09 25 / 105
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 (LD2009) Le moderne GPU 24/10/09 26 / 105
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUNvidia Gelato
Renderer ad accelerazione hardware non in tempo reale
A. Theodorou (LD2009) Le moderne GPU 24/10/09 27 / 105
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUFurryball
Renderer GPU in tempo reale per Autodesk MayaA. Theodorou (LD2009) Le moderne GPU 24/10/09 28 / 105
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUOpenVIDIA
Computer vision con supporto all'accelerazione della GPU
A. Theodorou (LD2009) Le moderne GPU 24/10/09 29 / 105
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUFluidodinamica
Calcolo del sistema di equazioni di�erenziali di Navier-Stokes sulla GPU
A. Theodorou (LD2009) Le moderne GPU 24/10/09 30 / 105
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 (LD2009) Le moderne GPU 24/10/09 31 / 105
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 (LD2009) Le moderne GPU 24/10/09 32 / 105
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 (LD2009) Le moderne GPU 24/10/09 33 / 105
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUPassword recovery
ElcomSoft Distributed Password Recovery
http://www.elcomsoft.com/edpr.html
A. Theodorou (LD2009) Le moderne GPU 24/10/09 34 / 105
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUNurien tech demo
Fisica dei capelli e degli abiti accelerata dalla GPU
A. Theodorou (LD2009) Le moderne GPU 24/10/09 35 / 105
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUFroblins Demo
L'IA degli oltre tremila agenti �e gestita dalla GPU
A. Theodorou (LD2009) Le moderne GPU 24/10/09 36 / 105
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUVideo encoder
Badaboom ed Avivo Converter sfruttano la GPU durante la codi�ca video
A. Theodorou (LD2009) Le moderne GPU 24/10/09 37 / 105
La GPU in azione Applicazioni general purpose
Applicazioni GPGPUUlteriori applicazioni
60 su 621 applicazioni dal sito CUDA Zone (Ottobre 2009)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 38 / 105
La GPU in azione Applicazioni tradizionali
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneGL Shading Language 1.20
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 39 / 105
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 (LD2009) Le moderne GPU 24/10/09 40 / 105
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 (LD2009) Le moderne GPU 24/10/09 40 / 105
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 (LD2009) Le moderne GPU 24/10/09 40 / 105
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 (LD2009) Le moderne GPU 24/10/09 40 / 105
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 (LD2009) Le moderne GPU 24/10/09 40 / 105
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 (LD2009) Le moderne GPU 24/10/09 40 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliFinal Night Round 3 (20/2/2006)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 41 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliGears of War (Unreal Engine 3, 9/11/2006)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 42 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliCrysis (CryEngine 2, 13/11/2007)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 43 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliAssassin's Creed (Scimitar Engine, 14/11/2007)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 44 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliMass E�ect (Unreal Engine 3, 20/11/2007)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 45 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliDead Space (Unreal Engine 3, 14/10/2008)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 46 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliFar Cry 2 (Dunia Engine, 21/10/2008)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 47 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliFallout 3 (Gamebryo Engine, 28/10/2008)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 48 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliMirror's Edge (Unreal Engine 3, 12/11/2008)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 49 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliPrince of Persia (Anvil Engine, 2/12/2008)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 50 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliKillzone 2 (25/2/2009)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 51 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliGhostbuster: The Videogame (Infernal Engine, 16/6/2009)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 52 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliBatman: Akrham Asylum (Unreal Engine 3, 25/8/2009)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 53 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliBorderlands (Unreal Engine 3, 20/10/2009)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 54 / 105
La GPU in azione Applicazioni tradizionali
Applicazioni tradizionaliR.A.G.E. (id Tech 5, 2010)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 55 / 105
Cenni sulla programmazione GL Shading Language 1.20
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneGL Shading Language 1.20
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 56 / 105
Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20Sommario
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 (LD2009) Le moderne GPU 24/10/09 57 / 105
Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20Tipi 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 (LD2009) Le moderne GPU 24/10/09 58 / 105
Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20Inizializzatori 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 (LD2009) Le moderne GPU 24/10/09 59 / 105
Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20Quali�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 (LD2009) Le moderne GPU 24/10/09 60 / 105
Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20Flusso 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 (LD2009) Le moderne GPU 24/10/09 61 / 105
Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20Swizzling
�
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 (LD2009) Le moderne GPU 24/10/09 62 / 105
Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20Operazioni 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 (LD2009) Le moderne GPU 24/10/09 63 / 105
Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20Funzioni 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 (LD2009) Le moderne GPU 24/10/09 64 / 105
Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20Funzioni 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 (LD2009) Le moderne GPU 24/10/09 65 / 105
Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20Variabili 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, ...
Nota: Dalla versione 1.40 in poi la maggior parte di esse �e disponibile solo in
modalit�a compatible
A. Theodorou (LD2009) Le moderne GPU 24/10/09 66 / 105
Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20Codice 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 ( ) ; // dep r e ca t ed d a l l a 1 .30
// 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 (LD2009) Le moderne GPU 24/10/09 67 / 105
Sorgenti di esempi Gouraud e Phong shading
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneGL Shading Language 1.20
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 68 / 105
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingBlinn-Phong re ection model
A. Theodorou (LD2009) Le moderne GPU 24/10/09 69 / 105
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 (LD2009) Le moderne GPU 24/10/09 70 / 105
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 (LD2009) Le moderne GPU 24/10/09 71 / 105
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 (LD2009) Le moderne GPU 24/10/09 72 / 105
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingVertex shader (3/3)
�
NdotL = dot ( normal , l i g h t D i r ) ;
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 = dot ( normal , h a l f V e c t o r ) ;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 (LD2009) Le moderne GPU 24/10/09 73 / 105
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 (LD2009) Le moderne GPU 24/10/09 74 / 105
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingScreenshot
(a) GLSL parallax (b) GLSL multilight
Per-pixel lighting
A. Theodorou (LD2009) Le moderne GPU 24/10/09 75 / 105
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 (LD2009) Le moderne GPU 24/10/09 76 / 105
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 (LD2009) Le moderne GPU 24/10/09 77 / 105
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 (LD2009) Le moderne GPU 24/10/09 78 / 105
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 (LD2009) Le moderne GPU 24/10/09 79 / 105
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 (LD2009) Le moderne GPU 24/10/09 80 / 105
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 (LD2009) Le moderne GPU 24/10/09 81 / 105
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingScreenshot
(c) GLSL parallax (d) GLSL multilight
Per-vertex lighting
A. Theodorou (LD2009) Le moderne GPU 24/10/09 82 / 105
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 (LD2009) Le moderne GPU 24/10/09 83 / 105
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 (LD2009) Le moderne GPU 24/10/09 84 / 105
Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shadingScreenshot
A. Theodorou (LD2009) Le moderne GPU 24/10/09 85 / 105
Sorgenti di esempi Normal e parallax mapping
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneGL Shading Language 1.20
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 86 / 105
Sorgenti di esempi Normal e parallax mapping
Normal e parallax mappingTangent space
A. Theodorou (LD2009) Le moderne GPU 24/10/09 87 / 105
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 (LD2009) Le moderne GPU 24/10/09 88 / 105
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 (LD2009) Le moderne GPU 24/10/09 89 / 105
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 (LD2009) Le moderne GPU 24/10/09 90 / 105
Sorgenti di esempi Normal e parallax mapping
Normal e parallax mappingScreenshot
A. Theodorou (LD2009) Le moderne GPU 24/10/09 91 / 105
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 (LD2009) Le moderne GPU 24/10/09 92 / 105
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 (LD2009) Le moderne GPU 24/10/09 93 / 105
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 (LD2009) Le moderne GPU 24/10/09 94 / 105
Sorgenti di esempi Normal e parallax mapping
Normal e parallax mappingScreenshot
A. Theodorou (LD2009) Le moderne GPU 24/10/09 95 / 105
Sorgenti di esempi Toon shading
1 IntroduzionePrimo approccioPanoramica storica
2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali
3 Cenni sulla programmazioneGL Shading Language 1.20
4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 96 / 105
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 (LD2009) Le moderne GPU 24/10/09 97 / 105
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 (LD2009) Le moderne GPU 24/10/09 98 / 105
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 (LD2009) Le moderne GPU 24/10/09 99 / 105
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 (LD2009) Le moderne GPU 24/10/09 100 / 105
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 (LD2009) Le moderne GPU 24/10/09 101 / 105
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 (LD2009) Le moderne GPU 24/10/09 102 / 105
Sorgenti di esempi Toon shading
Toon shadingScreenshot
(a) Untextured (b) Textured
(c) Grey normal (d) Edges
A. Theodorou (LD2009) Le moderne GPU 24/10/09 103 / 105
Sorgenti di esempi Toon shading
Toon shadingScreenshot
(e) Final
A. Theodorou (LD2009) Le moderne GPU 24/10/09 104 / 105
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 (LD2009) Le moderne GPU 24/10/09 105 / 105