Le Moderne GPU: Cosa è possibile fare oggi e cenni su come farlo
Presentata nell'aula C4 occupata nel complesso di Monte S.Angelo dell'Università di Napoli "Federico II" il giorno 22 e 29 Aprile 2009.
1. Le moderne GPU
Cosa possibile fare oggi e cenni su come farlo
e
Angelo Encelo Theodorou
Universit degli Studi di Napoli Federico II
a
Revisione di [CG2008] per il seminario in aula C4
A. Theodorou (Federico II) Le moderne GPU C42009 1 / 152
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
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
3. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 2 / 152
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
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
5. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 2 / 152
6. Sommario
Sommario
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
7. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 2 / 152
8. Sommario
Sommario
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
9. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 2 / 152
10. 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
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
11. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 3 / 152
12. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
13. cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra
14. che
A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
15. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
16. cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra
17. che
A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
18. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
19. cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra
20. che
A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
21. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
22. cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra
23. che
A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
24. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
25. cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra
26. che
A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
27. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
28. cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra
29. che
A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
30. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
31. cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra
32. che
A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
33. Introduzione Primo approccio
Primo aprroccio
La GPU oggi
Caratteristiche salienti delle Graphics Processing Unit attuali:
Vertex, Geometry e Fragment shader (architettura uni
34. cata)
Centinaia di gigaFLOPS in single-precision
Decine di gigaFLOPS in double-precision
Decine di GB/s di banda da e verso la VRAM
Rapporto di crescita superiore a quello delle CPU
Utilizzabili per compiti general purpose
Programmabili mediante librerie non gra
35. che
A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
36. Introduzione Primo approccio
Primo approccio
La pipeline
37. ssa
A. Theodorou (Federico II) Le moderne GPU C42009 5 / 152
38. Introduzione Primo approccio
Primo approccio
La pipeline programmabile (SM 4.0)
A. Theodorou (Federico II) Le moderne GPU C42009 6 / 152
39. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
41. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in tre fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Colorazione dei frammenti
Di default emula le attivit della pipeline
42. ssa
a
A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
43. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
45. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in tre fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Colorazione dei frammenti
Di default emula le attivit della pipeline
46. ssa
a
A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
47. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
49. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in tre fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Colorazione dei frammenti
Di default emula le attivit della pipeline
50. ssa
a
A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
51. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
53. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in tre fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Colorazione dei frammenti
Di default emula le attivit della pipeline
54. ssa
a
A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
55. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
57. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in tre fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Colorazione dei frammenti
Di default emula le attivit della pipeline
58. ssa
a
A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
59. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
61. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in tre fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Colorazione dei frammenti
Di default emula le attivit della pipeline
62. ssa
a
A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
63. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
65. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in tre fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Colorazione dei frammenti
Di default emula le attivit della pipeline
66. ssa
a
A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
67. Introduzione Primo approccio
Primo approccio
Lo shader
Il sorgente speci
69. care un solo elemento alla volta (gathering/scattering)
o
Pu intervenire in tre fasi distinte:
o
Trasformazione dei vertici
Assemblaggio delle primitive
Colorazione dei frammenti
Di default emula le attivit della pipeline
70. ssa
a
A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
71. Introduzione Primo approccio
Primo approccio
Lo stream processor
Esegue uno qualsiasi dei tre tipi di shader (architettura uni
72. cata)
Viene istruito da un dispatcher che gestisce il work-load
Opera seguendo un design superscalare
Lavora in singola e doppia precisione (IEEE-754 compliant)
Segue il paradigma dello stream processing (SPMD, kernel, stream)
A. Theodorou (Federico II) Le moderne GPU C42009 8 / 152
73. Introduzione Primo approccio
Primo approccio
Lo stream processor
Esegue uno qualsiasi dei tre tipi di shader (architettura uni
74. cata)
Viene istruito da un dispatcher che gestisce il work-load
Opera seguendo un design superscalare
Lavora in singola e doppia precisione (IEEE-754 compliant)
Segue il paradigma dello stream processing (SPMD, kernel, stream)
A. Theodorou (Federico II) Le moderne GPU C42009 8 / 152
75. Introduzione Primo approccio
Primo approccio
Lo stream processor
Esegue uno qualsiasi dei tre tipi di shader (architettura uni
76. cata)
Viene istruito da un dispatcher che gestisce il work-load
Opera seguendo un design superscalare
Lavora in singola e doppia precisione (IEEE-754 compliant)
Segue il paradigma dello stream processing (SPMD, kernel, stream)
A. Theodorou (Federico II) Le moderne GPU C42009 8 / 152
77. Introduzione Primo approccio
Primo approccio
Lo stream processor
Esegue uno qualsiasi dei tre tipi di shader (architettura uni
78. cata)
Viene istruito da un dispatcher che gestisce il work-load
Opera seguendo un design superscalare
Lavora in singola e doppia precisione (IEEE-754 compliant)
Segue il paradigma dello stream processing (SPMD, kernel, stream)
A. Theodorou (Federico II) Le moderne GPU C42009 8 / 152
79. Introduzione Primo approccio
Primo approccio
Lo stream processor
Esegue uno qualsiasi dei tre tipi di shader (architettura uni
80. cata)
Viene istruito da un dispatcher che gestisce il work-load
Opera seguendo un design superscalare
Lavora in singola e doppia precisione (IEEE-754 compliant)
Segue il paradigma dello stream processing (SPMD, kernel, stream)
A. Theodorou (Federico II) Le moderne GPU C42009 8 / 152
81. Introduzione Primo approccio
Primo approccio
Architettura a shader uni
82. cati
Figura: Architettura discreta
Figura: Architettura uni
83. cata
A. Theodorou (Federico II) Le moderne GPU C42009 9 / 152
84. Introduzione Primo approccio
Primo approccio
Architettura GT200
A. Theodorou (Federico II) Le moderne GPU C42009 10 / 152
85. Introduzione Primo approccio
Primo approccio
Architettura RV770
A. Theodorou (Federico II) Le moderne GPU C42009 11 / 152
86. 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
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
87. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 12 / 152
88. 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
89. cazione delle unit di calcolo (SM 4.0)
a
7 Generazione (2008): Un'evoluzione prestazionale (SM 4.1)
A. Theodorou (Federico II) Le moderne GPU C42009 13 / 152
90. Introduzione Panoramica storica
Panoramica storica
La prima generazione
01/12/1996: Diamond Monster 3D (SST1, 1M transistor)
01/08/1997: Nvidia Riva 128 (NV3, 3.5M transistor)
01/08/1998: Nvidia Riva TNT (NV4, 7M transistor)
01/11/1998: Ati Rage 128 (Rage 128, 8M transistor)
3 OpenGL 1.1 e Direct3D 5.0
Hidden Surface Removal tramite Z-buering
Mipmapping
Flat e Gouraud shading
Filtro bi/trilineare per le texture
Alpha blending
Stencil buer
(a) SST1 (b) NV3 (c) NV4 (d) Rage
A. Theodorou (Federico II) Le moderne GPU 128 C42009 14 / 152
91. Introduzione Panoramica storica
Panoramica storica
La seconda generazione
01/10/1999: Nvidia GeForce 256 (NV10, 23M transistor)
15/06/2000: ATI Radeon (R100, 30M transistor)
26/04/2000: Nvidia GeForce2 GTS (NV15, 25M transistor)
3 OpenGL 1.3 e Direct3D 7.0
Trasformazione, illuminazione e clipping dei vertici
Z-buer pi preciso (compressione dei dati in transito)
u
Rudimentale shading per-pixel (nascosto nell'API, 2 texture
miscelabili)
Full Scene Anti Aliasing ed Anisotropic Filtering
Supporto hardware alla compressione delle texture
Supporto hardware a bump, shadow ed environment mapping
(e) NV10 (f) R100 (g) NV15
A. Theodorou (Federico II) Le moderne GPU C42009 15 / 152
92. Introduzione Panoramica storica
Panoramica storica
La terza generazione
01/05/2001: Nvidia GeForce 3 (NV20, 57M transistor)
14/08/2001: ATI Radeon 8500 (R200, 60M transistor)
04/02/2002: Nvidia GeForce4 Ti 4600 (NV25, 63M transistor)
3 OpenGL 1.4 e Direct3D 8.0/8.1
Vertex shader 1.0
Pixel shader 1.0 (parzialmente esposti nelle API, 4 texture miscelabili)
Supporto hardware al True Re
ective Bump Mapping, Environmental
Mapped Bump Mapping, ...
(h) NV20 (i) R200 (j) NV25
A. Theodorou (Federico II) Le moderne GPU C42009 16 / 152
93. 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)
3 OpenGL 1.5/2.0 e Direct3D 9.0b
Vertex Shader 2.0
Pixel Shader 2.0 (programmabili direttamente)
Precisione FP16/FP32
(k) R300 (l) NV30 (m) R420
A. Theodorou (Federico II) Le moderne GPU C42009 17 / 152
94. 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)
3 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
(n) NV40 (o) G70 (p) R520
A. Theodorou (Federico II) Le moderne GPU C42009 18 / 152
95. 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)
3 OpenGL 2.0/2.1 e Direct3D 10
Vertex e Pixel Shader 4.0
Geometry Shader 4.0
Archittettura uni
96. cata
Design superscalare
(q) G80 (r) (s) G92
R600XT
A. Theodorou (Federico II) Le moderne GPU C42009 19 / 152
97. 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)
3 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
(t) (u) G200 (v)
RV670XT RV770XT
A. Theodorou (Federico II) Le moderne GPU C42009 20 / 152
98. 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
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
99. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 21 / 152
100. La GPU in azione Potenza elaborativa
Potenza elaborativa
Riferimenti numerici
Processore Core Transistor (M) Frequenza (MHz)
York
103. 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 (Federico II) Le moderne GPU C42009 23 / 152
104. La GPU in azione Potenza elaborativa
Potenza elaborativa
Larghezza di banda
A. Theodorou (Federico II) Le moderne GPU C42009 24 / 152
105. La GPU in azione Potenza elaborativa
Potenza elaborativa
Legge di Moore
A. Theodorou (Federico II) Le moderne GPU C42009 25 / 152
106. 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
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
107. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 26 / 152
108. 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
109. che a standard aperto: OpenCL (Open Computing Language)
Librerie dei produttori di HW: CUDA e Brook++/CAL
Middleware
110. sico: Nvidia PhysX (ex Ageia)
Stage nella pipeline Direct3D 11: Compute shader
Vecchie librerie open-source: BrookGPU, Sh
A. Theodorou (Federico II) Le moderne GPU C42009 27 / 152
111. 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
112. catamente per applicazioni GPGPU tramite CUDA
La controparte AMD chiamata FireStream
e
A. Theodorou (Federico II) Le moderne GPU C42009 28 / 152
113. 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 (Federico II) Le moderne GPU C42009 29 / 152
114. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Nvidia Gelato
Renderer ad accelerazione hardware non in tempo reale
A. Theodorou (Federico II) Le moderne GPU C42009 30 / 152
115. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
OpenVIDIA
Computer vision con supporto all'accelerazione della GPU
A. Theodorou (Federico II) Le moderne GPU C42009 31 / 152
116. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Fluidodinamica
Calcolo del sistema di equazioni dierenziali di Navier-Stokes sulla GPU
A. Theodorou (Federico II) Le moderne GPU C42009 32 / 152
117. 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 (Federico II) Le moderne GPU C42009 33 / 152
118. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Ricostruzione tomogra
119. 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 (Federico II) Le moderne GPU C42009 34 / 152
120. 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 (Federico II) Le moderne GPU C42009 35 / 152
121. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Password recovery
ElcomSoft Distributed Password Recovery
http://www.elcomsoft.com/edpr.html
A. Theodorou (Federico II) Le moderne GPU C42009 36 / 152
122. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Nurien tech demo
Fisica dei capelli e degli abiti accelerata dalla GPU
A. Theodorou (Federico II) Le moderne GPU C42009 37 / 152
123. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Froblins Demo
L'IA degli oltre tremila agenti gestita dalla GPU
e
A. Theodorou (Federico II) Le moderne GPU C42009 38 / 152
124. La GPU in azione Applicazioni general purpose
Applicazioni GPGPU
Ulteriori applicazioni
60 su 262 applicazioni dal sito CUDA Zone (Marzo 2009)
A. Theodorou (Federico II) Le moderne GPU C42009 39 / 152
125. 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
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
126. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 40 / 152
127. 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
128. ca
Porta ad una ricaduta tecnologica anche in altri settori (educativo,
medico, industriale, militare)
A. Theodorou (Federico II) Le moderne GPU C42009 41 / 152
129. 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
130. ca
Porta ad una ricaduta tecnologica anche in altri settori (educativo,
medico, industriale, militare)
A. Theodorou (Federico II) Le moderne GPU C42009 41 / 152
131. 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
132. ca
Porta ad una ricaduta tecnologica anche in altri settori (educativo,
medico, industriale, militare)
A. Theodorou (Federico II) Le moderne GPU C42009 41 / 152
133. 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
134. ca
Porta ad una ricaduta tecnologica anche in altri settori (educativo,
medico, industriale, militare)
A. Theodorou (Federico II) Le moderne GPU C42009 41 / 152
135. 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
136. ca
Porta ad una ricaduta tecnologica anche in altri settori (educativo,
medico, industriale, militare)
A. Theodorou (Federico II) Le moderne GPU C42009 41 / 152
137. 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
138. ca
Porta ad una ricaduta tecnologica anche in altri settori (educativo,
medico, industriale, militare)
A. Theodorou (Federico II) Le moderne GPU C42009 41 / 152
139. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Human Head (14/7/2007)
Demo real-time della Nvidia per la GeForce 8800 Ultra
A. Theodorou (Federico II) Le moderne GPU C42009 42 / 152
140. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
CryEngine 2 vs Unreal Engine 3 (1/2)
A. Theodorou (Federico II) Le moderne GPU C42009 43 / 152
141. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
CryEngine 2 vs Unreal Engine 3 (2/2)
A. Theodorou (Federico II) Le moderne GPU C42009 44 / 152
142. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Crysis vs Real-life
A. Theodorou (Federico II) Le moderne GPU C42009 45 / 152
143. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Final Night Round 3 (20/2/2006)
A. Theodorou (Federico II) Le moderne GPU C42009 46 / 152
144. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Gears of War (Unreal Engine 3, 9/11/2006)
A. Theodorou (Federico II) Le moderne GPU C42009 47 / 152
145. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Crysis (CryEngine 2, 13/11/2007)
A. Theodorou (Federico II) Le moderne GPU C42009 48 / 152
146. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Assassin's Creed (Scimitar Engine, 14/11/2007)
A. Theodorou (Federico II) Le moderne GPU C42009 49 / 152
147. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Mass Eect (Unreal Engine 3, 20/11/2007)
A. Theodorou (Federico II) Le moderne GPU C42009 50 / 152
148. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
3dMark Vantage, 28/4/2008
A. Theodorou (Federico II) Le moderne GPU C42009 51 / 152
149. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Dead Space (Unreal Engine 3, 14/10/2008)
A. Theodorou (Federico II) Le moderne GPU C42009 52 / 152
150. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Far Cry 2 (Dunia Engine, 21/10/2008)
A. Theodorou (Federico II) Le moderne GPU C42009 53 / 152
151. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Fallout 3 (Gamebryo Engine, 28/10/2008)
A. Theodorou (Federico II) Le moderne GPU C42009 54 / 152
152. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Mirror's Edge (Unreal Engine 3, 12/11/2008)
A. Theodorou (Federico II) Le moderne GPU C42009 55 / 152
153. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Prince of Persia (Anvil Engine, 2/12/2008)
A. Theodorou (Federico II) Le moderne GPU C42009 56 / 152
154. La GPU in azione Applicazioni tradizionali
Applicazioni tradizionali
Killzone 2, 25/2/2009
A. Theodorou (Federico II) Le moderne GPU C42009 57 / 152
155. Cenni sulla programmazione Supporto OpenGL
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
156. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 58 / 152
157. Cenni sulla programmazione Supporto OpenGL
Supporto OpenGL
Sommario
Creazione shader object
Creazione program object
Utilizzo del program object
Codice di esempio 1
Liberazione delle risorse allocate
Variabili uniformi
Cenni sul resto
Codice di esempio 2
Nota: Le funzioni che verranno esaminate fanno parte del core di OpenGL 2.0 e
successivi.
A. Theodorou (Federico II) Le moderne GPU C42009 59 / 152
158. Cenni sulla programmazione Supporto OpenGL
Supporto OpenGL
Creazione shader object
GLuint glCreateShader(GLenum shaderType )
Ritorna l'handle per un nuovo shader
Il tipo pu essere GL VERTEX SHADER o GL FRAGMENT SHADER.
o
void glShaderSource(GLuint shader, GLsizei count, const
GLchar **string, const GLint *length )
Imposta il sorgente per lo shader all'array di stringhe speci
159. cato.
void glCompileShader(GLuint shader )
Compila il sorgente dello shader speci
160. cato.
Nota: A partire dalle OpenGL 3.0, glCreateShader() accetta anche il tipo
GL GEOMETRY SHADER ARB.
A. Theodorou (Federico II) Le moderne GPU C42009 60 / 152
161. Cenni sulla programmazione Supporto OpenGL
Supporto OpenGL
Creazione program object
GLuint glCreateProgram(void)
Ritorna l'handle per un nuovo programma.
void glAttachShader(GLuint program, GLuint shader )
Associa lo shader al programma speci
162. cato.
void glLinkProgram(GLuint program );
Eettua la fase di linking per il programma.
A. Theodorou (Federico II) Le moderne GPU C42009 61 / 152
163. Cenni sulla programmazione Supporto OpenGL
Supporto OpenGL
Utilizzo del program object
void glUseProgram(GLuint program )
Speci
164. ca il programma da usare.
Da quel momento in poi, per qualsiasi operazione, non verr pi
a u
utilizzata la pipeline
165. ssa.
Passando 0 come parametro si ritorna alla pipeline tradizionale.
A. Theodorou (Federico II) Le moderne GPU C42009 62 / 152
166. Cenni sulla programmazione Supporto OpenGL
Supporto OpenGL
Codice di esempio 1
§
GLuint v , f , p ;
char £ vs , £ f s ;
p = glCreateProgram ( ) ;
v = g l C r e a t e S h a d e r (GL VERTEX SHADER ) ;
g l S h a d e r S o u r c e ( v , 1 , vs , NULL ) ;
glCompileShader ( v ) ;
glAttachShader (p , v ) ;
f = g l C r e a t e S h a d e r (GL FRAGMENT SHADER ) ;
g l S h a d e r S o u r c e ( f , 1 , f s , NULL ) ;
glCompileShader ( f ) ;
glAttachShader (p , f ) ;
glLinkProgram (p ) ;
glUseProgram ( p ) ;
¦ ¥
A. Theodorou (Federico II) Le moderne GPU C42009 63 / 152
167. Cenni sulla programmazione Supporto OpenGL
Supporto OpenGL
Liberazione delle risorse allocate
void glDeleteShader(GLuint shader )
Comando opposto a quello di creazione, libera la memoria ed il
riferimento associati all'handle passato.
void glDeleteProgram(GLuint program )
Come sopra, ma relativo ai programmi.
void glDetachShader(GLuint program, GLuint shader )
Cancella l'associazione tra shader e programma.
A. Theodorou (Federico II) Le moderne GPU C42009 64 / 152
168. Cenni sulla programmazione Supporto OpenGL
Supporto OpenGL
Variabili uniformi
OpenGL permette il passaggio di dati agli shader
GLint glGetUniformLocation(GLuint program, const GLchar
*name )
Ritorna il riferimento alla posizione di una certa variabile all'interno
del programma, che dev'essere correntemente in uso.
void glUniformf1|2|3|4gff|ig(GLint location, TYPE v )
Imposta il valore della variabile alla locazione speci
169. cata a quello
passato dalla funzione.
void glUniformf1|2|3|4gff|igv(GLint location, GLuint
count, const TYPE v )
Come sopra, ma questa volta permette di speci
170. care un array di valori.
void glUniformMatrixf2|3|4gfv(GLint location, GLuint
count, GLboolean transpose, const GLfloat *v )
Passa allo shader una matrice quadrata della dimensione speci
171. cata,
ordinata per colonne o per righe a seconda del parametro booleano.
A. Theodorou (Federico II) Le moderne GPU C42009 65 / 152
172. Cenni sulla programmazione Supporto OpenGL
Supporto OpenGL
Cenni sul resto
glGetUniform() e glGetActiveUniform()
Ritorna il valore di una o di tutte le variabili uniformi attive nel
programma speci
173. cato.
Funzioni di query
Permettono di ricavare lo stato degli oggetti creati, stampare log
diagnostici, conoscere gli oggetti correntemente attivi.
Funzioni relative agli attributi per vertice
Permettono di speci
174. care attributi da passare agli shader, all'interno
di una coppia glBegin()/glEnd(), diversi per ogni vertice.
Multiple Render Targets
I fragment shader supportano la scrittura contemporanea su pi frame
u
buer.
Ausilio per lo svilupo
glValidateProgram() controlla se l'eseguibile del programma
speci
175. cato, dato lo stato OpenGL corrente, pu funzionare.
o
A. Theodorou (Federico II) Le moderne GPU C42009 66 / 152
176. Cenni sulla programmazione Supporto OpenGL
Supporto OpenGL
Codice di esempio 2
§
GLuint p ;
GLint l o c 1 , l o c 2 ;
glUseProgram ( p ) ;
loc1 = glGetUniformLocation (p , Variable1 ) ;
glUniform1f ( loc1 , 1.0 f ) ;
loc2 = glGetUniformLocation (p , Variable2 ) ;
glUniform1i ( loc2 , 1 ) ;
¦ ¥
A. Theodorou (Federico II) Le moderne GPU C42009 67 / 152
177. Cenni sulla programmazione GL Shading Language
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
178. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 68 / 152
179. Cenni sulla programmazione GL Shading Language
GL Shading Language
Sommario
Tipi di dato
Inizializzatori e costruttori
Quali
180. catori
Flusso di controllo
Swizzling
Operazioni component-wise
Funzioni built-in
Variabili built-in
Codice di esempio
A. Theodorou (Federico II) Le moderne GPU C42009 69 / 152
181. Cenni sulla programmazione GL Shading Language
GL Shading Language
Tipi 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 di
eettuare il fetch da una texture
Supporto a strutture ed array
A. Theodorou (Federico II) Le moderne GPU C42009 70 / 152
182. Cenni sulla programmazione GL Shading Language
GL Shading Language
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 (Federico II) Le moderne GPU C42009 71 / 152
184. catori
attribute
Informazioni destinate al vertex shader che variano spesso
nell'applicazione, anche tra la de
185. 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 (Federico II) Le moderne GPU C42009 72 / 152
186. Cenni sulla programmazione GL Shading Language
GL Shading Language
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 (Federico II) Le moderne GPU C42009 73 / 152
187. Cenni sulla programmazione GL Shading Language
GL Shading Language
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 (Federico II) Le moderne GPU C42009 74 / 152
188. Cenni sulla programmazione GL Shading Language
GL Shading Language
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 (Federico II) Le moderne GPU C42009 75 / 152
189. Cenni sulla programmazione GL Shading Language
GL Shading Language
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 (Federico II) Le moderne GPU C42009 76 / 152
190. Cenni sulla programmazione GL Shading Language
GL Shading Language
Funzioni built-in (2/2)
Supportano l'overloading degli argomenti
Matriciali: matrixCompMult()
Relazioni tra vettori: lessThan(), greatherThan(), equal(),
notEqual(), ...
Accesso alle texture: texturef1|2|3gD, texturef1|2|3gDProj,
texturef1|2|3gDLod, texturef1|2|3gDCube, shadowf1|2|3gD, ...
Solo frammenti: dFdx(), dFdy(), fwidth()
Rumore: noisef1|2|3|4g()
A. Theodorou (Federico II) Le moderne GPU C42009 77 / 152
191. Cenni sulla programmazione GL Shading Language
GL Shading Language
Variabili built-in
Input del vertex shader: gl Color, gl Normal, gl Vertex,
gl MultiTexCoordf0..Ng, ...
Output del vertex shader: gl Position, ...
Input del fragment shader: gl FragCoord, gl FrontFacing
Output del fragment shader: gl FragColor, gl FragData[],
gl FragDepth
Variabili uniformi comuni: gl ModelViewMatrix,
gl ProjectionMatrix, gl ClipPlane, gl Point,
gl FrontMaterial, gl LightSource[], gl Fog, ...
A. Theodorou (Federico II) Le moderne GPU C42009 78 / 152
192. Cenni sulla programmazione GL Shading Language
GL Shading Language
Codice di esempio
§ Listing 1: Vertex shader
void main ( v o i d )
f
gl Position = ftransform ();
// 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 (Federico II) Le moderne GPU C42009 79 / 152
193. 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
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
194. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 80 / 152
195. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Blinn-Phong re
ection model
A. Theodorou (Federico II) Le moderne GPU C42009 81 / 152
196. 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
197. ssa
A. Theodorou (Federico II) Le moderne GPU C42009 82 / 152
198. 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 (Federico II) Le moderne GPU C42009 83 / 152
199. 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 (Federico II) Le moderne GPU C42009 84 / 152
200. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Vertex shader (3/3)
§
NdotL = max ( dot ( normal , l i g h t D i r ) , 0 . 0 ) ;
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 = max ( dot ( normal , h a l f V e c t o r ) , 0 . 0 ) ;
i n t e n s i t y += a t t £ g l L i g h t S o u r c e [ 0 ] . s p e c u l a r
£ 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 (Federico II) Le moderne GPU C42009 85 / 152
201. 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 (Federico II) Le moderne GPU C42009 86 / 152
202. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Screenshot
(a) GLSL parallax (b) GLSL multilight
Per-pixel lighting
A. Theodorou (Federico II) Le moderne GPU C42009 87 / 152
203. 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
204. 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 (Federico II) Le moderne GPU C42009 88 / 152
205. 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 (Federico II) Le moderne GPU C42009 89 / 152
206. 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 (Federico II) Le moderne GPU C42009 90 / 152
207. 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 (Federico II) Le moderne GPU C42009 91 / 152
208. 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 (Federico II) Le moderne GPU C42009 92 / 152
209. 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 (Federico II) Le moderne GPU C42009 93 / 152
210. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Screenshot
(c) GLSL parallax (d) GLSL multilight
Per-vertex lighting
A. Theodorou (Federico II) Le moderne GPU C42009 94 / 152
211. 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 (Federico II) Le moderne GPU C42009 95 / 152
212. 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 (Federico II) Le moderne GPU C42009 96 / 152
213. Sorgenti di esempi Gouraud e Phong shading
Gouraud e Phong shading
Screenshot
A. Theodorou (Federico II) Le moderne GPU C42009 97 / 152
214. 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
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
215. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 98 / 152
216. Sorgenti di esempi Normal e parallax mapping
Normal e parallax mapping
Tangent space
A. Theodorou (Federico II) Le moderne GPU C42009 99 / 152
217. 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 (Federico II) Le moderne GPU C42009 100 / 152
218. 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 (Federico II) Le moderne GPU C42009 101 / 152
219. Sorgenti di esempi Normal e parallax mapping
Normal e parallax mapping
Fragment shader
§
u n i f o r m sampler2D Tex2 ;
[...]
normalMap = t e x t u r e 2 D ( Tex2 , g l T e x C o o r d [ 0 ] . s t ) ;
vec4
normal = n o r m a l i z e ( 2 . 0 £ normalMap . rgb 1 . 0 ) ;
[...]
¦ ¥
A. Theodorou (Federico II) Le moderne GPU C42009 102 / 152
220. Sorgenti di esempi Normal e parallax mapping
Normal e parallax mapping
Screenshot
A. Theodorou (Federico II) Le moderne GPU C42009 103 / 152
221. 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 (Federico II) Le moderne GPU C42009 104 / 152
222. 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 (Federico II) Le moderne GPU C42009 105 / 152
223. 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 (Federico II) Le moderne GPU C42009 106 / 152
224. Sorgenti di esempi Normal e parallax mapping
Normal e parallax mapping
Screenshot
A. Theodorou (Federico II) Le moderne GPU C42009 107 / 152
225. 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
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
226. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 108 / 152
227. 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 (Federico II) Le moderne GPU C42009 109 / 152
228. 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 (Federico II) Le moderne GPU C42009 110 / 152
229. 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 (Federico II) Le moderne GPU C42009 111 / 152
230. 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 (Federico II) Le moderne GPU C42009 112 / 152
231. 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 (Federico II) Le moderne GPU C42009 113 / 152
232. 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 (Federico II) Le moderne GPU C42009 114 / 152
233. Sorgenti di esempi Toon shading
Toon shading
Screenshot
(a) Untextured (b) Textured
(c) Grey normal (d) Edges
A. Theodorou (Federico II) Le moderne GPU C42009 115 / 152
234. Sorgenti di esempi Toon shading
Toon shading
Screenshot
(e) Final
A. Theodorou (Federico II) Le moderne GPU C42009 116 / 152
236. eld
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
237. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 117 / 152
240. eld
Teoria
x = s =d 3 x 0 = a(s =d )
0 =a
00
x =a = (s f )=f 3 x 00 = a(s )=f = a(s =f 1)
f
s 1 1
jx x j = a 1 a = a s 1
00 0
f
s
d f d
A. Theodorou (Federico II) Le moderne GPU C42009 118 / 152
243. eld
Implementazione
Si compone di 5 passi ed utilizza 4 Frame Buer Object
1 passo: rendering della scena in un FBO e calcolo della quantit di
a
blur
2 passo: downsampling in un altro FBO avente 1/4 delle dimensioni
del precedente
3 passo: applicazione del
245. ltro gaussiano lungo l'asse Y
5 passo: interpolazione lineare tra la scena originale e quella ridotta
e sfumata
A. Theodorou (Federico II) Le moderne GPU C42009 119 / 152
248. eld
1 passo, vertex shader
§
uniform f l o a t focalDistance , focalRange ;
varying f l o a t Blur ;
void main ( v o i d )
f
vec4 PosWV = g l M o d e l V i e w M a t r i x £ gl Vertex ;
B l u r = clamp ( abs( PosWV . z f o c a l D i s t a n c e )
/ focalRange , 0.0 , 1 . 0 ) ;
gl Position = ftransform ();
gl TexCoord [ 0 ] = gl TextureMatrix [ 0 ] £ gl MultiTexCoord0 ;
g
¦ ¥
A. Theodorou (Federico II) Le moderne GPU C42009 120 / 152
251. eld
1 passo, fragment shader
§
varying f l o a t Blur ;
u n i f o r m sampler2D Tex0 ;
void main ( v o i d )
f
g l F r a g D a t a [ 0 ] = vec4 ( t e x t u r e 2 D
( Tex0 , g l T e x C o o r d [ 0 ] . s t ) . rgb , B l u r ) ;
g
¦ ¥
A. Theodorou (Federico II) Le moderne GPU C42009 121 / 152
254. eld
5 passo, fragment shader
§
u n i f o r m sampler2D Tex0 , Tex1 ;
void main ( v o i d )
f
vec4 F u l l r e s = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) ;
vec4 B l u r r e d = t e x t u r e 2 D ( Tex1 , g l T e x C o o r d [ 1 ] . s t ) ;
gl FragColor = Fullres + Fullres . a
£ ( Blurred Fullres );
g
¦ ¥
A. Theodorou (Federico II) Le moderne GPU C42009 122 / 152
258. eld
Depth of Field
Screenshot
(d) Normal + Parallax + DoF
A. Theodorou (Federico II) Le moderne GPU C42009 124 / 152
259. Sorgenti di esempi Deferred shading
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
260. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 125 / 152
261. Sorgenti di esempi Deferred shading
Deferred shading
Confronto (1/3)
Single-pass, multi-light
Per ogni oggetto:
renderizzo l'oggetto ed applico l'illuminazione in un solo shader
Spreco di shading nel caso di super
262. ci invisibili
Mal si integra con le tecniche di shadowing
Poche luci gestibili contemporaneamente
C' bisogno di uno shader diverso per ogni combinazione
e
A. Theodorou (Federico II) Le moderne GPU C42009 126 / 152
263. Sorgenti di esempi Deferred shading
Deferred shading
Confronto (2/3)
Multi-pass, multi-light
Per ogni luce:
Per ogni oggetto in
uenzato:
aggiungo al framebuer il contributo della luce sull'oggetto
Spreco di shading nel caso di super
264. ci invisibili
Le chiamate alla funzioni di disegno possono essere anche
N (luci ) ¢ N (oggetti )
Molto lavoro ripetuto (trasformazione dei vertici, ...)
A. Theodorou (Federico II) Le moderne GPU C42009 127 / 152
265. Sorgenti di esempi Deferred shading
Deferred shading
Confronto (3/3)
Deferred shading
Per ogni oggetto:
memorizzo gli attributi che servono a calcolare l'illuminazione nel G-buer
Per ogni luce:
aggiungo al framebuer il contributo della luce tramite il G-buer
Sempli
266. ca la gestione dell'illuminazione (un solo shader per
memorizzare gli attributi)
Si integra bene con le tecniche di shadowing
Le chiamate alle funzioni di disegno sono al pi N (luci ) + N (oggetti )
u
L'illuminazione diventa un lavoro di post-processing in screen space
Stesso lavoro per calcolare l'illuminazione di una luce grande o di
tante piccole
A. Theodorou (Federico II) Le moderne GPU C42009 128 / 152
267. Sorgenti di esempi Deferred shading
Deferred shading
Implementazione
Requisiti:
Texture
oating point (per la posizione)
Multiple Render Targets (per scrivere tutti gli attributi
contemporaneamente)
Floating-point blending (per il compositing)
Passi:
Si ricavano gli attributi per ogni vertice
Si interpolano per frammento e si scrivono nel G-buer
Si utilizza il G-buer per l'illuminazione
A. Theodorou (Federico II) Le moderne GPU C42009 129 / 152
268. Sorgenti di esempi Deferred shading
Deferred shading
§due fragment shader
I
v a r y i n g vec3 p o s i t i o n , normal ;
u n i f o r m sampler2D Tex0 ;
void main ( v o i d )
f
g l F r a g D a t a [ 0 ] = vec4 ( p o s i t i o n . xyz , 1 . 0 ) ;
g l F r a g D a t a [ 1 ] = vec4 ( n o r m a l i z e ( normal . xyz ) , 0 . 0 ) ;
g l F r a g D a t a [ 2 ] = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) ;
g
¦ ¥
§
u n i f o r m sampler2D Tex0 , Tex1 , Tex2 ;
[...]
vec3 ecPos = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) . xyz ;
vec3 normal = t e x t u r e 2 D ( Tex1 , g l T e x C o o r d [ 1 ] . s t ) . xyz ;
vec4 colorMap = t e x t u r e 2 D ( Tex2 , g l T e x C o o r d [ 2 ] . s t ) ;
[...]
¦ ¥
A. Theodorou (Federico II) Le moderne GPU C42009 130 / 152
269. Sorgenti di esempi Deferred shading
Deferred shading
Screenshot
A. Theodorou (Federico II) Le moderne GPU C42009 131 / 152
270. Sorgenti di esempi High Dynamic Range Imaging
1 Introduzione
Primo approccio
Panoramica storica
2 La GPU in azione
Potenza elaborativa
Applicazioni general purpose
Applicazioni tradizionali
3 Cenni sulla programmazione
Supporto OpenGL
GL Shading Language
4 Sorgenti di esempi
Gouraud e Phong shading
Normal e parallax mapping
Toon shading
Depth of
271. eld
Deferred shading
High Dynamic Range Imaging
A. Theodorou (Federico II) Le moderne GPU C42009 132 / 152
272. Sorgenti di esempi High Dynamic Range Imaging
HDRI
Teoria
Immagini dal rapporto di contrasto molto elevato
Consente un'impostazione accurata dei valori di esposizione
Si presta facilmente all'utilizzo con algoritmi di adattamento
temporale dell'esposizione
Permette di implementare un eetto di bloom (o glow) realistico
Per la visualizzazione a schermo fondamentale il tone-mapping
e
A. Theodorou (Federico II) Le moderne GPU C42009 133 / 152