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.
1. Le moderne GPU
Cosa possibile fare oggi e cenni su come farlo
e
Angelo Encelo Theodorou
Linux Day 2009
24 Ottobre 2009
A. Theodorou (LD2009) Le moderne GPU 24/10/09 1 / 105
2. Sommario
Sommario
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
GL Shading Language 1.20
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 2 / 105
3. Sommario
Sommario
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
GL Shading Language 1.20
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 2 / 105
4. Sommario
Sommario
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
GL Shading Language 1.20
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 2 / 105
5. Sommario
Sommario
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
GL Shading Language 1.20
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 2 / 105
6. Introduzione Primo approccio
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
GL Shading Language 1.20
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 3 / 105
7. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
8. 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
9. che
A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105
10. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
11. 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
12. che
A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105
13. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
14. 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
15. che
A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105
16. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
17. 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
18. che
A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105
19. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
20. 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
21. che
A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105
22. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
23. 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
24. che
A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105
25. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
26. 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
27. che
A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105
28. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
29. 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
30. che
A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105
31. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
32. 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
33. che
A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105
34. Introduzione Primo approccio
Primo approccio
La pipeline
35. ssa
A. Theodorou (LD2009) Le moderne GPU 24/10/09 5 / 105
36. Introduzione Primo approccio
Primo approccio
La pipeline programmabile (SM 4.0)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 6 / 105
37. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
39. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in quattro fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Tassellazione (SM 5.0)
Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
40. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
42. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in quattro fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Tassellazione (SM 5.0)
Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
43. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
45. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in quattro fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Tassellazione (SM 5.0)
Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
46. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
48. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in quattro fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Tassellazione (SM 5.0)
Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
49. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
51. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in quattro fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Tassellazione (SM 5.0)
Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
52. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
54. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in quattro fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Tassellazione (SM 5.0)
Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
55. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
57. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in quattro fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Tassellazione (SM 5.0)
Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
58. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
60. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in quattro fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Tassellazione (SM 5.0)
Colorazione dei frammenti
A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105
61. Introduzione Primo approccio
Primo approccio
Lo stream processor
Esegue un qualsiasi tipo di shader (architettura uni
62. 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
63. Introduzione Primo approccio
Primo approccio
Lo stream processor
Esegue un qualsiasi tipo di shader (architettura uni
64. 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
65. Introduzione Primo approccio
Primo approccio
Lo stream processor
Esegue un qualsiasi tipo di shader (architettura uni
66. 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
67. Introduzione Primo approccio
Primo approccio
Lo stream processor
Esegue un qualsiasi tipo di shader (architettura uni
68. 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
69. Introduzione Primo approccio
Primo approccio
Lo stream processor
Esegue un qualsiasi tipo di shader (architettura uni
70. 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
71. Introduzione Primo approccio
Primo approccio
Architettura a shader uni
72. cati
Figura: Architettura discreta
Figura: Architettura uni
73. cata
A. Theodorou (LD2009) Le moderne GPU 24/10/09 9 / 105
74. Introduzione Primo approccio
Primo approccio
Tassellazione
(a) Wireframe senza tassellazione (b) Wireframe con tassellazione
A. Theodorou (LD2009) Le moderne GPU 24/10/09 10 / 105
75. Introduzione Panoramica storica
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
GL Shading Language 1.20
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 11 / 105
76. Introduzione Panoramica storica
Panoramica storica
Quadro generale
1 Generazione (1995): accelerazione 3D di base
2 Generazione (1999): Transform Lighting in hardware
3 Generazione (2001): Programmabilit a livello dei vertici e,
a
limitatamente, a quello dei frammenti (SM 1.0)
4 Generazione (2002): Piena programmabilit a livello dei frammenti
a
(SM 2.0)
5 Generazione (2004): Meno limitazioni, molta pi libert di
u a
programmazione della pipeline (SM 3.0)
6 Generazione (2006): Programmabilit a livello delle primitive,
a
uni
77. cazione delle unit di calcolo (SM 4.0)
a
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
78. Introduzione Panoramica storica
Panoramica storica
Le prime generazioni
OpenGL 1.1 e Direct3D 5.0
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.3 e Direct3D 7.0
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.4 e Direct3D 8.0/8.1
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)
(c) (d) (e) (f) (g) (h) (i) NV20 (j) (k)
NV3 NV4 Rage NV10 R100 NV15 R200 NV25
A. Theodorou (LD2009) 128 Le moderne GPU 24/10/09 13 / 105
79. Introduzione Panoramica storica
Panoramica storica
La 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
80. Introduzione Panoramica storica
Panoramica storica
La 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.0
Pi lunghi e con pi registri a disposizione
u u
Gestione di cicli dinamici
Texture fetch all'interno dei vertex shader
Multiple Render Targets
Accelerazione HW per
ussi video HD
(o) NV40 (p) G70 (q) R520
A. Theodorou (LD2009) Le moderne GPU 24/10/09 15 / 105
81. Introduzione Panoramica storica
Panoramica storica
La 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
82. cata
Design superscalare
(r) G80 (s) (t) G92
R600XT
A. Theodorou (LD2009) Le moderne GPU 24/10/09 16 / 105
83. Introduzione Panoramica storica
Panoramica storica
La 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 stream processor e larghezza di banda
u
Un'evoluzione pi che una rivoluzione
u
(u) (v) G200 (w)
RV670XT RV770XT
A. Theodorou (LD2009) Le moderne GPU 24/10/09 17 / 105
84. Introduzione Panoramica storica
Panoramica storica
L'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
85. La GPU in azione Potenza elaborativa
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
GL Shading Language 1.20
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 19 / 105
86. La GPU in azione Potenza elaborativa
Potenza elaborativa
Riferimenti numerici
Processore Core Transistor (M) Frequenza (MHz)
York
89. La GPU in azione Potenza elaborativa
Potenza elaborativa
GPU vs CPU
a
Il Commissariat 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
90. La GPU in azione Potenza elaborativa
Potenza elaborativa
Legge di Moore
A. Theodorou (LD2009) Le moderne GPU 24/10/09 22 / 105
91. La GPU in azione Applicazioni general purpose
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
GL Shading Language 1.20
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 23 / 105
92. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Il GPGPU
GPGPU: General-Purpose computation on GPUs
Sito di riferimento: http://www.gpgpu.org
Speci
93. che a standard aperto: OpenCL (Open Computing Language)
Librerie dei produttori di HW: CUDA e Brook++/CAL
Middleware
94. 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
95. La GPU in azione Applicazioni general purpose
Applicazioni general purpose
Nvidia Tesla: soluzione ad hoc
Computer desktop o rack che montano pi schede video
u
Pensati speci
96. catamente per applicazioni GPGPU tramite CUDA
La controparte AMD chiamata FireStream
e
A. Theodorou (LD2009) Le moderne GPU 24/10/09 25 / 105
97. La GPU in azione Applicazioni general purpose
Applicazioni general purpose
Fast 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
98. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Nvidia Gelato
Renderer ad accelerazione hardware non in tempo reale
A. Theodorou (LD2009) Le moderne GPU 24/10/09 27 / 105
99. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Furryball
Renderer GPU in tempo reale per Autodesk Maya
A. Theodorou (LD2009) Le moderne GPU 24/10/09 28 / 105
100. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
OpenVIDIA
Computer vision con supporto all'accelerazione della GPU
A. Theodorou (LD2009) Le moderne GPU 24/10/09 29 / 105
101. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Fluidodinamica
Calcolo del sistema di equazioni dierenziali di Navier-Stokes sulla GPU
A. Theodorou (LD2009) Le moderne GPU 24/10/09 30 / 105
102. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Generazione ed erosione di terreni
Fault Formation Circles Perlin Noise
Pentium 4 3.0 GHz 10612 ms 650803 ms 10033 ms
GeForce 7600GT 1090 ms 1356 ms 113 ms
GeForce 8600GT 915 ms 952 ms 46 ms
A. Theodorou (LD2009) Le moderne GPU 24/10/09 31 / 105
103. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Ricostruzione tomogra
104. ca
FASTRA: PC consumer, monta 4 schede video 9800x2 (8 GPU), (Maggio
2008, meno di 4000 Euro)
CalcUA: Supercomputer dell'Univerist di Antwerp, 256 nodi (512 CPU
a
Opteron 250), (Marzo 2005, 3.5M di Euro)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 32 / 105
105. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Folding@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
106. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Password recovery
ElcomSoft Distributed Password Recovery
http://www.elcomsoft.com/edpr.html
A. Theodorou (LD2009) Le moderne GPU 24/10/09 34 / 105
107. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Nurien tech demo
Fisica dei capelli e degli abiti accelerata dalla GPU
A. Theodorou (LD2009) Le moderne GPU 24/10/09 35 / 105
108. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Froblins Demo
L'IA degli oltre tremila agenti gestita dalla GPU
e
A. Theodorou (LD2009) Le moderne GPU 24/10/09 36 / 105
109. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Video encoder
Badaboom ed Avivo Converter sfruttano la GPU durante la codi
110. ca video
A. Theodorou (LD2009) Le moderne GPU 24/10/09 37 / 105
111. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Ulteriori applicazioni
60 su 621 applicazioni dal sito CUDA Zone (Ottobre 2009)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 38 / 105
112. La GPU in azione Applicazioni tradizionali
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
GL Shading Language 1.20
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 39 / 105
113. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
La Game Industry
Uno dei motori trainanti dell'economia statunitense con miliardi di
dollari di fatturato annuale
Nel 2008 ha superato il mercato mondiale dell'home video con oltre
32 miliardi di dollari
Il settore dell'intrattenimento meno soggetto alla recente recessione
e
economica
Causa principale della corsa agli armamenti nel settore dell'HW
Uno dei principali campi applicativi della ricerca nella computer
gra
114. 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
115. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
La Game Industry
Uno dei motori trainanti dell'economia statunitense con miliardi di
dollari di fatturato annuale
Nel 2008 ha superato il mercato mondiale dell'home video con oltre
32 miliardi di dollari
Il settore dell'intrattenimento meno soggetto alla recente recessione
e
economica
Causa principale della corsa agli armamenti nel settore dell'HW
Uno dei principali campi applicativi della ricerca nella computer
gra
116. 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
117. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
La Game Industry
Uno dei motori trainanti dell'economia statunitense con miliardi di
dollari di fatturato annuale
Nel 2008 ha superato il mercato mondiale dell'home video con oltre
32 miliardi di dollari
Il settore dell'intrattenimento meno soggetto alla recente recessione
e
economica
Causa principale della corsa agli armamenti nel settore dell'HW
Uno dei principali campi applicativi della ricerca nella computer
gra
118. 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
119. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
La Game Industry
Uno dei motori trainanti dell'economia statunitense con miliardi di
dollari di fatturato annuale
Nel 2008 ha superato il mercato mondiale dell'home video con oltre
32 miliardi di dollari
Il settore dell'intrattenimento meno soggetto alla recente recessione
e
economica
Causa principale della corsa agli armamenti nel settore dell'HW
Uno dei principali campi applicativi della ricerca nella computer
gra
120. 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
121. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
La Game Industry
Uno dei motori trainanti dell'economia statunitense con miliardi di
dollari di fatturato annuale
Nel 2008 ha superato il mercato mondiale dell'home video con oltre
32 miliardi di dollari
Il settore dell'intrattenimento meno soggetto alla recente recessione
e
economica
Causa principale della corsa agli armamenti nel settore dell'HW
Uno dei principali campi applicativi della ricerca nella computer
gra
122. 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
123. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
La Game Industry
Uno dei motori trainanti dell'economia statunitense con miliardi di
dollari di fatturato annuale
Nel 2008 ha superato il mercato mondiale dell'home video con oltre
32 miliardi di dollari
Il settore dell'intrattenimento meno soggetto alla recente recessione
e
economica
Causa principale della corsa agli armamenti nel settore dell'HW
Uno dei principali campi applicativi della ricerca nella computer
gra
124. 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
125. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Final Night Round 3 (20/2/2006)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 41 / 105
126. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Gears of War (Unreal Engine 3, 9/11/2006)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 42 / 105
127. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Crysis (CryEngine 2, 13/11/2007)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 43 / 105
128. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Assassin's Creed (Scimitar Engine, 14/11/2007)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 44 / 105
129. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Mass Eect (Unreal Engine 3, 20/11/2007)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 45 / 105
130. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Dead Space (Unreal Engine 3, 14/10/2008)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 46 / 105
131. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Far Cry 2 (Dunia Engine, 21/10/2008)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 47 / 105
132. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Fallout 3 (Gamebryo Engine, 28/10/2008)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 48 / 105
133. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Mirror's Edge (Unreal Engine 3, 12/11/2008)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 49 / 105
134. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Prince of Persia (Anvil Engine, 2/12/2008)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 50 / 105
135. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Killzone 2 (25/2/2009)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 51 / 105
136. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Ghostbuster: The Videogame (Infernal Engine, 16/6/2009)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 52 / 105
137. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Batman: Akrham Asylum (Unreal Engine 3, 25/8/2009)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 53 / 105
138. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Borderlands (Unreal Engine 3, 20/10/2009)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 54 / 105
139. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
R.A.G.E. (id Tech 5, 2010)
A. Theodorou (LD2009) Le moderne GPU 24/10/09 55 / 105
140. Cenni sulla programmazione GL Shading Language 1.20
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
GL Shading Language 1.20
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 56 / 105
141. Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20
Sommario
Tipi di dato
Inizializzatori e costruttori
Quali
142. 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
143. Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20
Tipi di dato
Scalari: float, int, bool
f g f g
Vettori: e*|i|b vec 2|3|4 ,
oating-point, interi o booleani
f g
Matrici: mat 2|3|4 , matrici quadrate
oating-point
f gf
Sampler: sampler 1|2|3 D e*|Cube|Shadow , permettono di g
eettuare il fetch da una texture
Supporto a strutture ed array
A. Theodorou (LD2009) Le moderne GPU 24/10/09 58 / 105
144. Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20
Inizializzatori e costruttori
§
float 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
146. catori
attribute
Informazioni destinate al vertex shader che variano spesso
nell'applicazione, anche tra la de
147. nizione di un vertice e l'altro.
uniform
Informazioni che variano meno spesso, destinate al vertex o al
fragment shader.
varying
Informazioni passate per interpolazione dal vertex al fragment shader.
const
Per variabili costanti dichiarate al momento della compilazione, come
in 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
148. Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20
Flusso 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 del
fragment shader per un certo frammento
Assenza del supporto per goto e switch
Nota: Il costrutto switch/case/default presente a partire da GLSL 1.30.
e
A. Theodorou (LD2009) Le moderne GPU 24/10/09 61 / 105
149. Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20
Swizzling
§
vec4 v4 ;
v4 . rgba ; // is a v e c 4 and t h e same a s j u s t u s i n g v4
v4 . rgb ; // is a vec3
v4 . b ; // is a float
v4 . xy ; // is a vec2
vec4 pos = vec4 ( 1 . 0 , 2 . 0 , 3 . 0 , 4 . 0 ) ;
vec4 s w i z = pos . wzyx ; // s w 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
150. Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20
Operazioni component-wise
§
vec3 v , u;
float 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
151. Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20
Funzioni 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
152. Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20
Funzioni built-in (2/2)
Supportano l'overloading degli argomenti
Matriciali: matrixCompMult()
Relazioni tra vettori: lessThan(), greatherThan(), equal(),
notEqual(), ...
f
Accesso alle texture: texture 1|2|3 D, texture 1|2|3 DProj, g f g
f g f
texture 1|2|3 DLod, texture 1|2|3 DCube, shadow 1|2|3 D, ... g f g
Solo frammenti: dFdx(), dFdy(), fwidth()
Rumore: noise 1|2|3|4 ()f g
A. Theodorou (LD2009) Le moderne GPU 24/10/09 65 / 105
153. Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20
Variabili built-in
Input del vertex shader: gl Color, gl Normal, gl Vertex,
gl MultiTexCoord 0..N , ... f g
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 disponibile solo in
e
modalit compatible
a
A. Theodorou (LD2009) Le moderne GPU 24/10/09 66 / 105
154. Cenni sulla programmazione GL Shading Language 1.20
GL Shading Language 1.20
Codice di esempio
§ Listing 1: Vertex shader
void main ( v o i d )
f
g l P o s i t i o n = f t r a n s f o r m ( ) ; // d e p r e c a t e d d a l l a 1 . 3 0
// g l P o s i t i o n = g l P r o j e c t i o n M a t r i x
£ gl ModelViewMatrix £ gl Ver tex ;
// g l P o s i t i o n = g l M o d e l V i e w P r o j e c t i o n M a t r i x
£ gl Vertex ;
g
¦ ¥
§ Listing 2: Fragment shader
void main ( v o i d )
f
gl FragColor = gl Color ;
g
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 67 / 105
155. Sorgenti di esempi Gouraud e Phong shading
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
GL Shading Language 1.20
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 68 / 105
156. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Blinn-Phong re
ection model
A. Theodorou (LD2009) Le moderne GPU 24/10/09 69 / 105
157. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Gouraud shading
Vertex shader
Trasforma il vertice
Calcola l'attenuazione
Calcola i tre contributi del modello di Phong
Fragment shader
Riceve l'intensit del vertice interpolata
a
Assegna il colore del frammento in base a questa
Nota: Il prossimo esempio emula una point light come da pipeline
158. ssa
A. Theodorou (LD2009) Le moderne GPU 24/10/09 70 / 105
159. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Vertex shader (1/3)
§
v a r y i n g vec4 intensity ;
void main ( v o i d )
f
vec4 a m b i e n t G l o b a l , ambient , d i f f u s e ;
vec3 ecPos , normal , l i g h t D i r , h a l f V e c t o r , aux ;
f l o a t NdotL , NdotHV , d i s t , a t t ;
ecPos = vec3 ( g l M o d e l V i e w M a t r i x £ g l V e r t e x ) ;
normal = n o r m a l i z e ( g l N o r m a l M a t r i x £ g l N o r m a 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 = n o r m a l i z e ( aux ) ;
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 71 / 105
160. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Vertex shader (2/3)
§
att = 1.0 / ( gl LightSource [ 0 ] . constantAttenuation
+ gl LightSource [ 0 ] . linearAttenuation £ dist
+ gl LightSource [ 0 ] . quadraticAttenuation £ dist £ dist )
a m b i e n t G l o b a l = g l L i g h t M o d e l . ambient
£ g l F r o n t M a 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 t M a t e r i a l . ambient ;
i n t e n s i t y = a m b i e n t G l o b a l + ambient £ att ;
diffuse = gl LightSource [ 0 ] . diffuse
£ gl FrontMaterial . diffuse ;
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 72 / 105
161. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Vertex shader (3/3)
§
NdotL = dot ( normal , l i g h t D i r ) ;
if ( NdotL 0 . 0 ) f
h a l f V e c t o r = n o r m a l i z e ( l i g h t D i r + n o r m a 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
£ gl FrontMaterial . specular
£ pow ( NdotHV , g l F r o n t M a t e r i a l . s h i n i n e s s ) ;
g
gl Position = ftransform ();
gl TexCoord [ 0 ] = gl TextureMatrix [ 0 ] £ gl MultiTexCoord0 ;
g
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 73 / 105
162. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Fragment shader
§
v a r y i n g vec4 i n t e n s i t y ;
u n i f o r m sampler2D Tex0 ;
void main ( v o i d )
f
vec4 colorMap = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) ;
gl FragColor = intensity £ colorMap ;
g
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 74 / 105
163. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Screenshot
(a) GLSL parallax (b) GLSL multilight
Per-pixel lighting
A. Theodorou (LD2009) Le moderne GPU 24/10/09 75 / 105
164. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Phong shading
Vertex shader
Trasforma il vertice
Calcola il valore del contributo d'ambiente e quello diuso di partenza
Fragment shader
Riceve la normale e l'eye vector interpolati
Calcola l'attenuazione
Calcola i tre contributi
165. nali del modello di Phong
Calcola il valore di intensit luminosa del frammento
a
Assegna il colore del frammento in base a questo
A. Theodorou (LD2009) Le moderne GPU 24/10/09 76 / 105
166. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Vertex shader (1/2)
§
v a r y i n g vec4 a m b i e n t G l o b a l , ambient , d i f f u s e ;
v a r y i n g vec3 normal , ecPos ;
void main ( v o i d )
f
normal = g l N o r m a l M a t r i x £ g l N o r m a l ;
ecPos = vec3 ( g l M o d e l V i e w M a t r i x £ g l V e r t e x ) ;
a m b i e n t G l o b a l = g l L i g h t M o d e l . ambient
£ g l F r o n t M a t e r i a l . ambient ;
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 77 / 105
167. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Vertex shader (2/2)
§
a m b i e n t G l o b a l = g l L i g h t M o d e l . ambient
£ g l F r o n t M a 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 t M a t e r i a l . ambient ;
diffuse = gl LightSource [ 0 ] . diffuse
£ gl FrontMaterial . diffuse ;
gl Position = ftransform ();
gl TexCoord [ 0 ] = gl TextureMatrix [ 0 ] £ gl MultiTexCoord0 ;
g
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 78 / 105
168. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Fragment shader (1/3)
§
v a r y i n g vec3 normal , ecPos ;
v a r y i n g vec4 a m b i e n t G l o b a l , ambient , d i f f u s e ;
u n i f o r m sampler2D Tex0 ;
void main ( v o i d )
f
vec3 n , aux , lightDir , refVec ;
f l o a t NdotL , RdotE ;
float dist , att ;
vec4 colorMap = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) ;
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 79 / 105
169. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Fragment shader (2/3)
§
n = n o r m a 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 = n o r m a l i z e ( aux ) ;
att = 1.0 / ( gl LightSource [ 0 ] . constantAttenuation
+ gl LightSource [ 0 ] . linearAttenuation £ dist
+ gl LightSource [ 0 ] . quadraticAttenuation £ dist £ dist )
g l F r a g C o l o r = a m b i e n t G l o b a l + ambient £ att ;
NdotL = dot ( n , l i g h t D i r ) ;
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 80 / 105
170. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Fragment shader (3/3)
§
if ( NdotL 0.0) f
g l F r a g C o l o r += a t t £ ( d i f f u s e £ NdotL ) ;
r e f V e c = r e f l e c t ( l i g h t D i r , n ) ;
RdotE = dot ( r e f V e c , n o r m a l i z e ( ecPos ) ) ;
g l F r a g C o 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
£ gl FrontMaterial . specular
£ pow ( RdotE , g l F r o n t M a t e r i a l . s h i n i n e s s ) ;
g
gl FragColor £= colorMap ;
g
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 81 / 105
171. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Screenshot
(c) GLSL parallax (d) GLSL multilight
Per-vertex lighting
A. Theodorou (LD2009) Le moderne GPU 24/10/09 82 / 105
172. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Specular mapping
Come per il Phong shading, ma in pi:
u
Fragment shader
Esegue il fetch della glossmap
Modula il costributo speculare secondo la texture precedente
A. Theodorou (LD2009) Le moderne GPU 24/10/09 83 / 105
173. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Fragment shader
§
u n i f o r m sampler2D Tex1 ;
[...]
vec4 glossMap = t e x t u r e 2 D ( Tex1 , g l T e x C o o r d [ 0 ] . s t ) ;
[...]
i f ( NdotL 0 . 0 ) f
[...]
vec4 s p e c = a t t £ [ . . . ] £ pow ( . . . ) ;
s p e c £= glossMap ;
g l F r a g C o l o r += s p e c ;
g
[...]
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 84 / 105
174. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Screenshot
A. Theodorou (LD2009) Le moderne GPU 24/10/09 85 / 105
175. Sorgenti di esempi Normal e parallax mapping
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
GL Shading Language 1.20
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 86 / 105
176. Sorgenti di esempi Normal e parallax mapping
Normal e parallax mapping
Tangent space
A. Theodorou (LD2009) Le moderne GPU 24/10/09 87 / 105
177. Sorgenti di esempi Normal e parallax mapping
Normal e parallax mapping
Normal mapping
Come per il Phong shading, ma in pi:
u
Vertex shader
Riceve il vettore della tangente dall'applicazione
Calcola il vettore binormale e la matrice TBN
Trasforma la normale, il light e l'eye vector secondo la matrice TBN
Fragment shader
Esegue il fetch della normalmap
Riporta 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
178. Sorgenti di esempi Normal e parallax mapping
Normal e parallax mapping
Vertex shader
§
a t t r i b u t e vec3 objTan ;
[...]
vec3 t a n g e n t = n o r m a l i z e ( g l N o r m a l M a t r i x £ objTan ) ;
vec3 b i n o r m a l = c r o s s ( normal , t a n g e n t ) ;
mat3 t b n M a t r i x = mat3 ( t a n g e n t . x , b i n o r m a l . x , normal . x ,
t a n g e n t . y , b i n o r m a l . y , normal . y ,
t a n g e n t . z , b i n o r m a l . z , normal . z ) ;
[...]
l i g h t D i r = tbnMatrix £ l i g h t D i r ;
ecPos = t b n M a t r i x £ ecPos ;
[...]
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 89 / 105
179. Sorgenti di esempi Normal e parallax mapping
Normal e parallax mapping
Fragment shader
§
u n i f o r m sampler2D Tex2 ;
[...]
vec4normalMap = t e x t u r e 2 D ( Tex2 , g l T e x C o o r d [ 0 ] . s t ) ;
normal = n o r m a l i z e ( 2 . 0 £ normalMap . rgb 1 . 0 ) ;
[...]
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 90 / 105
180. Sorgenti di esempi Normal e parallax mapping
Normal e parallax mapping
Screenshot
A. Theodorou (LD2009) Le moderne GPU 24/10/09 91 / 105
181. Sorgenti di esempi Normal e parallax mapping
Normal e parallax mapping
Teoria sul parallax mapping
Si correggono le coordinate del texture fetch per riferirsi al punto B
Ma c' bisogno di una nuova informazione: l'altezza del pixel
e
A. Theodorou (LD2009) Le moderne GPU 24/10/09 92 / 105
182. Sorgenti di esempi Normal e parallax mapping
Normal e parallax mapping
Parallax mapping
Come per il normal mapping, ma in pi:
u
Fragment shader
Esegue il fetch della heightmap con le texcoord reali del pixel
Scala e trasla l'altezza secondo coecienti empirici
Sposta le nuove texcoord verso l'osservatore secondo il valore
precedente
A. Theodorou (LD2009) Le moderne GPU 24/10/09 93 / 105
183. Sorgenti di esempi Normal e parallax mapping
Normal e parallax mapping
Fragment shader
§
[...]
vec2 TexCoord ;
float height ;
float scale = 0.04;
float bias = 0.02;
h e i g h t = s c a l e £ t e x t u r e 2 D ( Tex2 , g l T e x C o o r d [ 0 ] . s t ) . a
bias ;
TexCoord = g l T e x C o o r d [ 0 ] . s t + h e i g h t
£ n o r m a l i z e ( ecPos ) . xy ;
[...]
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 94 / 105
184. Sorgenti di esempi Normal e parallax mapping
Normal e parallax mapping
Screenshot
A. Theodorou (LD2009) Le moderne GPU 24/10/09 95 / 105
185. Sorgenti di esempi Toon shading
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
GL Shading Language 1.20
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
A. Theodorou (LD2009) Le moderne GPU 24/10/09 96 / 105
186. Sorgenti di esempi Toon shading
Toon shading
Implementazione
Requisiti:
Frame Buer Object (per il post-processing in screen space)
Multiple Render Targets (per memorizzare le normali al primo passo)
1 passo
Si discretizza l'intensit luminosa in pochi valori ammessi
a
Si 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 della
texture precedente
Si evidenziano i contorni secondo un valore di soglia e spessore
A. Theodorou (LD2009) Le moderne GPU 24/10/09 97 / 105
187. Sorgenti di esempi Toon shading
Toon shading
1 passo, fragment shader (1/2)
§
v a r y i n g vec3 normal , ecPos ;
u n i f o r m sampler2D Tex0 ;
void main ( v o i d )
f
vec3 n , l i g h t D i r ;
f l o a t NdotL ;
vec4 colorMap = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) ;
n = n o r m a l i z e ( normal ) ;
l i g h t D i r = n o r m a 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
188. Sorgenti di esempi Toon shading
Toon shading
1 passo, fragment shader (2/2)
§
g l F r a g D a t a [ 0 ] = vec4 ( 0 . 0 ) ;
if ( NdotL 0.95)
g l F r a g D a t a [ 0 ] = vec4 ( 1 . 0 ) ;
else if ( NdotL 0.5)
g l F r a g D a t a [ 0 ] = vec4 ( 0 . 7 5 ) ;
else if ( NdotL 0.25)
g l F r a g D a t a [ 0 ] = vec4 ( 0 . 5 ) ;
else if ( NdotL 0.0)
g l F r a g D a t a [ 0 ] = vec4 ( 0 . 2 5 ) ;
g l F r a g D a t a [ 0 ] £= colorMap ;
g l F r a g D a t a [ 1 ] = vec4 ( n , 1 . 0 ) ;
g
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 99 / 105
189. Sorgenti di esempi Toon shading
Toon shading
2 passo, fragment shader (1/3)
§
uniform i n t Width , H e i g h t ;
uniform float Thickness ;
uniform float Threshold ;
uniform sampler2D Tex0 , Tex1 ;
void main ( v o i d )
f
vec2 ox = vec2 ( T h i c k n e s s / f l o a t ( Width ) , 0 . 0 ) ;
vec2 oy = vec2 ( 0 . 0 , T h i c k n e s s / f l o a t ( H e i g h t ) ) ;
vec2 uv = g l T e x C o o r d [ 0 ] . s t ;
mat3 gray ;
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 100 / 105
190. Sorgenti di esempi Toon shading
Toon shading
2 passo, fragment shader (2/3)
§
int i , j ;
vec2 PP = uv oy ;
for ( i = 0; i 3 ; i ++) f
g r a y [ i ] [ 0 ] = dot ( t e x t u r e 2 D ( Tex1 , PP ox ) . rgb , vec3 ( 1 . 0
g r a y [ i ] [ 1 ] = dot ( t e x t u r e 2 D ( Tex1 , PP ) . rgb , vec3 ( 1 . 0 / 3 . 0 )
g r a y [ i ] [ 2 ] = dot ( t e x t u r e 2 D ( Tex1 , PP + ox ) . rgb , vec3 ( 1 . 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
191. Sorgenti di esempi Toon shading
Toon shading
2 passo, fragment shader (3/3)
§
f l o at sx = 0 . 0 ;
f l o at sy = 0 . 0 ;
for ( i = 0; i 3 ; i ++) f
for ( j = 0; j 3 ; j ++) f
s x += g r a y [ i ] [ j ] £ K[ i ] [ j ] ;
s y += g r a y [ i ] [ j ] £ K[ j ] [ i ] ;
g
g
float d i s t = s q r t ( sx £ sx + sy £ sy ) ;
if ( dist Threshold )
g l F r a g C o l o r = vec4 ( 0 . 0 ) ;
else
g l F r a g C o l o r = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) ;
g
¦ ¥
A. Theodorou (LD2009) Le moderne GPU 24/10/09 102 / 105
192. Sorgenti di esempi Toon shading
Toon shading
Screenshot
(a) Untextured (b) Textured
(c) Grey normal (d) Edges
A. Theodorou (LD2009) Le moderne GPU 24/10/09 103 / 105
193. Sorgenti di esempi Toon shading
Toon shading
Screenshot
(e) Final
A. Theodorou (LD2009) Le moderne GPU 24/10/09 104 / 105
194. Approfondimenti
Approfondimenti
Alcuni 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