178

Le moderne GPU - C42009

Embed Size (px)

DESCRIPTION

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.

Citation preview

Page 1: Le moderne GPU - C42009

Le moderne GPU

Cosa �e possibile fare oggi e cenni su come farlo

Angelo "Encelo\ Theodorou

Universit�a degli Studi di Napoli "Federico II\

Revisione di [CG2008] per il seminario in aula C4

A. Theodorou ("Federico II\) Le moderne GPU C42009 1 / 152

Page 2: Le moderne GPU - C42009

Sommario

Sommario1 Introduzione

Primo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 2 / 152

Page 3: Le moderne GPU - C42009

Sommario

Sommario1 Introduzione

Primo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 2 / 152

Page 4: Le moderne GPU - C42009

Sommario

Sommario1 Introduzione

Primo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 2 / 152

Page 5: Le moderne GPU - C42009

Sommario

Sommario1 Introduzione

Primo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 2 / 152

Page 6: Le moderne GPU - C42009

Introduzione Primo approccio

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 3 / 152

Page 7: Le moderne GPU - C42009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

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

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

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

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152

Page 8: Le moderne GPU - C42009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

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

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

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

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152

Page 9: Le moderne GPU - C42009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

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

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

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

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152

Page 10: Le moderne GPU - C42009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

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

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

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

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152

Page 11: Le moderne GPU - C42009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

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

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

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

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152

Page 12: Le moderne GPU - C42009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

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

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

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

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152

Page 13: Le moderne GPU - C42009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

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

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

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

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152

Page 14: Le moderne GPU - C42009

Introduzione Primo approccio

Primo aprroccioLa GPU oggi

Caratteristiche salienti delle Graphics Processing Unit attuali:

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

Centinaia di gigaFLOPS in single-precision

Decine di gigaFLOPS in double-precision

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

Rapporto di crescita superiore a quello delle CPU

Utilizzabili per compiti general purpose

Programmabili mediante librerie non gra�che

A. Theodorou ("Federico II\) Le moderne GPU C42009 4 / 152

Page 15: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLa pipeline �ssa

A. Theodorou ("Federico II\) Le moderne GPU C42009 5 / 152

Page 16: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLa pipeline programmabile (SM 4.0)

A. Theodorou ("Federico II\) Le moderne GPU C42009 6 / 152

Page 17: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

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

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

Pu�o intervenire in tre fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti

Di default emula le attivit�a della pipeline �ssa

A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152

Page 18: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

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

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

Pu�o intervenire in tre fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti

Di default emula le attivit�a della pipeline �ssa

A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152

Page 19: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

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

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

Pu�o intervenire in tre fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti

Di default emula le attivit�a della pipeline �ssa

A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152

Page 20: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

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

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

Pu�o intervenire in tre fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti

Di default emula le attivit�a della pipeline �ssa

A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152

Page 21: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

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

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

Pu�o intervenire in tre fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti

Di default emula le attivit�a della pipeline �ssa

A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152

Page 22: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

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

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

Pu�o intervenire in tre fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti

Di default emula le attivit�a della pipeline �ssa

A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152

Page 23: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

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

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

Pu�o intervenire in tre fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti

Di default emula le attivit�a della pipeline �ssa

A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152

Page 24: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLo shader

Il sorgente �e speci�cato dal programmatore

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

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

Pu�o intervenire in tre fasi distinte:

Trasformazione dei verticiAssemblaggio delle primitiveColorazione dei frammenti

Di default emula le attivit�a della pipeline �ssa

A. Theodorou ("Federico II\) Le moderne GPU C42009 7 / 152

Page 25: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLo stream processor

Esegue uno qualsiasi dei tre tipi di shader (architettura uni�cata)

Viene istruito da un dispatcher che gestisce il work-load

Opera seguendo un design superscalare

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 8 / 152

Page 26: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLo stream processor

Esegue uno qualsiasi dei tre tipi di shader (architettura uni�cata)

Viene istruito da un dispatcher che gestisce il work-load

Opera seguendo un design superscalare

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 8 / 152

Page 27: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLo stream processor

Esegue uno qualsiasi dei tre tipi di shader (architettura uni�cata)

Viene istruito da un dispatcher che gestisce il work-load

Opera seguendo un design superscalare

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 8 / 152

Page 28: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLo stream processor

Esegue uno qualsiasi dei tre tipi di shader (architettura uni�cata)

Viene istruito da un dispatcher che gestisce il work-load

Opera seguendo un design superscalare

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 8 / 152

Page 29: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioLo stream processor

Esegue uno qualsiasi dei tre tipi di shader (architettura uni�cata)

Viene istruito da un dispatcher che gestisce il work-load

Opera seguendo un design superscalare

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 8 / 152

Page 30: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioArchitettura a shader uni�cati

Figura: Architettura discreta

Figura: Architettura uni�cataA. Theodorou ("Federico II\) Le moderne GPU C42009 9 / 152

Page 31: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioArchitettura GT200

A. Theodorou ("Federico II\) Le moderne GPU C42009 10 / 152

Page 32: Le moderne GPU - C42009

Introduzione Primo approccio

Primo approccioArchitettura RV770

A. Theodorou ("Federico II\) Le moderne GPU C42009 11 / 152

Page 33: Le moderne GPU - C42009

Introduzione Panoramica storica

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 12 / 152

Page 34: Le moderne GPU - C42009

Introduzione Panoramica storica

Panoramica storicaQuadro generale

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

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

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

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

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

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 13 / 152

Page 35: Le moderne GPU - C42009

Introduzione Panoramica storica

Panoramica storicaLa prima generazione

01/12/1996: Diamond Monster 3D (SST1, 1M transistor)01/08/1997: Nvidia Riva 128 (NV3, 3.5M transistor)01/08/1998: Nvidia Riva TNT (NV4, 7M transistor)01/11/1998: Ati Rage 128 (Rage 128, 8M transistor)! OpenGL 1.1 e Direct3D 5.0

Hidden Surface Removal tramite Z-bu�eringMipmappingFlat e Gouraud shadingFiltro bi/trilineare per le textureAlpha blendingStencil bu�er

(a) SST1 (b) NV3 (c) NV4 (d) Rage128A. Theodorou ("Federico II\) Le moderne GPU C42009 14 / 152

Page 36: Le moderne GPU - C42009

Introduzione Panoramica storica

Panoramica storicaLa seconda generazione

01/10/1999: Nvidia GeForce 256 (NV10, 23M transistor)15/06/2000: ATI Radeon (R100, 30M transistor)26/04/2000: Nvidia GeForce2 GTS (NV15, 25M transistor)! OpenGL 1.3 e Direct3D 7.0

Trasformazione, illuminazione e clipping dei verticiZ-bu�er pi�u preciso (compressione dei dati in transito)Rudimentale shading per-pixel (nascosto nell'API, 2 texturemiscelabili)Full Scene Anti Aliasing ed Anisotropic FilteringSupporto hardware alla compressione delle textureSupporto hardware a bump, shadow ed environment mapping

(e) NV10 (f) R100 (g) NV15A. Theodorou ("Federico II\) Le moderne GPU C42009 15 / 152

Page 37: Le moderne GPU - C42009

Introduzione Panoramica storica

Panoramica storicaLa terza generazione

01/05/2001: Nvidia GeForce 3 (NV20, 57M transistor)14/08/2001: ATI Radeon 8500 (R200, 60M transistor)04/02/2002: Nvidia GeForce4 Ti 4600 (NV25, 63M transistor)! OpenGL 1.4 e Direct3D 8.0/8.1

Vertex shader 1.0

Pixel shader 1.0 (parzialmente esposti nelle API, 4 texture miscelabili)

Supporto hardware al True Re ective Bump Mapping, EnvironmentalMapped Bump Mapping, ...

(h) NV20 (i) R200 (j) NV25

A. Theodorou ("Federico II\) Le moderne GPU C42009 16 / 152

Page 38: Le moderne GPU - C42009

Introduzione Panoramica storica

Panoramica storicaLa quarta generazione

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

Vertex Shader 2.0

Pixel Shader 2.0 (programmabili direttamente)

Precisione FP16/FP32

(k) R300 (l) NV30 (m) R420

A. Theodorou ("Federico II\) Le moderne GPU C42009 17 / 152

Page 39: Le moderne GPU - C42009

Introduzione Panoramica storica

Panoramica storicaLa quinta generazione

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

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

Multiple Render TargetsAccelerazione HW per ussi video HD

(n) NV40 (o) G70 (p) R520

A. Theodorou ("Federico II\) Le moderne GPU C42009 18 / 152

Page 40: Le moderne GPU - C42009

Introduzione Panoramica storica

Panoramica storicaLa sesta generazione

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

Vertex e Pixel Shader 4.0

Geometry Shader 4.0

Archittettura uni�cata

Design superscalare

(q) G80 (r)R600XT

(s) G92

A. Theodorou ("Federico II\) Le moderne GPU C42009 19 / 152

Page 41: Le moderne GPU - C42009

Introduzione Panoramica storica

Panoramica storicaLa settima generazione

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

Shader Model 4.1/Direct3D 10.1 (solo ATI)

Supporto alla doppia precisione

Sempre pi�u stream processor e larghezza di banda

Un'evoluzione pi�u che una rivoluzione

(t)RV670XT

(u) G200 (v)RV770XT

A. Theodorou ("Federico II\) Le moderne GPU C42009 20 / 152

Page 42: Le moderne GPU - C42009

La GPU in azione Potenza elaborativa

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 21 / 152

Page 43: Le moderne GPU - C42009

La GPU in azione Potenza elaborativa

Potenza elaborativaRiferimenti numerici

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 22 / 152

Page 44: Le moderne GPU - C42009

La GPU in azione Potenza elaborativa

Potenza elaborativaGPU vs CPU

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

103 TFlops derivanti dalle CPU

192 TFlops derivanti dalle GPU

A. Theodorou ("Federico II\) Le moderne GPU C42009 23 / 152

Page 45: Le moderne GPU - C42009

La GPU in azione Potenza elaborativa

Potenza elaborativaLarghezza di banda

A. Theodorou ("Federico II\) Le moderne GPU C42009 24 / 152

Page 46: Le moderne GPU - C42009

La GPU in azione Potenza elaborativa

Potenza elaborativaLegge di Moore

A. Theodorou ("Federico II\) Le moderne GPU C42009 25 / 152

Page 47: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 26 / 152

Page 48: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUIl GPGPU

GPGPU: General-Purpose computation on GPUs

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

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

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

Middleware �sico: Nvidia PhysX (ex Ageia)

Stage nella pipeline Direct3D 11: Compute shader

Vecchie librerie open-source: BrookGPU, Sh

A. Theodorou ("Federico II\) Le moderne GPU C42009 27 / 152

Page 49: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

Applicazioni general purposeNvidia Tesla: soluzione ad hoc

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

La controparte AMD �e chiamata FireStreamA. Theodorou ("Federico II\) Le moderne GPU C42009 28 / 152

Page 50: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

Applicazioni general purposeFast Fourier Transforms

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

GPU: Nvidia GeForce 8800 GTX (CUDA e CUFFT)

A. Theodorou ("Federico II\) Le moderne GPU C42009 29 / 152

Page 51: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUNvidia Gelato

Renderer ad accelerazione hardware non in tempo reale

A. Theodorou ("Federico II\) Le moderne GPU C42009 30 / 152

Page 52: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUOpenVIDIA

Computer vision con supporto all'accelerazione della GPU

A. Theodorou ("Federico II\) Le moderne GPU C42009 31 / 152

Page 53: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUFluidodinamica

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 32 / 152

Page 54: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUGenerazione ed erosione di terreni

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 33 / 152

Page 55: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPURicostruzione tomogra�ca

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

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

Opteron 250), (Marzo 2005, 3.5M di Euro)A. Theodorou ("Federico II\) Le moderne GPU C42009 34 / 152

Page 56: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUFolding@Home

CPU: 4 mol/day

PS3: 100 mol/day

HD 3870: 170 mol/day

GTX 280: 500 mol/day

A. Theodorou ("Federico II\) Le moderne GPU C42009 35 / 152

Page 57: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUPassword recovery

ElcomSoft Distributed Password Recovery

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 36 / 152

Page 58: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUNurien tech demo

Fisica dei capelli e degli abiti accelerata dalla GPU

A. Theodorou ("Federico II\) Le moderne GPU C42009 37 / 152

Page 59: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUFroblins Demo

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 38 / 152

Page 60: Le moderne GPU - C42009

La GPU in azione Applicazioni general purpose

Applicazioni GPGPUUlteriori applicazioni

60 su 262 applicazioni dal sito CUDA Zone (Marzo 2009)

A. Theodorou ("Federico II\) Le moderne GPU C42009 39 / 152

Page 61: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 40 / 152

Page 62: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliLa Game Industry

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

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

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

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

Uno dei principali campi applicativi della ricerca nella computergra�ca

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 41 / 152

Page 63: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliLa Game Industry

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

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

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

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

Uno dei principali campi applicativi della ricerca nella computergra�ca

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 41 / 152

Page 64: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliLa Game Industry

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

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

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

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

Uno dei principali campi applicativi della ricerca nella computergra�ca

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 41 / 152

Page 65: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliLa Game Industry

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

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

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

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

Uno dei principali campi applicativi della ricerca nella computergra�ca

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 41 / 152

Page 66: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliLa Game Industry

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

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

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

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

Uno dei principali campi applicativi della ricerca nella computergra�ca

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 41 / 152

Page 67: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliLa Game Industry

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

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

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

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

Uno dei principali campi applicativi della ricerca nella computergra�ca

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 41 / 152

Page 68: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliHuman Head (14/7/2007)

Demo real-time della Nvidia per la GeForce 8800 Ultra

A. Theodorou ("Federico II\) Le moderne GPU C42009 42 / 152

Page 69: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliCryEngine 2 vs Unreal Engine 3 (1/2)

A. Theodorou ("Federico II\) Le moderne GPU C42009 43 / 152

Page 70: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliCryEngine 2 vs Unreal Engine 3 (2/2)

A. Theodorou ("Federico II\) Le moderne GPU C42009 44 / 152

Page 71: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliCrysis vs Real-life

A. Theodorou ("Federico II\) Le moderne GPU C42009 45 / 152

Page 72: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 46 / 152

Page 73: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 47 / 152

Page 74: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 48 / 152

Page 75: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 49 / 152

Page 76: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 50 / 152

Page 77: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionali3dMark Vantage, 28/4/2008

A. Theodorou ("Federico II\) Le moderne GPU C42009 51 / 152

Page 78: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 52 / 152

Page 79: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 53 / 152

Page 80: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 54 / 152

Page 81: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 55 / 152

Page 82: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 56 / 152

Page 83: Le moderne GPU - C42009

La GPU in azione Applicazioni tradizionali

Applicazioni tradizionaliKillzone 2, 25/2/2009

A. Theodorou ("Federico II\) Le moderne GPU C42009 57 / 152

Page 84: Le moderne GPU - C42009

Cenni sulla programmazione Supporto OpenGL

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 58 / 152

Page 85: Le moderne GPU - C42009

Cenni sulla programmazione Supporto OpenGL

Supporto OpenGLSommario

Creazione shader object

Creazione program object

Utilizzo del program object

Codice di esempio 1

Liberazione delle risorse allocate

Variabili uniformi

Cenni sul resto

Codice di esempio 2

Nota: Le funzioni che verranno esaminate fanno parte del core di OpenGL 2.0 e

successivi.

A. Theodorou ("Federico II\) Le moderne GPU C42009 59 / 152

Page 86: Le moderne GPU - C42009

Cenni sulla programmazione Supporto OpenGL

Supporto OpenGLCreazione shader object

GLuint glCreateShader(GLenum shaderType )

Ritorna l'handle per un nuovo shaderIl tipo pu�o essere GL VERTEX SHADER o GL FRAGMENT SHADER.

void glShaderSource(GLuint shader, GLsizei count, const

GLchar **string, const GLint *length )

Imposta il sorgente per lo shader all'array di stringhe speci�cato.

void glCompileShader(GLuint shader )

Compila il sorgente dello shader speci�cato.

Nota: A partire dalle OpenGL 3.0, glCreateShader() accetta anche il tipo

GL GEOMETRY SHADER ARB.

A. Theodorou ("Federico II\) Le moderne GPU C42009 60 / 152

Page 87: Le moderne GPU - C42009

Cenni sulla programmazione Supporto OpenGL

Supporto OpenGLCreazione program object

GLuint glCreateProgram(void)

Ritorna l'handle per un nuovo programma.

void glAttachShader(GLuint program, GLuint shader )

Associa lo shader al programma speci�cato.

void glLinkProgram(GLuint program );

E�ettua la fase di linking per il programma.

A. Theodorou ("Federico II\) Le moderne GPU C42009 61 / 152

Page 88: Le moderne GPU - C42009

Cenni sulla programmazione Supporto OpenGL

Supporto OpenGLUtilizzo del program object

void glUseProgram(GLuint program )

Speci�ca il programma da usare.Da quel momento in poi, per qualsiasi operazione, non verr�a pi�uutilizzata la pipeline �ssa.Passando "0\ come parametro si ritorna alla pipeline tradizionale.

A. Theodorou ("Federico II\) Le moderne GPU C42009 62 / 152

Page 89: Le moderne GPU - C42009

Cenni sulla programmazione Supporto OpenGL

Supporto OpenGLCodice di esempio 1�

GLuint v , f , p ;char � vs , � f s ;

p = g lCreateProgram ( ) ;v = g lC r e a t eShade r (GL VERTEX SHADER ) ;g lShade rSou r c e ( v , 1 , &vs , NULL ) ;g lComp i l eShade r ( v ) ;g lA t tachShade r (p , v ) ;

f = g lC r e a t eShade r (GL FRAGMENT SHADER) ;g lShade rSou r c e ( f , 1 , &f s , NULL ) ;g lComp i l eShade r ( f ) ;g lA t tachShade r (p , f ) ;

g lL inkProgram (p ) ;g lUseProgram (p ) ;� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 63 / 152

Page 90: Le moderne GPU - C42009

Cenni sulla programmazione Supporto OpenGL

Supporto OpenGLLiberazione delle risorse allocate

void glDeleteShader(GLuint shader )

Comando opposto a quello di creazione, libera la memoria ed ilriferimento associati all'handle passato.

void glDeleteProgram(GLuint program )

Come sopra, ma relativo ai programmi.

void glDetachShader(GLuint program, GLuint shader )

Cancella l'associazione tra shader e programma.

A. Theodorou ("Federico II\) Le moderne GPU C42009 64 / 152

Page 91: Le moderne GPU - C42009

Cenni sulla programmazione Supporto OpenGL

Supporto OpenGLVariabili uniformi

OpenGL permette il passaggio di dati agli shader

GLint glGetUniformLocation(GLuint program, const GLchar

*name )

Ritorna il riferimento alla posizione di una certa variabile all'internodel programma, che dev'essere correntemente in uso.

void glUniformf1|2|3|4gff|ig(GLint location, TYPE v )

Imposta il valore della variabile alla locazione speci�cata a quellopassato dalla funzione.

void glUniformf1|2|3|4gff|igv(GLint location, GLuint

count, const TYPE v )

Come sopra, ma questa volta permette di speci�care un array di valori.

void glUniformMatrixf2|3|4gfv(GLint location, GLuint

count, GLboolean transpose, const GLfloat *v )

Passa allo shader una matrice quadrata della dimensione speci�cata,ordinata per colonne o per righe a seconda del parametro booleano.

A. Theodorou ("Federico II\) Le moderne GPU C42009 65 / 152

Page 92: Le moderne GPU - C42009

Cenni sulla programmazione Supporto OpenGL

Supporto OpenGLCenni sul resto

glGetUniform() e glGetActiveUniform()Ritorna il valore di una o di tutte le variabili uniformi attive nelprogramma speci�cato.

Funzioni di queryPermettono di ricavare lo stato degli oggetti creati, stampare logdiagnostici, conoscere gli oggetti correntemente attivi.

Funzioni relative agli attributi per verticePermettono di speci�care attributi da passare agli shader, all'internodi una coppia glBegin()/glEnd(), diversi per ogni vertice.

Multiple Render TargetsI fragment shader supportano la scrittura contemporanea su pi�u framebu�er.

Ausilio per lo svilupoglValidateProgram() controlla se l'eseguibile del programmaspeci�cato, dato lo stato OpenGL corrente, pu�o funzionare.

A. Theodorou ("Federico II\) Le moderne GPU C42009 66 / 152

Page 93: Le moderne GPU - C42009

Cenni sulla programmazione Supporto OpenGL

Supporto OpenGLCodice di esempio 2

GLuint p ;GLint loc1 , l o c 2 ;

g lUseProgram (p ) ;l o c 1 = g lGe tUn i f o rmLoca t i on (p , " Va r i a b l e 1 " ) ;g lUn i f o rm1 f ( loc1 , 1 . 0 f ) ;

l o c 2 = g lGe tUn i f o rmLoca t i on (p , " Va r i a b l e 2 " ) ;g lUn i f o rm1 i ( loc2 , 1 ) ;� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 67 / 152

Page 94: Le moderne GPU - C42009

Cenni sulla programmazione GL Shading Language

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 68 / 152

Page 95: Le moderne GPU - C42009

Cenni sulla programmazione GL Shading Language

GL Shading LanguageSommario

Tipi di dato

Inizializzatori e costruttori

Quali�catori

Flusso di controllo

Swizzling

Operazioni component-wise

Funzioni built-in

Variabili built-in

Codice di esempio

A. Theodorou ("Federico II\) Le moderne GPU C42009 69 / 152

Page 96: Le moderne GPU - C42009

Cenni sulla programmazione GL Shading Language

GL Shading LanguageTipi di dato

Scalari: float, int, bool

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

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

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

Supporto a strutture ed array

A. Theodorou ("Federico II\) Le moderne GPU C42009 70 / 152

Page 97: Le moderne GPU - C42009

Cenni sulla programmazione GL Shading Language

GL Shading LanguageInizializzatori e costruttori

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

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

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

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 71 / 152

Page 98: Le moderne GPU - C42009

Cenni sulla programmazione GL Shading Language

GL Shading LanguageQuali�catori

attribute

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

uniform

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

varying

Informazioni passate per interpolazione dal vertex al fragment shader.

const

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

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

attribute e varying.

A. Theodorou ("Federico II\) Le moderne GPU C42009 72 / 152

Page 99: Le moderne GPU - C42009

Cenni sulla programmazione GL Shading Language

GL Shading LanguageFlusso di controllo

Cicli for, while e do-while

Presenza delle keyword break e continue

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

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

Assenza del supporto per goto e switch

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 73 / 152

Page 100: Le moderne GPU - C42009

Cenni sulla programmazione GL Shading Language

GL Shading LanguageSwizzling

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

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 74 / 152

Page 101: Le moderne GPU - C42009

Cenni sulla programmazione GL Shading Language

GL Shading LanguageOperazioni component-wise

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

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

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 75 / 152

Page 102: Le moderne GPU - C42009

Cenni sulla programmazione GL Shading Language

GL Shading LanguageFunzioni built-in (1/2)

Supportano l'overloading degli argomenti

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

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

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 76 / 152

Page 103: Le moderne GPU - C42009

Cenni sulla programmazione GL Shading Language

GL Shading LanguageFunzioni built-in (2/2)

Supportano l'overloading degli argomenti

Matriciali: matrixCompMult()

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

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

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 77 / 152

Page 104: Le moderne GPU - C42009

Cenni sulla programmazione GL Shading Language

GL Shading LanguageVariabili built-in

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

Output del vertex shader: gl Position, ...

Input del fragment shader: gl FragCoord, gl FrontFacing

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 78 / 152

Page 105: Le moderne GPU - C42009

Cenni sulla programmazione GL Shading Language

GL Shading LanguageCodice di esempio

Listing 1: Vertex shader�

void main ( void )f

g l P o s i t i o n = f t r a n s f o rm ( ) ;

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

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

g� �

Listing 2: Fragment shader�

void main ( void )f

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 79 / 152

Page 106: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 80 / 152

Page 107: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingBlinn-Phong re ection model

A. Theodorou ("Federico II\) Le moderne GPU C42009 81 / 152

Page 108: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingGouraud shading

Vertex shader

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

Fragment shader

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 82 / 152

Page 109: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingVertex shader (1/3)

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

void main ( void )f

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

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

� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 83 / 152

Page 110: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingVertex shader (2/3)

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

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

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

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

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

� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 84 / 152

Page 111: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingVertex shader (3/3)

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

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

� g l F r o n tMa t e r i a l . s p e c u l a r� pow(NdotHV , g l F r o n tMa t e r i a l . s h i n i n e s s ) ;

g

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

g� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 85 / 152

Page 112: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingFragment shader

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

void main ( void )f

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

g� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 86 / 152

Page 113: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingScreenshot

(a) GLSL parallax (b) GLSL multilight

Per-pixel lighting

A. Theodorou ("Federico II\) Le moderne GPU C42009 87 / 152

Page 114: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingPhong shading

Vertex shader

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

Fragment shader

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 88 / 152

Page 115: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingVertex shader (1/2)

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

void main ( void )f

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

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

� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 89 / 152

Page 116: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingVertex shader (2/2)

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

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

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

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

g� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 90 / 152

Page 117: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingFragment shader (1/3)

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

void main ( void )f

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 91 / 152

Page 118: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingFragment shader (2/3)

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

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

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 92 / 152

Page 119: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingFragment shader (3/3)

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

� g l F r o n tMa t e r i a l . s p e c u l a r� pow(RdotE , g l F r o n tMa t e r i a l . s h i n i n e s s ) ;

g

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 93 / 152

Page 120: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingScreenshot

(c) GLSL parallax (d) GLSL multilight

Per-vertex lighting

A. Theodorou ("Federico II\) Le moderne GPU C42009 94 / 152

Page 121: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingSpecular mapping

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

Fragment shader

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 95 / 152

Page 122: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingFragment shader

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

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

g[ . . . ]� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 96 / 152

Page 123: Le moderne GPU - C42009

Sorgenti di esempi Gouraud e Phong shading

Gouraud e Phong shadingScreenshot

A. Theodorou ("Federico II\) Le moderne GPU C42009 97 / 152

Page 124: Le moderne GPU - C42009

Sorgenti di esempi Normal e parallax mapping

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 98 / 152

Page 125: Le moderne GPU - C42009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingTangent space

A. Theodorou ("Federico II\) Le moderne GPU C42009 99 / 152

Page 126: Le moderne GPU - C42009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingNormal mapping

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

Vertex shader

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

Fragment shader

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 100 / 152

Page 127: Le moderne GPU - C42009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingVertex shader

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

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

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

[ . . . ]� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 101 / 152

Page 128: Le moderne GPU - C42009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingFragment shader

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

[ . . . ]� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 102 / 152

Page 129: Le moderne GPU - C42009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingScreenshot

A. Theodorou ("Federico II\) Le moderne GPU C42009 103 / 152

Page 130: Le moderne GPU - C42009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingTeoria sul parallax mapping

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 104 / 152

Page 131: Le moderne GPU - C42009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingParallax mapping

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

Fragment shader

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 105 / 152

Page 132: Le moderne GPU - C42009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingFragment shader

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

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

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

[ . . . ]� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 106 / 152

Page 133: Le moderne GPU - C42009

Sorgenti di esempi Normal e parallax mapping

Normal e parallax mappingScreenshot

A. Theodorou ("Federico II\) Le moderne GPU C42009 107 / 152

Page 134: Le moderne GPU - C42009

Sorgenti di esempi Toon shading

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 108 / 152

Page 135: Le moderne GPU - C42009

Sorgenti di esempi Toon shading

Toon shadingImplementazione

Requisiti:

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

1� passo

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

2� passo

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 109 / 152

Page 136: Le moderne GPU - C42009

Sorgenti di esempi Toon shading

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

vary ing vec3 normal , ecPos ;uniform sampler2D Tex0 ;

void main ( void )f

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

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

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

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 110 / 152

Page 137: Le moderne GPU - C42009

Sorgenti di esempi Toon shading

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

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

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

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

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

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

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

g� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 111 / 152

Page 138: Le moderne GPU - C42009

Sorgenti di esempi Toon shading

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

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

void main ( void )f

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

� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 112 / 152

Page 139: Le moderne GPU - C42009

Sorgenti di esempi Toon shading

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

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

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

g

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

� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 113 / 152

Page 140: Le moderne GPU - C42009

Sorgenti di esempi Toon shading

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

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

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

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

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

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

g� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 114 / 152

Page 141: Le moderne GPU - C42009

Sorgenti di esempi Toon shading

Toon shadingScreenshot

(a) Untextured (b) Textured

(c) Grey normal (d) Edges

A. Theodorou ("Federico II\) Le moderne GPU C42009 115 / 152

Page 142: Le moderne GPU - C42009

Sorgenti di esempi Toon shading

Toon shadingScreenshot

(e) Final

A. Theodorou ("Federico II\) Le moderne GPU C42009 116 / 152

Page 143: Le moderne GPU - C42009

Sorgenti di esempi Depth of �eld

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 117 / 152

Page 144: Le moderne GPU - C42009

Sorgenti di esempi Depth of �eld

Depth of �eldTeoria

x 0=a = s=d ! x 0 = a(s=d)

x 00=a = (s � f )=f ! x 00 = a(s � f )=f = a(s=f � 1)

jx 00 � x 0j = a� sf� 1

�� a

s

d= a

�s

�1

f�

1

d

�� 1

A. Theodorou ("Federico II\) Le moderne GPU C42009 118 / 152

Page 145: Le moderne GPU - C42009

Sorgenti di esempi Depth of �eld

Depth of �eldImplementazione

Si compone di 5 passi ed utilizza 4 Frame Bu�er Object

1� passo: rendering della scena in un FBO e calcolo della quantit�a diblur

2� passo: downsampling in un altro FBO avente 1/4 delle dimensionidel precedente

3� passo: applicazione del �ltro gaussiano lungo l'asse X

4� passo: applicazione del �ltro gaussiano lungo l'asse Y

5� passo: interpolazione lineare tra la scena originale e quella ridottae sfumata

A. Theodorou ("Federico II\) Le moderne GPU C42009 119 / 152

Page 146: Le moderne GPU - C42009

Sorgenti di esempi Depth of �eld

Depth of �eld1� passo, vertex shader

uniform f l o a t f o c a lD i s t a n c e , f o ca lRange ;vary ing f l o a t Blu r ;

void main ( void )f

vec4 PosWV = gl Mode lV iewMatr i x � g l V e r t e x ;

B lu r = clamp ( abs(�PosWV. z � f o c a lD i s t a n c e )/ foca lRange , 0 . 0 , 1 . 0 ) ;

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

g� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 120 / 152

Page 147: Le moderne GPU - C42009

Sorgenti di esempi Depth of �eld

Depth of �eld1� passo, fragment shader

vary ing f l o a t Blu r ;uniform sampler2D Tex0 ;

void main ( void )f

g l F ragData [ 0 ] = vec4 ( t ex tu re2D(Tex0 , g l TexCoord [ 0 ] . s t ) . rgb , B lu r ) ;

g� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 121 / 152

Page 148: Le moderne GPU - C42009

Sorgenti di esempi Depth of �eld

Depth of �eld5� passo, fragment shader

uniform sampler2D Tex0 , Tex1 ;

void main ( void )f

vec4 F u l l r e s = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;vec4 B lu r r e d = tex tu re2D (Tex1 , g l TexCoord [ 1 ] . s t ) ;

g l F r a gCo l o r = F u l l r e s + F u l l r e s . a� ( B l u r r e d � F u l l r e s ) ;

g� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 122 / 152

Page 149: Le moderne GPU - C42009

Sorgenti di esempi Depth of �eld

Depth of FieldScreenshot

(a) Depth of Field (b) Quantit�a di blur

A. Theodorou ("Federico II\) Le moderne GPU C42009 123 / 152

Page 150: Le moderne GPU - C42009

Sorgenti di esempi Depth of �eld

Depth of FieldScreenshot

(d) Normal + Parallax + DoFA. Theodorou ("Federico II\) Le moderne GPU C42009 124 / 152

Page 151: Le moderne GPU - C42009

Sorgenti di esempi Deferred shading

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 125 / 152

Page 152: Le moderne GPU - C42009

Sorgenti di esempi Deferred shading

Deferred shadingConfronto (1/3)

Single-pass, multi-light

Per ogni oggetto:renderizzo l'oggetto ed applico l'illuminazione in un solo shader

Spreco di shading nel caso di super�ci invisibili

Mal si integra con le tecniche di shadowing

Poche luci gestibili contemporaneamente

C'�e bisogno di uno shader diverso per ogni combinazione

A. Theodorou ("Federico II\) Le moderne GPU C42009 126 / 152

Page 153: Le moderne GPU - C42009

Sorgenti di esempi Deferred shading

Deferred shadingConfronto (2/3)

Multi-pass, multi-light

Per ogni luce:Per ogni oggetto in uenzato:

aggiungo al framebu�er il contributo della luce sull'oggetto

Spreco di shading nel caso di super�ci invisibili

Le chiamate alla funzioni di disegno possono essere ancheN(luci)� N(oggetti)

Molto lavoro ripetuto (trasformazione dei vertici, ...)

A. Theodorou ("Federico II\) Le moderne GPU C42009 127 / 152

Page 154: Le moderne GPU - C42009

Sorgenti di esempi Deferred shading

Deferred shadingConfronto (3/3)

Deferred shading

Per ogni oggetto:memorizzo gli attributi che servono a calcolare l'illuminazione nel \G-bu�er"

Per ogni luce:aggiungo al framebu�er il contributo della luce tramite il G-bu�er

Sempli�ca la gestione dell'illuminazione (un solo shader permemorizzare gli attributi)

Si integra bene con le tecniche di shadowing

Le chiamate alle funzioni di disegno sono al pi�u N(luci) + N(oggetti)

L'illuminazione diventa un lavoro di post-processing in screen space

Stesso lavoro per calcolare l'illuminazione di una luce grande o ditante piccole

A. Theodorou ("Federico II\) Le moderne GPU C42009 128 / 152

Page 155: Le moderne GPU - C42009

Sorgenti di esempi Deferred shading

Deferred shadingImplementazione

Requisiti:

Texture oating point (per la posizione)Multiple Render Targets (per scrivere tutti gli attributicontemporaneamente)Floating-point blending (per il compositing)

Passi:

Si ricavano gli attributi per ogni verticeSi interpolano per frammento e si scrivono nel G-bu�erSi utilizza il G-bu�er per l'illuminazione

A. Theodorou ("Federico II\) Le moderne GPU C42009 129 / 152

Page 156: Le moderne GPU - C42009

Sorgenti di esempi Deferred shading

Deferred shadingI due fragment shader�

vary ing vec3 p o s i t i o n , normal ;uniform sampler2D Tex0 ;

void main ( void )f

g l F ragData [ 0 ] = vec4 ( p o s i t i o n . xyz , 1 . 0 ) ;g l F ragData [ 1 ] = vec4 ( no rma l i z e ( normal . xyz ) , 0 . 0 ) ;g l F ragData [ 2 ] = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;

g� ��

uniform sampler2D Tex0 , Tex1 , Tex2 ;[ . . . ]vec3 ecPos = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) . xyz ;vec3 normal = tex tu re2D (Tex1 , g l TexCoord [ 1 ] . s t ) . xyz ;vec4 colorMap = tex tu re2D (Tex2 , g l TexCoord [ 2 ] . s t ) ;[ . . . ]

� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 130 / 152

Page 157: Le moderne GPU - C42009

Sorgenti di esempi Deferred shading

Deferred shadingScreenshot

A. Theodorou ("Federico II\) Le moderne GPU C42009 131 / 152

Page 158: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

1 IntroduzionePrimo approccioPanoramica storica

2 La GPU in azionePotenza elaborativaApplicazioni general purposeApplicazioni tradizionali

3 Cenni sulla programmazioneSupporto OpenGLGL Shading Language

4 Sorgenti di esempiGouraud e Phong shadingNormal e parallax mappingToon shadingDepth of �eldDeferred shadingHigh Dynamic Range Imaging

A. Theodorou ("Federico II\) Le moderne GPU C42009 132 / 152

Page 159: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRITeoria

Immagini dal rapporto di contrasto molto elevato

Consente un'impostazione accurata dei valori di esposizione

Si presta facilmente all'utilizzo con algoritmi di adattamentotemporale dell'esposizione

Permette di implementare un e�etto di bloom (o glow) realistico

Per la visualizzazione a schermo �e fondamentale il tone-mapping

A. Theodorou ("Federico II\) Le moderne GPU C42009 133 / 152

Page 160: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRIEsempio (HL2: Lost Coast)

(a) Rendering sottoespostoA. Theodorou ("Federico II\) Le moderne GPU C42009 134 / 152

Page 161: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRIEsempio (HL2: Lost Coast)

(b) Rendering ad esposizione normaleA. Theodorou ("Federico II\) Le moderne GPU C42009 135 / 152

Page 162: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRIEsempio (HL2: Lost Coast)

(c) Rendering sovraespostoA. Theodorou ("Federico II\) Le moderne GPU C42009 136 / 152

Page 163: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRIEsempio (HL2: Lost Coast)

(d) Split view

A. Theodorou ("Federico II\) Le moderne GPU C42009 137 / 152

Page 164: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRIPrima implementazione

Si compone di 5 passi ed utilizza 4 Frame Bu�er Object oating-point

1� passo: rendering della scena in un FBO (quad texturizzata con unalight probe HDR)

2� passo: downsampling in un FBO ridotto a 1/4 ed applicazione�ltro high-pass

3� passo: applicazione del �ltro gaussiano lungo l'asse X

4� passo: applicazione del �ltro gaussiano lungo l'asse Y

5� passo: tone-mapping e composizione

A. Theodorou ("Federico II\) Le moderne GPU C42009 138 / 152

Page 165: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRI2� passo, fragment shader

uniform sampler2D Tex0 ;

void main ( void )f

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

i f ( colorMap . r > 1 .0 j j colorMap . g > 1 .0j j colorMap . b > 1 . 0 ) fg l F r a gCo l o r = colorMap ;

ge l s e f

g l F r a gCo l o r = vec4 ( 0 . 0 ) ;g

g� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 139 / 152

Page 166: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRI3� e 4� passo, fragment shader�

uniform f l o a t O f f s e t s [ 9 ] ;uniform f l o a t Weights [ 9 ] ;

uniform sampler2D Tex0 ;

void main ( void )f

i n t i ;vec4 c o l o r = vec4 ( 0 . 0 , 0 . 0 , 0 . 0 , 1 . 0 ) ;

f o r ( i =0; i <9; i++) fc o l o r += ( tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t+ vec2 ( O f f s e t s [ i ] , 0 . 0 ) ) � Weights [ i ] ) ;

g

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 140 / 152

Page 167: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRI5� passo, fragment shader�

uniform f l o a t Fac to r ;uniform f l o a t Exposure ;uniform f l o a t Gamma;

uniform sampler2D Tex0 ;uniform sampler2D Tex1 ;

void main ( void )f

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

g l F r a gCo l o r = colorMap + Fac to r � ( bloomMap � colorMap ) ;

g l F r a gCo l o r �= Exposure ;g l F r a gCo l o r = pow( g l F r a gCo l o r , vec4 (Gamma ) ) ;

g� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 141 / 152

Page 168: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRIScreenshot prima implementazione

(e) Rendering sottoesposto (f) Rendering sovraesposto

A. Theodorou ("Federico II\) Le moderne GPU C42009 142 / 152

Page 169: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRISeconda implementazione

Si compone di 7 passi ed utilizza 5+n Frame Bu�er Object oating-point

1� passo: rendering della scena in un FBO (quad texturizzata con unalight probe HDR)

2� passo: calcolo della luminanza media e massima della scena in pi�upassaggi

3� passo: applicazione di un �ltro bright pass

4� passo: applicazione del �ltro gaussiano lungo l'asse X

5� passo: applicazione del �ltro gaussiano lungo l'asse Y

6� passo: tone-mapping

7� passo: aggiunta dello strato per l'e�etto di glow

A. Theodorou ("Federico II\) Le moderne GPU C42009 143 / 152

Page 170: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRI2� passo, fragment shader (1/2)

uniform in t Width ;uniform in t Height ;uniform sampler2D Tex0 ;

const vec2 o f f s e t 2 x 2 = vec2 (�0.5 , 0 . 5 ) ;const vec3 LUMINANCE = vec3 ( 0 . 299 , 0 . 587 , 0 . 1 1 4 ) ;

void main ( void )f

i n t x , y ;f l o a t ave rage = 0 . 0 ;f l o a t maximum = �1e20 ;vec4 c o l o r = vec4 ( 0 . 0 ) ;

� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 144 / 152

Page 171: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRI2� passo, fragment shader (2/2)

f o r ( x=0; x<2; x++) ff o r ( y=0; y<2; y++) fvec2 o f f s e t = vec2 ( o f f s e t 2 x 2 [ x ] � ( 1 . 0/ f l o a t (Width ) ) ,

o f f s e t 2 x 2 [ y ] � ( 1 . 0/ f l o a t ( He ight ) ) ) ;c o l o r = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t + o f f s e t ) ;

f l o a t GreyValue = dot ( c o l o r . rgb , LUMINANCE) ;maximum = max(maximum , GreyVa lue ) ;ave r age += log (1 e�5 + GreyValue ) / 4 . 0 ;

gg

ave rage = exp ( ave rage ) ;g l F r a gCo l o r = vec4 ( average , maximum , 0 . 0 , 1 . 0 ) ;

g� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 145 / 152

Page 172: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRI3� passo, fragment shader (1/2)

uniform f l o a t Exposure ;uniform f l o a t Thre sho ld ;

uniform sampler2D Tex0 ;uniform sampler2D Tex1 ;

const vec3 LUMINANCE = vec3 ( 0 . 299 , 0 . 587 , 0 . 1 1 4 ) ;

void main ( void )f

f l o a t lum , sca leLum ;

vec4 c o l o r = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;vec4 l c = tex tu re2D (Tex1 , vec2 ( 0 . 5 , 0 . 5 ) ) ;

� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 146 / 152

Page 173: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRI3� passo, fragment shader (2/2)

lum = dot ( c o l o r . rgb , LUMINANCE) ;

sca leLum = ( lum � Exposure ) / l c . r ;c o l o r . rgb �= ( scaleLum �

( 1 . 0 + ( sca leLum / ( l c . g � l c . g ) ) ) ) / ( 1 . 0 + scaleLum ) ;c o l o r . rgb �= Thresho ld ;c o l o r . rgb = max( c o l o r . rgb , 0 . 0 ) ;

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 147 / 152

Page 174: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRI6� passo, fragment shader (1/2)

uniform f l o a t Exposure ;uniform sampler2D Tex0 ;uniform sampler2D Tex1 ;

void main ( void )f

f l o a t Lp , LmSqr , t o n eS c a l a r ;

vec4 c o l o r = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;vec4 l = tex tu re2D (Tex1 , vec2 ( 0 . 5 , 0 . 5 ) ) ;

� �

A. Theodorou ("Federico II\) Le moderne GPU C42009 148 / 152

Page 175: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRI6� passo, fragment shader (2/2)

Lp = ( Exposure / l . r ) �max( c o l o r . r , max( c o l o r . g , c o l o r . b ) ) ;

LmSqr = ( l . g � l . g ) � ( l . g � l . g ) ;t o n eS c a l a r = (Lp � ( 1 . 0 + (Lp / (LmSqr ) ) ) ) / ( 1 . 0 + Lp ) ;

c o l o r . rgb �= ton eS c a l a r ;

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 149 / 152

Page 176: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRI7� passo, fragment shader

uniform sampler2D Tex0 ;uniform sampler2D Tex1 ;

void main ( void )f

vec4 c o l o r = tex tu re2D (Tex0 , g l TexCoord [ 0 ] . s t ) ;c o l o r . rgb += textu re2D (Tex1 , g l TexCoord [ 0 ] . s t ) . rgb ;

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

A. Theodorou ("Federico II\) Le moderne GPU C42009 150 / 152

Page 177: Le moderne GPU - C42009

Sorgenti di esempi High Dynamic Range Imaging

HDRIScreenshot seconda implementazione

(g) Rendering sottoesposto (h) Rendering sovraesposto

A. Theodorou ("Federico II\) Le moderne GPU C42009 151 / 152

Page 178: Le moderne GPU - C42009

Approfondimenti

ApprofondimentiAlcuni link interessanti

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

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

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

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

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

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

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

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

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

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

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

http://encelo.netsons.org/blog

A. Theodorou ("Federico II\) Le moderne GPU C42009 152 / 152