132

Le moderne GPU - LD2009

Embed Size (px)

DESCRIPTION

Le Moderne GPU: Cosa è possibile fare oggi e cenni su come farlo. Presentata a Napoli durante il Linux Day 2009 il giorno 24 Ottobre 2009. Versione ridotta ed aggiornata di quella presentata in aula C4.

Citation preview

Page 1: Le moderne GPU - LD2009

Le moderne GPU

Cosa �e possibile fare oggi e cenni su come farlo

Angelo "Encelo\ Theodorou

Linux Day 2009

24 Ottobre 2009

A. Theodorou (LD2009) Le moderne GPU 24/10/09 1 / 105

Page 2: Le moderne GPU - LD2009

Sommario

Sommario

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneGL Shading Language 1.20

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading

A. Theodorou (LD2009) Le moderne GPU 24/10/09 2 / 105

Page 3: Le moderne GPU - LD2009

Sommario

Sommario

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneGL Shading Language 1.20

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading

A. Theodorou (LD2009) Le moderne GPU 24/10/09 2 / 105

Page 4: Le moderne GPU - LD2009

Sommario

Sommario

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneGL Shading Language 1.20

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading

A. Theodorou (LD2009) Le moderne GPU 24/10/09 2 / 105

Page 5: Le moderne GPU - LD2009

Sommario

Sommario

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneGL Shading Language 1.20

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading

A. Theodorou (LD2009) Le moderne GPU 24/10/09 2 / 105

Page 6: Le moderne GPU - LD2009

Introduzione Primo approccio

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneGL Shading Language 1.20

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading

A. Theodorou (LD2009) Le moderne GPU 24/10/09 3 / 105

Page 7: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

Vertex, Geometry e Fragment shader (architettura uni�cata)

Tessellation engine (SM 5.0)

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

Decine di GB/s di banda da e verso la VRAM

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105

Page 8: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

Vertex, Geometry e Fragment shader (architettura uni�cata)

Tessellation engine (SM 5.0)

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

Decine di GB/s di banda da e verso la VRAM

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105

Page 9: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

Vertex, Geometry e Fragment shader (architettura uni�cata)

Tessellation engine (SM 5.0)

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

Decine di GB/s di banda da e verso la VRAM

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105

Page 10: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

Vertex, Geometry e Fragment shader (architettura uni�cata)

Tessellation engine (SM 5.0)

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

Decine di GB/s di banda da e verso la VRAM

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105

Page 11: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

Vertex, Geometry e Fragment shader (architettura uni�cata)

Tessellation engine (SM 5.0)

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

Decine di GB/s di banda da e verso la VRAM

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105

Page 12: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

Vertex, Geometry e Fragment shader (architettura uni�cata)

Tessellation engine (SM 5.0)

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

Decine di GB/s di banda da e verso la VRAM

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105

Page 13: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

Vertex, Geometry e Fragment shader (architettura uni�cata)

Tessellation engine (SM 5.0)

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

Decine di GB/s di banda da e verso la VRAM

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105

Page 14: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

Vertex, Geometry e Fragment shader (architettura uni�cata)

Tessellation engine (SM 5.0)

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

Decine di GB/s di banda da e verso la VRAM

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105

Page 15: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

Vertex, Geometry e Fragment shader (architettura uni�cata)

Tessellation engine (SM 5.0)

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

Decine di GB/s di banda da e verso la VRAM

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou (LD2009) Le moderne GPU 24/10/09 4 / 105

Page 16: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLa pipeline �ssa

A. Theodorou (LD2009) Le moderne GPU 24/10/09 5 / 105

Page 17: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLa pipeline programmabile (SM 4.0)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 6 / 105

Page 18: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

Viene eseguito in parallelo su pi�u unit�a autonome

Pu�o modi�care un solo elemento alla volta (gathering/scattering)

Pu�o intervenire in quattro fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti

A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105

Page 19: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

Viene eseguito in parallelo su pi�u unit�a autonome

Pu�o modi�care un solo elemento alla volta (gathering/scattering)

Pu�o intervenire in quattro fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti

A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105

Page 20: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

Viene eseguito in parallelo su pi�u unit�a autonome

Pu�o modi�care un solo elemento alla volta (gathering/scattering)

Pu�o intervenire in quattro fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti

A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105

Page 21: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

Viene eseguito in parallelo su pi�u unit�a autonome

Pu�o modi�care un solo elemento alla volta (gathering/scattering)

Pu�o intervenire in quattro fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti

A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105

Page 22: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

Viene eseguito in parallelo su pi�u unit�a autonome

Pu�o modi�care un solo elemento alla volta (gathering/scattering)

Pu�o intervenire in quattro fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti

A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105

Page 23: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

Viene eseguito in parallelo su pi�u unit�a autonome

Pu�o modi�care un solo elemento alla volta (gathering/scattering)

Pu�o intervenire in quattro fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti

A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105

Page 24: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

Viene eseguito in parallelo su pi�u unit�a autonome

Pu�o modi�care un solo elemento alla volta (gathering/scattering)

Pu�o intervenire in quattro fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti

A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105

Page 25: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

Viene eseguito in parallelo su pi�u unit�a autonome

Pu�o modi�care un solo elemento alla volta (gathering/scattering)

Pu�o intervenire in quattro fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveTassellazione (SM 5.0)Colorazione dei frammenti

A. Theodorou (LD2009) Le moderne GPU 24/10/09 7 / 105

Page 26: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLo stream processor

Esegue un qualsiasi tipo di shader (architettura uni�cata)

Viene istruito da un dispatcher che gestisce il work-load

Opera seguendo un design superscalare

Lavora in singola e doppia precisione (IEEE-754 compliant)

Segue il paradigma dello stream processing (SPMD, kernel, stream)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 8 / 105

Page 27: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLo stream processor

Esegue un qualsiasi tipo di shader (architettura uni�cata)

Viene istruito da un dispatcher che gestisce il work-load

Opera seguendo un design superscalare

Lavora in singola e doppia precisione (IEEE-754 compliant)

Segue il paradigma dello stream processing (SPMD, kernel, stream)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 8 / 105

Page 28: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLo stream processor

Esegue un qualsiasi tipo di shader (architettura uni�cata)

Viene istruito da un dispatcher che gestisce il work-load

Opera seguendo un design superscalare

Lavora in singola e doppia precisione (IEEE-754 compliant)

Segue il paradigma dello stream processing (SPMD, kernel, stream)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 8 / 105

Page 29: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLo stream processor

Esegue un qualsiasi tipo di shader (architettura uni�cata)

Viene istruito da un dispatcher che gestisce il work-load

Opera seguendo un design superscalare

Lavora in singola e doppia precisione (IEEE-754 compliant)

Segue il paradigma dello stream processing (SPMD, kernel, stream)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 8 / 105

Page 30: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioLo stream processor

Esegue un qualsiasi tipo di shader (architettura uni�cata)

Viene istruito da un dispatcher che gestisce il work-load

Opera seguendo un design superscalare

Lavora in singola e doppia precisione (IEEE-754 compliant)

Segue il paradigma dello stream processing (SPMD, kernel, stream)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 8 / 105

Page 31: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioArchitettura a shader uni�cati

Figura: Architettura discreta

Figura: Architettura uni�cataA. Theodorou (LD2009) Le moderne GPU 24/10/09 9 / 105

Page 32: Le moderne GPU - LD2009

Introduzione Primo approccio

Primo approccioTassellazione

(a) Wireframe senza tassellazione (b) Wireframe con tassellazione

A. Theodorou (LD2009) Le moderne GPU 24/10/09 10 / 105

Page 33: Le moderne GPU - LD2009

Introduzione Panoramica storica

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneGL Shading Language 1.20

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading

A. Theodorou (LD2009) Le moderne GPU 24/10/09 11 / 105

Page 34: Le moderne GPU - LD2009

Introduzione Panoramica storica

Panoramica storicaQuadro generale

1� Generazione (1995): accelerazione 3D di base

2� Generazione (1999): Transform & Lighting in hardware

3� Generazione (2001): Programmabilit�a a livello dei vertici e,limitatamente, a quello dei frammenti (SM 1.0)

4� Generazione (2002): Piena programmabilit�a a livello dei frammenti(SM 2.0)

5� Generazione (2004): Meno limitazioni, molta pi�u libert�a diprogrammazione della pipeline (SM 3.0)

6� Generazione (2006): Programmabilit�a a livello delle primitive,uni�cazione delle unit�a di calcolo (SM 4.0)

7� Generazione (2008): Un'evoluzione prestazionale (SM 4.1)

8� Generazione (2009): Tassellazione programmabile (SM 5.0)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 12 / 105

Page 35: Le moderne GPU - LD2009

Introduzione Panoramica storica

Panoramica storicaLe prime generazioni

OpenGL 1.1 e Direct3D 5.001/08/1997: Nvidia Riva 128 (NV3, 3.5M transistor)01/08/1998: Nvidia Riva TNT (NV4, 7M transistor)01/11/1998: Ati Rage 128 (Rage 128, 8M transistor)OpenGL 1.3 e Direct3D 7.001/10/1999: Nvidia GeForce 256 (NV10, 23M transistor)15/06/2000: ATI Radeon (R100, 30M transistor)26/04/2000: Nvidia GeForce2 GTS (NV15, 25M transistor)OpenGL 1.4 e Direct3D 8.0/8.101/05/2001: Nvidia GeForce 3 (NV20, 57M transistor)14/08/2001: ATI Radeon 8500 (R200, 60M transistor)04/02/2002: Nvidia GeForce4 Ti 4600 (NV25, 63M transistor)

(c)NV3

(d)NV4

(e)Rage128

(f)NV10

(g)R100

(h)NV15

(i) NV20 (j)R200

(k)NV25

A. Theodorou (LD2009) Le moderne GPU 24/10/09 13 / 105

Page 36: Le moderne GPU - LD2009

Introduzione Panoramica storica

Panoramica storicaLa quarta generazione

19/08/2002: ATI Radeon 9700 PRO (R300, 110M transistor)01/05/2003: Nvidia GeForce FX 5800 (NV30, 125M transistor)04/05/2004: ATI Radeon X800 PRO (R420, 160M transistor)! OpenGL 1.5/2.0 e Direct3D 9.0b

Vertex Shader 2.0

Pixel Shader 2.0 (programmabili direttamente)

Precisione FP16/FP32

(l) R300 (m) NV30 (n) R420

A. Theodorou (LD2009) Le moderne GPU 24/10/09 14 / 105

Page 37: Le moderne GPU - LD2009

Introduzione Panoramica storica

Panoramica storicaLa quinta generazione

14/04/2004: Nvidia GeForce 6800 (NV40, 222M transistor)22/06/2005: Nvidia GeForce 7800 GTX (G70, ex-NV47, 278M transistor)05/10/2005: ATI Radeon X1800 XT (R520, 321M transistor)! OpenGL 2.0 e Direct3D 9.0c

Vertex e Pixel Shader 3.0Pi�u lunghi e con pi�u registri a disposizioneGestione di cicli dinamiciTexture fetch all'interno dei vertex shader

Multiple Render TargetsAccelerazione HW per ussi video HD

(o) NV40 (p) G70 (q) R520

A. Theodorou (LD2009) Le moderne GPU 24/10/09 15 / 105

Page 38: Le moderne GPU - LD2009

Introduzione Panoramica storica

Panoramica storicaLa sesta generazione

08/11/2006: Nvidia GeForce 8800 GTX (G80, 681M transistor)14/05/2007: ATI Radeon HD 2900 XT (R600XT, 700M transistor)11/12/2007: Nvidia GeForce 8800 GTS 512 (G92, 754M transistor)! OpenGL 2.0/2.1 e Direct3D 10

Vertex e Pixel Shader 4.0

Geometry Shader 4.0

Archittettura uni�cata

Design superscalare

(r) G80 (s)R600XT

(t) G92

A. Theodorou (LD2009) Le moderne GPU 24/10/09 16 / 105

Page 39: Le moderne GPU - LD2009

Introduzione Panoramica storica

Panoramica storicaLa settima generazione

19/11/2007: ATI Radeon HD 3870 (RV670XT, 666M transistor)17/06/2008: Nvidia GeForce GTX 280 (G200, 1400M transistor)25/06/2008: ATI Radeon HD 4870 (RV770XT, 956M transistor)! OpenGL 2.1/3.0/3.1 e Direct3D 10/10.1

Shader Model 4.1/Direct3D 10.1 (solo ATI)

Supporto alla doppia precisione

Sempre pi�u stream processor e larghezza di banda

Un'evoluzione pi�u che una rivoluzione

(u)RV670XT

(v) G200 (w)RV770XT

A. Theodorou (LD2009) Le moderne GPU 24/10/09 17 / 105

Page 40: Le moderne GPU - LD2009

Introduzione Panoramica storica

Panoramica storicaL'ottava generazione

23/09/2009: ATI Radeon HD5870 (R870, 2150M transistor)xx/xx/2010: Nvidia Fermi (G300, 3000M transistor)! OpenGL 2.1/3.2 e Direct3D 11

Shader Model 5.0

Tesselletion engine

Incremento nelle performance doppia precisione

(x) RV870 (y) G300

A. Theodorou (LD2009) Le moderne GPU 24/10/09 18 / 105

Page 41: Le moderne GPU - LD2009

La GPU in azione Potenza elaborativa

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneGL Shading Language 1.20

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading

A. Theodorou (LD2009) Le moderne GPU 24/10/09 19 / 105

Page 42: Le moderne GPU - LD2009

La GPU in azione Potenza elaborativa

Potenza elaborativaRiferimenti numerici

Processore Core Transistor (M) Frequenza (MHz)York�eld (QX9970) 4 core 220+600 3200Xenon (XBox 360) 3 core 165 3200Cell (PS3) 1 PPE+6 SPE 234 3200RV870 (HD5870) 1600 sp 2154 850GT200b (GTX285) 240 1400 1476R700 (HD4870X2) 800x2 sp 956x2 750GT200b (GTX295) 240x2 1400x2 1242Processore SP (GFLOPS) DP (GFLOPS) Banda (GB/s)York�eld (QX9970) 51.1 25.5 12.8Xenon (XBox 360) 115.2 12 21.6Cell (PS3) 204 15 12.8RV870 (HD5870) 2720 544 153.6GT200b (GTX285) 1209.5 88.8 159R700 (HD4870X2) 2400 480 115.2x2GT200b (GTX295) 1788 131.3 111.9x2

A. Theodorou (LD2009) Le moderne GPU 24/10/09 20 / 105

Page 43: Le moderne GPU - LD2009

La GPU in azione Potenza elaborativa

Potenza elaborativaGPU vs CPU

Il Commissariat �a l'�Energie Atomique ha ordinato un cluster ibrido da 295 TFlops:

103 TFlops derivanti dalle CPU

192 TFlops derivanti dalle GPU

A. Theodorou (LD2009) Le moderne GPU 24/10/09 21 / 105

Page 44: Le moderne GPU - LD2009

La GPU in azione Potenza elaborativa

Potenza elaborativaLegge di Moore

A. Theodorou (LD2009) Le moderne GPU 24/10/09 22 / 105

Page 45: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneGL Shading Language 1.20

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading

A. Theodorou (LD2009) Le moderne GPU 24/10/09 23 / 105

Page 46: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUIl GPGPU

GPGPU: General-Purpose computation on GPUs

Sito di riferimento: http://www.gpgpu.org

Speci�che a standard aperto: OpenCL (Open Computing Language)

Librerie dei produttori di HW: CUDA e Brook++/CAL

Middleware �sico: Nvidia PhysX (ex Ageia)

Stage nella pipeline Direct3D 11: Compute shader

Vecchie librerie open-source: BrookGPU, Sh

A. Theodorou (LD2009) Le moderne GPU 24/10/09 24 / 105

Page 47: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni general purposeNvidia Tesla: soluzione ad hoc

Computer desktop o rack che montano pi�u schede videoPensati speci�catamente per applicazioni GPGPU tramite CUDA

La controparte AMD �e chiamata FireStreamA. Theodorou (LD2009) Le moderne GPU 24/10/09 25 / 105

Page 48: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni general purposeFast Fourier Transforms

CPU: Intel Core 2 Quad, 2.4GHz (FFTW)

GPU: Nvidia GeForce 8800 GTX (CUDA e CUFFT)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 26 / 105

Page 49: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUNvidia Gelato

Renderer ad accelerazione hardware non in tempo reale

A. Theodorou (LD2009) Le moderne GPU 24/10/09 27 / 105

Page 50: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUFurryball

Renderer GPU in tempo reale per Autodesk MayaA. Theodorou (LD2009) Le moderne GPU 24/10/09 28 / 105

Page 51: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUOpenVIDIA

Computer vision con supporto all'accelerazione della GPU

A. Theodorou (LD2009) Le moderne GPU 24/10/09 29 / 105

Page 52: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUFluidodinamica

Calcolo del sistema di equazioni di�erenziali di Navier-Stokes sulla GPU

A. Theodorou (LD2009) Le moderne GPU 24/10/09 30 / 105

Page 53: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUGenerazione ed erosione di terreni

Fault Formation Circles Perlin NoisePentium 4 3.0 GHz 10612 ms 650803 ms 10033 msGeForce 7600GT 1090 ms 1356 ms 113 msGeForce 8600GT 915 ms 952 ms 46 ms

A. Theodorou (LD2009) Le moderne GPU 24/10/09 31 / 105

Page 54: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPURicostruzione tomogra�ca

FASTRA: PC consumer, monta 4 schede video 9800x2 (8 GPU), (Maggio2008, meno di 4000 Euro)

CalcUA: Supercomputer dell'Univerist�a di Antwerp, 256 nodi (512 CPU

Opteron 250), (Marzo 2005, 3.5M di Euro)A. Theodorou (LD2009) Le moderne GPU 24/10/09 32 / 105

Page 55: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUFolding@Home

CPU: 4 mol/day

PS3: 100 mol/day

HD 3870: 170 mol/day

GTX 280: 500 mol/day

A. Theodorou (LD2009) Le moderne GPU 24/10/09 33 / 105

Page 56: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUPassword recovery

ElcomSoft Distributed Password Recovery

http://www.elcomsoft.com/edpr.html

A. Theodorou (LD2009) Le moderne GPU 24/10/09 34 / 105

Page 57: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUNurien tech demo

Fisica dei capelli e degli abiti accelerata dalla GPU

A. Theodorou (LD2009) Le moderne GPU 24/10/09 35 / 105

Page 58: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUFroblins Demo

L'IA degli oltre tremila agenti �e gestita dalla GPU

A. Theodorou (LD2009) Le moderne GPU 24/10/09 36 / 105

Page 59: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUVideo encoder

Badaboom ed Avivo Converter sfruttano la GPU durante la codi�ca video

A. Theodorou (LD2009) Le moderne GPU 24/10/09 37 / 105

Page 60: Le moderne GPU - LD2009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUUlteriori applicazioni

60 su 621 applicazioni dal sito CUDA Zone (Ottobre 2009)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 38 / 105

Page 61: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneGL Shading Language 1.20

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading

A. Theodorou (LD2009) Le moderne GPU 24/10/09 39 / 105

Page 62: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliLa Game Industry

Uno dei motori trainanti dell'economia statunitense con miliardi didollari di fatturato annuale

Nel 2008 ha superato il mercato mondiale dell'home video con oltre32 miliardi di dollari

Il settore dell'intrattenimento �e meno soggetto alla recente recessioneeconomica

Causa principale della "corsa agli armamenti\ nel settore dell'HW

Uno dei principali campi applicativi della ricerca nella computergra�ca

Porta ad una ricaduta tecnologica anche in altri settori (educativo,medico, industriale, militare)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 40 / 105

Page 63: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliLa Game Industry

Uno dei motori trainanti dell'economia statunitense con miliardi didollari di fatturato annuale

Nel 2008 ha superato il mercato mondiale dell'home video con oltre32 miliardi di dollari

Il settore dell'intrattenimento �e meno soggetto alla recente recessioneeconomica

Causa principale della "corsa agli armamenti\ nel settore dell'HW

Uno dei principali campi applicativi della ricerca nella computergra�ca

Porta ad una ricaduta tecnologica anche in altri settori (educativo,medico, industriale, militare)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 40 / 105

Page 64: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliLa Game Industry

Uno dei motori trainanti dell'economia statunitense con miliardi didollari di fatturato annuale

Nel 2008 ha superato il mercato mondiale dell'home video con oltre32 miliardi di dollari

Il settore dell'intrattenimento �e meno soggetto alla recente recessioneeconomica

Causa principale della "corsa agli armamenti\ nel settore dell'HW

Uno dei principali campi applicativi della ricerca nella computergra�ca

Porta ad una ricaduta tecnologica anche in altri settori (educativo,medico, industriale, militare)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 40 / 105

Page 65: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliLa Game Industry

Uno dei motori trainanti dell'economia statunitense con miliardi didollari di fatturato annuale

Nel 2008 ha superato il mercato mondiale dell'home video con oltre32 miliardi di dollari

Il settore dell'intrattenimento �e meno soggetto alla recente recessioneeconomica

Causa principale della "corsa agli armamenti\ nel settore dell'HW

Uno dei principali campi applicativi della ricerca nella computergra�ca

Porta ad una ricaduta tecnologica anche in altri settori (educativo,medico, industriale, militare)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 40 / 105

Page 66: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliLa Game Industry

Uno dei motori trainanti dell'economia statunitense con miliardi didollari di fatturato annuale

Nel 2008 ha superato il mercato mondiale dell'home video con oltre32 miliardi di dollari

Il settore dell'intrattenimento �e meno soggetto alla recente recessioneeconomica

Causa principale della "corsa agli armamenti\ nel settore dell'HW

Uno dei principali campi applicativi della ricerca nella computergra�ca

Porta ad una ricaduta tecnologica anche in altri settori (educativo,medico, industriale, militare)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 40 / 105

Page 67: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliLa Game Industry

Uno dei motori trainanti dell'economia statunitense con miliardi didollari di fatturato annuale

Nel 2008 ha superato il mercato mondiale dell'home video con oltre32 miliardi di dollari

Il settore dell'intrattenimento �e meno soggetto alla recente recessioneeconomica

Causa principale della "corsa agli armamenti\ nel settore dell'HW

Uno dei principali campi applicativi della ricerca nella computergra�ca

Porta ad una ricaduta tecnologica anche in altri settori (educativo,medico, industriale, militare)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 40 / 105

Page 68: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliFinal Night Round 3 (20/2/2006)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 41 / 105

Page 69: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliGears of War (Unreal Engine 3, 9/11/2006)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 42 / 105

Page 70: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliCrysis (CryEngine 2, 13/11/2007)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 43 / 105

Page 71: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliAssassin's Creed (Scimitar Engine, 14/11/2007)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 44 / 105

Page 72: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliMass E�ect (Unreal Engine 3, 20/11/2007)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 45 / 105

Page 73: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliDead Space (Unreal Engine 3, 14/10/2008)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 46 / 105

Page 74: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliFar Cry 2 (Dunia Engine, 21/10/2008)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 47 / 105

Page 75: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliFallout 3 (Gamebryo Engine, 28/10/2008)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 48 / 105

Page 76: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliMirror's Edge (Unreal Engine 3, 12/11/2008)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 49 / 105

Page 77: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliPrince of Persia (Anvil Engine, 2/12/2008)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 50 / 105

Page 78: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliKillzone 2 (25/2/2009)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 51 / 105

Page 79: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliGhostbuster: The Videogame (Infernal Engine, 16/6/2009)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 52 / 105

Page 80: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliBatman: Akrham Asylum (Unreal Engine 3, 25/8/2009)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 53 / 105

Page 81: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliBorderlands (Unreal Engine 3, 20/10/2009)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 54 / 105

Page 82: Le moderne GPU - LD2009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliR.A.G.E. (id Tech 5, 2010)

A. Theodorou (LD2009) Le moderne GPU 24/10/09 55 / 105

Page 83: Le moderne GPU - LD2009

Cenni sulla programmazione GL Shading Language 1.20

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneGL Shading Language 1.20

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading

A. Theodorou (LD2009) Le moderne GPU 24/10/09 56 / 105

Page 84: Le moderne GPU - LD2009

Cenni sulla programmazione GL Shading Language 1.20

GL Shading Language 1.20Sommario

Tipi di dato

Inizializzatori e costruttori

Quali�catori

Flusso di controllo

Swizzling

Operazioni component-wise

Funzioni built-in

Variabili built-in

Codice di esempio

A. Theodorou (LD2009) Le moderne GPU 24/10/09 57 / 105

Page 85: Le moderne GPU - LD2009

Cenni sulla programmazione GL Shading Language 1.20

GL Shading Language 1.20Tipi di dato

Scalari: float, int, bool

Vettori: fe*|i|bgvecf2|3|4g, oating-point, interi o booleani

Matrici: matf2|3|4g, matrici quadrate oating-point

Sampler: samplerf1|2|3gDfe*|Cube|Shadowg, permettono die�ettuare il fetch da una texture

Supporto a strutture ed array

A. Theodorou (LD2009) Le moderne GPU 24/10/09 58 / 105

Page 86: Le moderne GPU - LD2009

Cenni sulla programmazione GL Shading Language 1.20

GL Shading Language 1.20Inizializzatori e costruttori

f l o a t a , b = 3 . 0 , c ;

const i n t S i z e = 4 ; // i n i t i a l i z e r i s r e q u i r e d

vec3 c o l o r = vec3 ( 0 . 2 , 0 . 5 , 0 . 8 ) ;vec4 c o l o r 4 = vec4 ( c o l o r , 1 . 0 )

mat2 m = mat2 ( 1 . 0 , 2 . 0 , 3 . 0 , 4 . 0 ) ;

vec3 v = vec3 ( 0 . 6 ) ;� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 59 / 105

Page 87: Le moderne GPU - LD2009

Cenni sulla programmazione GL Shading Language 1.20

GL Shading Language 1.20Quali�catori

attribute

Informazioni destinate al vertex shader che variano spessonell'applicazione, anche tra la de�nizione di un vertice e l'altro.

uniform

Informazioni che variano meno spesso, destinate al vertex o alfragment shader.

varying

Informazioni passate per interpolazione dal vertex al fragment shader.

const

Per variabili costanti dichiarate al momento della compilazione, comein C.

Nota: A partire da GLSL 1.30 si usano le parole chiave in ed out al posto di

attribute e varying.

A. Theodorou (LD2009) Le moderne GPU 24/10/09 60 / 105

Page 88: Le moderne GPU - LD2009

Cenni sulla programmazione GL Shading Language 1.20

GL Shading Language 1.20Flusso di controllo

Cicli for, while e do-while

Presenza delle keyword break e continue

Selezioni tramite if, if-else, ed operatore ternario :?

Presenza della keyword discard, per abortire l'esecuzione delfragment shader per un certo frammento

Assenza del supporto per goto e switch

Nota: Il costrutto switch/case/default �e presente a partire da GLSL 1.30.

A. Theodorou (LD2009) Le moderne GPU 24/10/09 61 / 105

Page 89: Le moderne GPU - LD2009

Cenni sulla programmazione GL Shading Language 1.20

GL Shading Language 1.20Swizzling

vec4 v4 ;v4 . rgba ; // i s a vec4 and the same as j u s t u s i n g v4v4 . rgb ; // i s a vec3v4 . b ; // i s a f l o a tv4 . xy ; // i s a vec2

vec4 pos = vec4 ( 1 . 0 , 2 . 0 , 3 . 0 , 4 . 0 ) ;vec4 sw i z = pos . wzyx ; // sw i z = ( 4 . 0 , 3 . 0 , 2 . 0 , 1 . 0 )vec4 dup = pos . xxyy ; // dup = (1 . 0 , 1 . 0 , 2 . 0 , 2 . 0 )

vec4 pos = vec4 ( 1 . 0 , 2 . 0 , 3 . 0 , 4 . 0 ) ;pos . xw = vec2 ( 5 . 0 , 6 . 0 ) ; // pos = ( 5 . 0 , 2 . 0 , 3 . 0 , 6 . 0 )pos . wx = vec2 ( 7 . 0 , 8 . 0 ) ; // pos = ( 8 . 0 , 2 . 0 , 3 . 0 , 7 . 0 )� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 62 / 105

Page 90: Le moderne GPU - LD2009

Cenni sulla programmazione GL Shading Language 1.20

GL Shading Language 1.20Operazioni component-wise

vec3 v , u ;f l o a t f ;v = u + f ;

// v . x = u . x + f ;// [ . . . ]

vec3 v , u , w;w = v + u ;

// w. x = v . x + u . x ;// [ . . . ]� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 63 / 105

Page 91: Le moderne GPU - LD2009

Cenni sulla programmazione GL Shading Language 1.20

GL Shading Language 1.20Funzioni built-in (1/2)

Supportano l'overloading degli argomenti

Trigonometriche: radians(), degree(), sin(), cos(), tan(), ...

Esponenziali: pow(), exp(), log(), sqrt(), inversesqrt(), ...

Comuni: abs(), sign(), floor(), ceil(), min(), max(),clamp(), mix(), ...

Geometriche: length(), distance(), dot(), cross(),normalize(), reflect(), refract(), ...

A. Theodorou (LD2009) Le moderne GPU 24/10/09 64 / 105

Page 92: Le moderne GPU - LD2009

Cenni sulla programmazione GL Shading Language 1.20

GL Shading Language 1.20Funzioni built-in (2/2)

Supportano l'overloading degli argomenti

Matriciali: matrixCompMult()

Relazioni tra vettori: lessThan(), greatherThan(), equal(),notEqual(), ...

Accesso alle texture: texturef1|2|3gD, texturef1|2|3gDProj,texturef1|2|3gDLod, texturef1|2|3gDCube, shadowf1|2|3gD, ...

Solo frammenti: dFdx(), dFdy(), fwidth()

Rumore: noisef1|2|3|4g()

A. Theodorou (LD2009) Le moderne GPU 24/10/09 65 / 105

Page 93: Le moderne GPU - LD2009

Cenni sulla programmazione GL Shading Language 1.20

GL Shading Language 1.20Variabili built-in

Input del vertex shader: gl Color, gl Normal, gl Vertex,gl MultiTexCoordf0..Ng, ...

Output del vertex shader: gl Position, ...

Input del fragment shader: gl FragCoord, gl FrontFacing

Output del fragment shader: gl FragColor, gl FragData[],gl FragDepth

Variabili uniformi comuni: gl ModelViewMatrix,gl ProjectionMatrix, gl ClipPlane, gl Point,gl FrontMaterial, gl LightSource[], gl Fog, ...

Nota: Dalla versione 1.40 in poi la maggior parte di esse �e disponibile solo in

modalit�a compatible

A. Theodorou (LD2009) Le moderne GPU 24/10/09 66 / 105

Page 94: Le moderne GPU - LD2009

Cenni sulla programmazione GL Shading Language 1.20

GL Shading Language 1.20Codice di esempio

Listing 1: Vertex shader�

void main ( void )f

g l P o s i t i o n = f t r a n s f o rm ( ) ; // dep r e ca t ed d a l l a 1 .30

// g l P o s i t i o n = g l P r o j e c t i o nMa t r i x� g l Mode lV iewMatr i x � g l V e r t e x ;

// g l P o s i t i o n = g l Mode lV i ewP ro j e c t i o nMa t r i x� g l V e r t e x ;

g� �

Listing 2: Fragment shader�

void main ( void )f

g l F r a gCo l o r = g l C o l o r ;g� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 67 / 105

Page 95: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneGL Shading Language 1.20

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading

A. Theodorou (LD2009) Le moderne GPU 24/10/09 68 / 105

Page 96: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingBlinn-Phong re ection model

A. Theodorou (LD2009) Le moderne GPU 24/10/09 69 / 105

Page 97: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingGouraud shading

Vertex shader

Trasforma il verticeCalcola l'attenuazioneCalcola i tre contributi del modello di Phong

Fragment shader

Riceve l'intensit�a del vertice interpolataAssegna il colore del frammento in base a questa

Nota: Il prossimo esempio emula una point light come da pipeline �ssa

A. Theodorou (LD2009) Le moderne GPU 24/10/09 70 / 105

Page 98: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingVertex shader (1/3)

vary ing vec4 i n t e n s i t y ;

void main ( void )f

vec4 ambientG loba l , ambient , d i f f u s e ;vec3 ecPos , normal , l i g h tD i r , h a l fVe c t o r , aux ;f l o a t NdotL , NdotHV , d i s t , a t t ;

ecPos = vec3 ( g l Mode lV iewMatr i x � g l V e r t e x ) ;normal = no rma l i z e ( g l No rma lMat r i x � g l Norma l ) ;aux = g l L i g h t S o u r c e [ 0 ] . p o s i t i o n . xyz � ecPos ;d i s t = l e n g t h ( aux ) ;l i g h t D i r = no rma l i z e ( aux ) ;

� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 71 / 105

Page 99: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingVertex shader (2/3)

a t t = 1 .0 / ( g l L i g h t S o u r c e [ 0 ] . c o n s t a n tA t t e nua t i o n+ g l L i g h t S o u r c e [ 0 ] . l i n e a r A t t e n u a t i o n � d i s t+ g l L i g h t S o u r c e [ 0 ] . q u a d r a t i cA t t e n u a t i o n � d i s t � d i s t ) ;

amb i en tG loba l = g l L i gh tMode l . ambient� g l F r o n tMa t e r i a l . ambient ;

ambient = g l L i g h t S o u r c e [ 0 ] . ambient� g l F r o n tMa t e r i a l . ambient ;

i n t e n s i t y = amb i en tG loba l + ambient � a t t ;

d i f f u s e = g l L i g h t S o u r c e [ 0 ] . d i f f u s e� g l F r o n tMa t e r i a l . d i f f u s e ;

� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 72 / 105

Page 100: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingVertex shader (3/3)

NdotL = dot ( normal , l i g h t D i r ) ;

i f ( NdotL > 0 . 0 ) fh a l f V e c t o r = no rma l i z e ( l i g h t D i r + no rma l i z e ( ecPos ) ) ;i n t e n s i t y += a t t � ( d i f f u s e � NdotL ) ;NdotHV = dot ( normal , h a l f V e c t o r ) ;i n t e n s i t y += a t t � g l L i g h t S o u r c e [ 0 ] . s p e c u l a r� g l F r o n tMa t e r i a l . s p e c u l a r� pow(NdotHV , g l F r o n tMa t e r i a l . s h i n i n e s s ) ;

g

g l P o s i t i o n = f t r a n s f o rm ( ) ;g l TexCoord [ 0 ] = g l T e x t u r eMa t r i x [ 0 ] � g l Mu l t iTexCoord0 ;

g� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 73 / 105

Page 101: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingFragment shader

vary ing vec4 i n t e n s i t y ;uniform sampler2D Tex0 ;

void main ( void )f

vec4 colorMap = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;g l F r a gCo l o r = i n t e n s i t y � colorMap ;

g� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 74 / 105

Page 102: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingScreenshot

(a) GLSL parallax (b) GLSL multilight

Per-pixel lighting

A. Theodorou (LD2009) Le moderne GPU 24/10/09 75 / 105

Page 103: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingPhong shading

Vertex shader

Trasforma il verticeCalcola il valore del contributo d'ambiente e quello di�uso di partenza

Fragment shader

Riceve la normale e l'eye vector interpolatiCalcola l'attenuazioneCalcola i tre contributi �nali del modello di PhongCalcola il valore di intensit�a luminosa del frammentoAssegna il colore del frammento in base a questo

A. Theodorou (LD2009) Le moderne GPU 24/10/09 76 / 105

Page 104: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingVertex shader (1/2)

vary ing vec4 ambientG loba l , ambient , d i f f u s e ;vary ing vec3 normal , ecPos ;

void main ( void )f

normal = g l No rma lMat r i x � g l Norma l ;ecPos = vec3 ( g l Mode lV iewMatr i x � g l V e r t e x ) ;

amb i en tG loba l = g l L i gh tMode l . ambient� g l F r o n tMa t e r i a l . ambient ;

� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 77 / 105

Page 105: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingVertex shader (2/2)

amb i en tG loba l = g l L i gh tMode l . ambient� g l F r o n tMa t e r i a l . ambient ;

ambient = g l L i g h t S o u r c e [ 0 ] . ambient� g l F r o n tMa t e r i a l . ambient ;

d i f f u s e = g l L i g h t S o u r c e [ 0 ] . d i f f u s e� g l F r o n tMa t e r i a l . d i f f u s e ;

g l P o s i t i o n = f t r a n s f o rm ( ) ;g l TexCoord [ 0 ] = g l T e x t u r eMa t r i x [ 0 ] � g l Mu l t iTexCoord0 ;

g� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 78 / 105

Page 106: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingFragment shader (1/3)

vary ing vec3 normal , ecPos ;vary ing vec4 ambientG loba l , ambient , d i f f u s e ;uniform sampler2D Tex0 ;

void main ( void )f

vec3 n , aux , l i g h tD i r , r e fVec ;f l o a t NdotL , RdotE ;f l o a t d i s t , a t t ;

vec4 colorMap = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 79 / 105

Page 107: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingFragment shader (2/3)

n = no rma l i z e ( normal ) ;aux = g l L i g h t S o u r c e [ 0 ] . p o s i t i o n . xyz � ecPos ;d i s t = l e n g t h ( aux ) ;l i g h t D i r = no rma l i z e ( aux ) ;

a t t = 1 .0 / ( g l L i g h t S o u r c e [ 0 ] . c o n s t a n tA t t e nua t i o n+ g l L i g h t S o u r c e [ 0 ] . l i n e a r A t t e n u a t i o n � d i s t+ g l L i g h t S o u r c e [ 0 ] . q u a d r a t i cA t t e n u a t i o n � d i s t � d i s t ) ;

g l F r a gCo l o r = amb ien tG loba l + ambient � a t t ;

NdotL = dot (n , l i g h t D i r ) ;� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 80 / 105

Page 108: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingFragment shader (3/3)

i f ( NdotL > 0 . 0 ) fg l F r a gCo l o r += a t t � ( d i f f u s e � NdotL ) ;r e fVec = r e f l e c t (� l i g h tD i r , n ) ;RdotE = dot ( re fVec , no rma l i z e (�ecPos ) ) ;g l F r a gCo l o r += a t t � g l L i g h t S o u r c e [ 0 ] . s p e c u l a r� g l F r o n tMa t e r i a l . s p e c u l a r� pow(RdotE , g l F r o n tMa t e r i a l . s h i n i n e s s ) ;

g

g l F r a gCo l o r �= colorMap ;g� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 81 / 105

Page 109: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingScreenshot

(c) GLSL parallax (d) GLSL multilight

Per-vertex lighting

A. Theodorou (LD2009) Le moderne GPU 24/10/09 82 / 105

Page 110: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingSpecular mapping

Come per il Phong shading, ma in pi�u:

Fragment shader

Esegue il fetch della glossmapModula il costributo speculare secondo la texture precedente

A. Theodorou (LD2009) Le moderne GPU 24/10/09 83 / 105

Page 111: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingFragment shader

uniform sampler2D Tex1 ;[ . . . ]vec4 glossMap = tex tu re2D (Tex1 , g l TexCoord [ 0 ] . s t ) ;[ . . . ]i f ( NdotL > 0 . 0 ) f

[ . . . ]vec4 spec = a t t � [ . . . ] � pow ( . . . ) ;spec �= glossMap ;g l F r a gCo l o r += spec ;

g[ . . . ]� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 84 / 105

Page 112: Le moderne GPU - LD2009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingScreenshot

A. Theodorou (LD2009) Le moderne GPU 24/10/09 85 / 105

Page 113: Le moderne GPU - LD2009

Sorgenti di esempi Normal e parallax mapping

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneGL Shading Language 1.20

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading

A. Theodorou (LD2009) Le moderne GPU 24/10/09 86 / 105

Page 114: Le moderne GPU - LD2009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingTangent space

A. Theodorou (LD2009) Le moderne GPU 24/10/09 87 / 105

Page 115: Le moderne GPU - LD2009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingNormal mapping

Come per il Phong shading, ma in pi�u:

Vertex shader

Riceve il vettore della tangente dall'applicazioneCalcola il vettore binormale e la matrice TBNTrasforma la normale, il light e l'eye vector secondo la matrice TBN

Fragment shader

Esegue il fetch della normalmapRiporta il valore letto dall'intervallo [0..1] all'intervallo [-1..1]Assegna tale valore alla variabile stabilita per la normale

A. Theodorou (LD2009) Le moderne GPU 24/10/09 88 / 105

Page 116: Le moderne GPU - LD2009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingVertex shader

a t t r i bu te vec3 objTan ;[ . . . ]vec3 t angen t = no rma l i z e ( g l No rma lMat r i x � objTan ) ;vec3 b ino rma l = c r o s s ( normal , t angen t ) ;mat3 tbnMat r i x = mat3( tangen t . x , b i no rma l . x , normal . x ,

t angen t . y , b i no rma l . y , normal . y ,t angen t . z , b i no rma l . z , normal . z ) ;

[ . . . ]l i g h t D i r = tbnMat r i x � l i g h t D i r ;ecPos = tbnMat r i x � ecPos ;

[ . . . ]� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 89 / 105

Page 117: Le moderne GPU - LD2009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingFragment shader

uniform sampler2D Tex2 ;[ . . . ]vec4 normalMap = textu re2D (Tex2 , g l TexCoord [ 0 ] . s t ) ;normal = no rma l i z e ( 2 . 0 � normalMap . rgb � 1 . 0 ) ;

[ . . . ]� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 90 / 105

Page 118: Le moderne GPU - LD2009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingScreenshot

A. Theodorou (LD2009) Le moderne GPU 24/10/09 91 / 105

Page 119: Le moderne GPU - LD2009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingTeoria sul parallax mapping

Si correggono le coordinate del texture fetch per riferirsi al punto B

Ma c'�e bisogno di una nuova informazione: l'altezza del pixel

A. Theodorou (LD2009) Le moderne GPU 24/10/09 92 / 105

Page 120: Le moderne GPU - LD2009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingParallax mapping

Come per il normal mapping, ma in pi�u:

Fragment shader

Esegue il fetch della heightmap con le texcoord reali del pixelScala e trasla l'altezza secondo coe�cienti empiriciSposta le nuove texcoord verso l'osservatore secondo il valoreprecedente

A. Theodorou (LD2009) Le moderne GPU 24/10/09 93 / 105

Page 121: Le moderne GPU - LD2009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingFragment shader

[ . . . ]vec2 TexCoord ;f l o a t h e i g h t ;f l o a t s c a l e = 0 . 0 4 ;f l o a t b i a s = 0 . 0 2 ;

h e i g h t = s c a l e � t ex tu re2D (Tex2 , g l TexCoord [ 0 ] . s t ) . a� b i a s ;

TexCoord = g l TexCoord [ 0 ] . s t + he i g h t� no rma l i z e ( ecPos ) . xy ;

[ . . . ]� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 94 / 105

Page 122: Le moderne GPU - LD2009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingScreenshot

A. Theodorou (LD2009) Le moderne GPU 24/10/09 95 / 105

Page 123: Le moderne GPU - LD2009

Sorgenti di esempi Toon shading

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneGL Shading Language 1.20

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shading

A. Theodorou (LD2009) Le moderne GPU 24/10/09 96 / 105

Page 124: Le moderne GPU - LD2009

Sorgenti di esempi Toon shading

Toon shadingImplementazione

Requisiti:

Frame Bu�er Object (per il post-processing in screen space)Multiple Render Targets (per memorizzare le normali al primo passo)

1� passo

Si discretizza l'intensit�a luminosa in pochi valori ammessiSi memorizzano in una texture i vettori delle normali in eye-space

2� passo

Si applica l'operatore di Sobel ad una versione a scala di grigi dellatexture precedenteSi evidenziano i contorni secondo un valore di soglia e spessore

A. Theodorou (LD2009) Le moderne GPU 24/10/09 97 / 105

Page 125: Le moderne GPU - LD2009

Sorgenti di esempi Toon shading

Toon shading1� passo, fragment shader (1/2)

vary ing vec3 normal , ecPos ;uniform sampler2D Tex0 ;

void main ( void )f

vec3 n , l i g h t D i r ;f l o a t NdotL ;

vec4 colorMap = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;

n = no rma l i z e ( normal ) ;l i g h t D i r = no rma l i z e ( g l L i g h t S o u r c e [ 0 ] . p o s i t i o n . xyz� ecPos ) ;

NdotL = dot (n , l i g h t D i r ) ;� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 98 / 105

Page 126: Le moderne GPU - LD2009

Sorgenti di esempi Toon shading

Toon shading1� passo, fragment shader (2/2)

g l F ragData [ 0 ] = vec4 ( 0 . 0 ) ;

i f ( NdotL > 0 . 95 )g l F ragData [ 0 ] = vec4 ( 1 . 0 ) ;

e l s e i f ( NdotL > 0 . 5 )g l F ragData [ 0 ] = vec4 ( 0 . 7 5 ) ;

e l s e i f ( NdotL > 0 . 25 )g l F ragData [ 0 ] = vec4 ( 0 . 5 ) ;

e l s e i f ( NdotL > 0 . 0 )g l F ragData [ 0 ] = vec4 ( 0 . 2 5 ) ;

g l F ragData [ 0 ] �= colorMap ;g l F ragData [ 1 ] = vec4 (n , 1 . 0 ) ;

g� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 99 / 105

Page 127: Le moderne GPU - LD2009

Sorgenti di esempi Toon shading

Toon shading2� passo, fragment shader (1/3)

uniform in t Width , He ight ;uniform f l o a t Th i ckne s s ;uniform f l o a t Thre sho ld ;uniform sampler2D Tex0 , Tex1 ;

void main ( void )f

vec2 ox = vec2 ( Th i ckne s s / f l o a t (Width ) , 0 . 0 ) ;vec2 oy = vec2 ( 0 . 0 , Th i ckne s s / f l o a t ( He ight ) ) ;vec2 uv = g l TexCoord [ 0 ] . s t ;mat3 gray ;

� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 100 / 105

Page 128: Le moderne GPU - LD2009

Sorgenti di esempi Toon shading

Toon shading2� passo, fragment shader (2/3)

i n t i , j ;vec2 PP = uv � oy ;f o r ( i = 0 ; i < 3 ; i++) f

gray [ i ] [ 0 ] = dot ( t ex tu re2D (Tex1 , PP � ox ) . rgb , vec3 ( 1 . 0 / 3 . 0 ) ) ;g ray [ i ] [ 1 ] = dot ( t ex tu re2D (Tex1 , PP ) . rgb , vec3 ( 1 . 0 / 3 . 0 ) ) ;g ray [ i ] [ 2 ] = dot ( t ex tu re2D (Tex1 , PP + ox ) . rgb , vec3 ( 1 . 0 / 3 . 0 ) ) ;PP += oy ;

g

mat3 K;K [ 0 ] [ 0 ] =�1.0; K [ 0 ] [ 1 ] =�2.0; K [ 0 ] [ 2 ] =�1.0;K [ 1 ] [ 0 ] = 0 . 0 ; K [ 1 ] [ 1 ] = 0 . 0 ; K [ 1 ] [ 2 ] = 0 . 0 ;K [ 2 ] [ 0 ] = 1 . 0 ; K [ 2 ] [ 1 ] = 2 . 0 ; K [ 2 ] [ 2 ] = 1 . 0 ;

� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 101 / 105

Page 129: Le moderne GPU - LD2009

Sorgenti di esempi Toon shading

Toon shading2� passo, fragment shader (3/3)

f l o a t sx = 0 . 0 ;f l o a t sy = 0 . 0 ;f o r ( i = 0 ; i < 3 ; i++) f

f o r ( j = 0 ; j < 3 ; j++) fsx += gray [ i ] [ j ] � K[ i ] [ j ] ;sy += gray [ i ] [ j ] � K[ j ] [ i ] ;

ggf l o a t d i s t = s q r t ( sx � sx + sy � sy ) ;

i f ( d i s t > Thre sho ld )g l F r a gCo l o r = vec4 ( 0 . 0 ) ;

e l s eg l F r a gCo l o r = textu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;

g� �

A. Theodorou (LD2009) Le moderne GPU 24/10/09 102 / 105

Page 130: Le moderne GPU - LD2009

Sorgenti di esempi Toon shading

Toon shadingScreenshot

(a) Untextured (b) Textured

(c) Grey normal (d) Edges

A. Theodorou (LD2009) Le moderne GPU 24/10/09 103 / 105

Page 131: Le moderne GPU - LD2009

Sorgenti di esempi Toon shading

Toon shadingScreenshot

(e) Final

A. Theodorou (LD2009) Le moderne GPU 24/10/09 104 / 105

Page 132: Le moderne GPU - LD2009

Approfondimenti

ApprofondimentiAlcuni link interessanti

http://www.khronos.org/opengl/

http://www.3dshaders.com/home/

http://www.lighthouse3d.com/opengl/glsl/

http://www.codesampler.com/oglsrc.htm

http://www.humus.ca/index.php?page=3D

http://www.clockworkcoders.com/oglsl/index.html

http://www.ozone3d.net/tutorials/

http://http.developer.nvidia.com/GPUGems/gpugems part01.html

http://http.developer.nvidia.com/GPUGems2/gpugems2 part01.html

http://http.developer.nvidia.com/GPUGems3/gpugems3 part01.html

http://encelo.netsons.org/programming/opengl

http://encelo.netsons.org/blog

A. Theodorou (LD2009) Le moderne GPU 24/10/09 105 / 105