SlideShare a Scribd company logo
1 of 178
Download to read offline
Le moderne GPU
                  Cosa  possibile fare oggi e cenni su come farlo
                       e

                                   Angelo Encelo Theodorou
                               Universit degli Studi di Napoli Federico II
                                        a


                 Revisione di [CG2008] per il seminario in aula C4




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


Sommario
1    Introduzione
        Primo approccio
        Panoramica storica
2    La GPU in azione
        Potenza elaborativa
        Applicazioni general purpose
        Applicazioni tradizionali
3    Cenni sulla programmazione
        Supporto OpenGL
        GL Shading Language
4    Sorgenti di esempi
        Gouraud e Phong shading
        Normal e parallax mapping
        Toon shading
        Depth of
eld
        Deferred shading
        High Dynamic Range Imaging
    A. Theodorou (Federico II)     Le moderne GPU   C42009   2 / 152
Sommario


Sommario
1    Introduzione
        Primo approccio
        Panoramica storica
2    La GPU in azione
        Potenza elaborativa
        Applicazioni general purpose
        Applicazioni tradizionali
3    Cenni sulla programmazione
        Supporto OpenGL
        GL Shading Language
4    Sorgenti di esempi
        Gouraud e Phong shading
        Normal e parallax mapping
        Toon shading
        Depth of
eld
        Deferred shading
        High Dynamic Range Imaging
    A. Theodorou (Federico II)     Le moderne GPU   C42009   2 / 152
Sommario


Sommario
1    Introduzione
        Primo approccio
        Panoramica storica
2    La GPU in azione
        Potenza elaborativa
        Applicazioni general purpose
        Applicazioni tradizionali
3    Cenni sulla programmazione
        Supporto OpenGL
        GL Shading Language
4    Sorgenti di esempi
        Gouraud e Phong shading
        Normal e parallax mapping
        Toon shading
        Depth of
eld
        Deferred shading
        High Dynamic Range Imaging
    A. Theodorou (Federico II)     Le moderne GPU   C42009   2 / 152
Sommario


Sommario
1    Introduzione
        Primo approccio
        Panoramica storica
2    La GPU in azione
        Potenza elaborativa
        Applicazioni general purpose
        Applicazioni tradizionali
3    Cenni sulla programmazione
        Supporto OpenGL
        GL Shading Language
4    Sorgenti di esempi
        Gouraud e Phong shading
        Normal e parallax mapping
        Toon shading
        Depth of
eld
        Deferred shading
        High Dynamic Range Imaging
    A. Theodorou (Federico II)     Le moderne GPU   C42009   2 / 152
Introduzione   Primo approccio

1    Introduzione
        Primo approccio
        Panoramica storica
2    La GPU in azione
        Potenza elaborativa
        Applicazioni general purpose
        Applicazioni tradizionali
3    Cenni sulla programmazione
        Supporto OpenGL
        GL Shading Language
4    Sorgenti di esempi
        Gouraud e Phong shading
        Normal e parallax mapping
        Toon shading
        Depth of
eld
        Deferred shading
        High Dynamic Range Imaging
    A. Theodorou (Federico II)        Le moderne GPU              C42009   3 / 152
Introduzione   Primo approccio


Primo aprroccio
La 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
Introduzione   Primo approccio


Primo aprroccio
La 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
Introduzione   Primo approccio


Primo aprroccio
La 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
Introduzione   Primo approccio


Primo aprroccio
La 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
Introduzione   Primo approccio


Primo aprroccio
La 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
Introduzione   Primo approccio


Primo aprroccio
La 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
Introduzione   Primo approccio


Primo aprroccio
La 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
Introduzione   Primo approccio


Primo aprroccio
La 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
Introduzione   Primo approccio


Primo approccio
La pipeline
ssa




   A. Theodorou (Federico II)        Le moderne GPU              C42009   5 / 152
Introduzione   Primo approccio


Primo approccio
La pipeline programmabile (SM 4.0)




  A. Theodorou (Federico II)        Le moderne GPU              C42009   6 / 152
Introduzione   Primo approccio


Primo approccio
Lo shader



      Il sorgente  speci
cato dal programmatore
                  e
      Viene eseguito in parallelo su pi unit autonome
                                        u    a
      Pu modi
care un solo elemento alla volta (gathering/scattering)
          o
      Pu intervenire in tre fasi distinte:
          o
             Trasformazione dei vertici
             Assemblaggio delle primitive
             Colorazione dei frammenti
      Di default emula le attivit della pipeline
ssa
                                 a




  A. Theodorou (Federico II)         Le moderne GPU              C42009   7 / 152
Introduzione   Primo approccio


Primo approccio
Lo shader



      Il sorgente  speci
cato dal programmatore
                  e
      Viene eseguito in parallelo su pi unit autonome
                                        u    a
      Pu modi
care un solo elemento alla volta (gathering/scattering)
          o
      Pu intervenire in tre fasi distinte:
          o
             Trasformazione dei vertici
             Assemblaggio delle primitive
             Colorazione dei frammenti
      Di default emula le attivit della pipeline
ssa
                                 a




  A. Theodorou (Federico II)         Le moderne GPU              C42009   7 / 152
Introduzione   Primo approccio


Primo approccio
Lo shader



      Il sorgente  speci
cato dal programmatore
                  e
      Viene eseguito in parallelo su pi unit autonome
                                        u    a
      Pu modi
care un solo elemento alla volta (gathering/scattering)
          o
      Pu intervenire in tre fasi distinte:
          o
             Trasformazione dei vertici
             Assemblaggio delle primitive
             Colorazione dei frammenti
      Di default emula le attivit della pipeline
ssa
                                 a




  A. Theodorou (Federico II)         Le moderne GPU              C42009   7 / 152
Introduzione   Primo approccio


Primo approccio
Lo shader



      Il sorgente  speci
cato dal programmatore
                  e
      Viene eseguito in parallelo su pi unit autonome
                                        u    a
      Pu modi
care un solo elemento alla volta (gathering/scattering)
          o
      Pu intervenire in tre fasi distinte:
          o
             Trasformazione dei vertici
             Assemblaggio delle primitive
             Colorazione dei frammenti
      Di default emula le attivit della pipeline
ssa
                                 a




  A. Theodorou (Federico II)         Le moderne GPU              C42009   7 / 152
Introduzione   Primo approccio


Primo approccio
Lo shader



      Il sorgente  speci
cato dal programmatore
                  e
      Viene eseguito in parallelo su pi unit autonome
                                        u    a
      Pu modi
care un solo elemento alla volta (gathering/scattering)
          o
      Pu intervenire in tre fasi distinte:
          o
             Trasformazione dei vertici
             Assemblaggio delle primitive
             Colorazione dei frammenti
      Di default emula le attivit della pipeline
ssa
                                 a




  A. Theodorou (Federico II)         Le moderne GPU              C42009   7 / 152
Introduzione   Primo approccio


Primo approccio
Lo shader



      Il sorgente  speci
cato dal programmatore
                  e
      Viene eseguito in parallelo su pi unit autonome
                                        u    a
      Pu modi
care un solo elemento alla volta (gathering/scattering)
          o
      Pu intervenire in tre fasi distinte:
          o
             Trasformazione dei vertici
             Assemblaggio delle primitive
             Colorazione dei frammenti
      Di default emula le attivit della pipeline
ssa
                                 a




  A. Theodorou (Federico II)         Le moderne GPU              C42009   7 / 152
Introduzione   Primo approccio


Primo approccio
Lo shader



      Il sorgente  speci
cato dal programmatore
                  e
      Viene eseguito in parallelo su pi unit autonome
                                        u    a
      Pu modi
care un solo elemento alla volta (gathering/scattering)
          o
      Pu intervenire in tre fasi distinte:
          o
             Trasformazione dei vertici
             Assemblaggio delle primitive
             Colorazione dei frammenti
      Di default emula le attivit della pipeline
ssa
                                 a




  A. Theodorou (Federico II)         Le moderne GPU              C42009   7 / 152
Introduzione   Primo approccio


Primo approccio
Lo shader



      Il sorgente  speci
cato dal programmatore
                  e
      Viene eseguito in parallelo su pi unit autonome
                                        u    a
      Pu modi
care un solo elemento alla volta (gathering/scattering)
          o
      Pu intervenire in tre fasi distinte:
          o
             Trasformazione dei vertici
             Assemblaggio delle primitive
             Colorazione dei frammenti
      Di default emula le attivit della pipeline
ssa
                                 a




  A. Theodorou (Federico II)         Le moderne GPU              C42009   7 / 152
Introduzione   Primo approccio


Primo approccio
Lo 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
Introduzione   Primo approccio


Primo approccio
Lo 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
Introduzione   Primo approccio


Primo approccio
Lo 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
Introduzione   Primo approccio


Primo approccio
Lo 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
Introduzione   Primo approccio


Primo approccio
Lo 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
Introduzione   Primo approccio


Primo approccio
Architettura a shader uni
cati




                                  Figura: Architettura discreta




                                  Figura: Architettura uni
cata
   A. Theodorou (Federico II)             Le moderne GPU              C42009   9 / 152
Introduzione   Primo approccio


Primo approccio
Architettura GT200




  A. Theodorou (Federico II)        Le moderne GPU              C42009   10 / 152
Introduzione   Primo approccio


Primo approccio
Architettura RV770




  A. Theodorou (Federico II)        Le moderne GPU              C42009   11 / 152
Introduzione   Panoramica storica

1    Introduzione
        Primo approccio
        Panoramica storica
2    La GPU in azione
        Potenza elaborativa
        Applicazioni general purpose
        Applicazioni tradizionali
3    Cenni sulla programmazione
        Supporto OpenGL
        GL Shading Language
4    Sorgenti di esempi
        Gouraud e Phong shading
        Normal e parallax mapping
        Toon shading
        Depth of
eld
        Deferred shading
        High Dynamic Range Imaging
    A. Theodorou (Federico II)        Le moderne GPU                 C42009   12 / 152
Introduzione   Panoramica storica


Panoramica storica
Quadro generale


      1 Generazione (1995): accelerazione 3D di base
      2 Generazione (1999): Transform  Lighting in hardware
      3 Generazione (2001): Programmabilit a livello dei vertici e,
                                              a
      limitatamente, a quello dei frammenti (SM 1.0)
      4 Generazione (2002): Piena programmabilit a livello dei frammenti
                                                  a
      (SM 2.0)
      5 Generazione (2004): Meno limitazioni, molta pi libert di
                                                       u        a
      programmazione della pipeline (SM 3.0)
      6 Generazione (2006): Programmabilit a livello delle primitive,
                                              a
      uni
cazione delle unit di calcolo (SM 4.0)
                            a
      7 Generazione (2008): Un'evoluzione prestazionale (SM 4.1)


  A. Theodorou (Federico II)        Le moderne GPU                 C42009   13 / 152
Introduzione   Panoramica storica


Panoramica storica
La prima generazione
01/12/1996: Diamond Monster 3D (SST1, 1M transistor)
01/08/1997: Nvidia Riva 128 (NV3, 3.5M transistor)
01/08/1998: Nvidia Riva TNT (NV4, 7M transistor)
01/11/1998: Ati Rage 128 (Rage 128, 8M transistor)
3 OpenGL 1.1 e Direct3D 5.0
    Hidden Surface Removal tramite Z-buering
    Mipmapping
    Flat e Gouraud shading
    Filtro bi/trilineare per le texture
    Alpha blending
    Stencil buer




                             (a) SST1 (b) NV3 (c) NV4 (d) Rage
  A. Theodorou (Federico II)            Le moderne GPU 128             C42009   14 / 152
Introduzione   Panoramica storica


Panoramica storica
La seconda generazione
01/10/1999: Nvidia GeForce 256 (NV10, 23M transistor)
15/06/2000: ATI Radeon (R100, 30M transistor)
26/04/2000: Nvidia GeForce2 GTS (NV15, 25M transistor)
3 OpenGL 1.3 e Direct3D 7.0
    Trasformazione, illuminazione e clipping dei vertici
    Z-buer pi preciso (compressione dei dati in transito)
               u
    Rudimentale shading per-pixel (nascosto nell'API, 2 texture
    miscelabili)
    Full Scene Anti Aliasing ed Anisotropic Filtering
    Supporto hardware alla compressione delle texture
    Supporto hardware a bump, shadow ed environment mapping




                                 (e) NV10 (f) R100 (g) NV15
  A. Theodorou (Federico II)            Le moderne GPU                 C42009   15 / 152
Introduzione   Panoramica storica


Panoramica storica
La terza generazione
01/05/2001: Nvidia GeForce 3 (NV20, 57M transistor)
14/08/2001: ATI Radeon 8500 (R200, 60M transistor)
04/02/2002: Nvidia GeForce4 Ti 4600 (NV25, 63M transistor)
3 OpenGL 1.4 e Direct3D 8.0/8.1
    Vertex shader 1.0
    Pixel shader 1.0 (parzialmente esposti nelle API, 4 texture miscelabili)
    Supporto hardware al True Re
ective Bump Mapping, Environmental
    Mapped Bump Mapping, ...




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

  A. Theodorou (Federico II)              Le moderne GPU                   C42009   16 / 152
Introduzione   Panoramica storica


Panoramica storica
La quarta generazione
19/08/2002: ATI Radeon 9700 PRO (R300, 110M transistor)
01/05/2003: Nvidia GeForce FX 5800 (NV30, 125M transistor)
04/05/2004: ATI Radeon X800 PRO (R420, 160M transistor)
3 OpenGL 1.5/2.0 e Direct3D 9.0b
      Vertex Shader 2.0
      Pixel Shader 2.0 (programmabili direttamente)
      Precisione FP16/FP32




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


  A. Theodorou (Federico II)              Le moderne GPU                 C42009   17 / 152
Introduzione   Panoramica storica


Panoramica storica
La quinta generazione
14/04/2004: Nvidia GeForce 6800 (NV40, 222M transistor)
22/06/2005: Nvidia GeForce 7800 GTX (G70, ex-NV47, 278M transistor)
05/10/2005: ATI Radeon X1800 XT (R520, 321M transistor)
3 OpenGL 2.0 e Direct3D 9.0c
    Vertex e Pixel Shader 3.0
             Pi lunghi e con pi registri a disposizione
               u                 u
             Gestione di cicli dinamici
             Texture fetch all'interno dei vertex shader
      Multiple Render Targets
      Accelerazione HW per 
ussi video HD




                                 (n) NV40        (o) G70         (p) R520
  A. Theodorou (Federico II)              Le moderne GPU                  C42009   18 / 152
Introduzione   Panoramica storica


Panoramica storica
La sesta generazione
08/11/2006: Nvidia GeForce 8800 GTX (G80, 681M transistor)
14/05/2007: ATI Radeon HD 2900 XT (R600XT, 700M transistor)
11/12/2007: Nvidia GeForce 8800 GTS 512 (G92, 754M transistor)
3 OpenGL 2.0/2.1 e Direct3D 10
    Vertex e Pixel Shader 4.0
    Geometry Shader 4.0
    Archittettura uni
cata
    Design superscalare




                                 (q) G80    (r)                (s) G92
                                            R600XT

  A. Theodorou (Federico II)             Le moderne GPU                 C42009   19 / 152
Introduzione   Panoramica storica


Panoramica storica
La settima generazione
19/11/2007: ATI Radeon HD 3870 (RV670XT, 666M transistor)
17/06/2008: Nvidia GeForce GTX 280 (G200, 1400M transistor)
25/06/2008: ATI Radeon HD 4870 (RV770XT, 956M transistor)
3 OpenGL 2.1/3.0/3.1 e Direct3D 10/10.1
    Shader Model 4.1/Direct3D 10.1 (solo ATI)
    Supporto alla doppia precisione
    Sempre pi stream processor e larghezza di banda
             u
    Un'evoluzione pi che una rivoluzione
                    u




                                 (t)         (u) G200 (v)
                                 RV670XT              RV770XT

  A. Theodorou (Federico II)             Le moderne GPU                 C42009   20 / 152
La GPU in azione   Potenza elaborativa

1    Introduzione
        Primo approccio
        Panoramica storica
2    La GPU in azione
        Potenza elaborativa
        Applicazioni general purpose
        Applicazioni tradizionali
3    Cenni sulla programmazione
        Supporto OpenGL
        GL Shading Language
4    Sorgenti di esempi
        Gouraud e Phong shading
        Normal e parallax mapping
        Toon shading
        Depth of
eld
        Deferred shading
        High Dynamic Range Imaging
    A. Theodorou (Federico II)            Le moderne GPU                  C42009   21 / 152
La GPU in azione   Potenza elaborativa


Potenza elaborativa
Riferimenti numerici

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


Potenza elaborativa
GPU vs CPU




                a 
Il Commissariat  l'Energie Atomique ha ordinato un cluster ibrido da 295 TFlops:
      103 TFlops derivanti dalle CPU
      192 TFlops derivanti dalle GPU
  A. Theodorou (Federico II)            Le moderne GPU                  C42009   23 / 152
La GPU in azione   Potenza elaborativa


Potenza elaborativa
Larghezza di banda




  A. Theodorou (Federico II)            Le moderne GPU                  C42009   24 / 152
La GPU in azione   Potenza elaborativa


Potenza elaborativa
Legge di Moore




  A. Theodorou (Federico II)            Le moderne GPU                  C42009   25 / 152
La GPU in azione   Applicazioni general purpose

1    Introduzione
        Primo approccio
        Panoramica storica
2    La GPU in azione
        Potenza elaborativa
        Applicazioni general purpose
        Applicazioni tradizionali
3    Cenni sulla programmazione
        Supporto OpenGL
        GL Shading Language
4    Sorgenti di esempi
        Gouraud e Phong shading
        Normal e parallax mapping
        Toon shading
        Depth of
eld
        Deferred shading
        High Dynamic Range Imaging
    A. Theodorou (Federico II)            Le moderne GPU                           C42009   26 / 152
La GPU in azione   Applicazioni general purpose


Applicazioni GPGPU
Il GPGPU

      GPGPU: General-Purpose computation on GPUs
      Sito di riferimento: http://www.gpgpu.org
      Speci
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
La GPU in azione   Applicazioni general purpose


Applicazioni general purpose
Nvidia Tesla: soluzione ad hoc




    Computer desktop o rack che montano pi schede video
                                             u
    Pensati speci
catamente per applicazioni GPGPU tramite CUDA
La controparte AMD  chiamata FireStream
                     e
   A. Theodorou (Federico II)            Le moderne GPU                           C42009   28 / 152
La GPU in azione   Applicazioni general purpose


Applicazioni general purpose
Fast Fourier Transforms




      CPU: Intel Core 2 Quad, 2.4GHz (FFTW)
      GPU: Nvidia GeForce 8800 GTX (CUDA e CUFFT)
  A. Theodorou (Federico II)            Le moderne GPU                           C42009   29 / 152
La GPU in azione   Applicazioni general purpose


Applicazioni GPGPU
Nvidia Gelato




              Renderer ad accelerazione hardware non in tempo reale
  A. Theodorou (Federico II)            Le moderne GPU                           C42009   30 / 152
La GPU in azione   Applicazioni general purpose


Applicazioni GPGPU
OpenVIDIA




            Computer vision con supporto all'accelerazione della GPU
  A. Theodorou (Federico II)            Le moderne GPU                           C42009   31 / 152
La GPU in azione   Applicazioni general purpose


Applicazioni GPGPU
Fluidodinamica




  Calcolo del sistema di equazioni dierenziali di Navier-Stokes sulla GPU
  A. Theodorou (Federico II)            Le moderne GPU                           C42009   32 / 152
La GPU in azione   Applicazioni general purpose


Applicazioni GPGPU
Generazione ed erosione di terreni




                                  Fault Formation              Circles              Perlin Noise
        Pentium 4 3.0 GHz         10612 ms                     650803 ms            10033 ms
        GeForce 7600GT            1090 ms                      1356 ms              113 ms
        GeForce 8600GT            915 ms                       952 ms               46 ms
   A. Theodorou (Federico II)            Le moderne GPU                                C42009    33 / 152
La GPU in azione   Applicazioni general purpose


Applicazioni GPGPU
Ricostruzione tomogra
ca




      FASTRA: PC consumer, monta 4 schede video 9800x2 (8 GPU), (Maggio
      2008, meno di 4000 Euro)
      CalcUA: Supercomputer dell'Univerist di Antwerp, 256 nodi (512 CPU
                                          a
      Opteron 250), (Marzo 2005, 3.5M di Euro)
  A. Theodorou (Federico II)            Le moderne GPU                           C42009   34 / 152
La GPU in azione   Applicazioni general purpose


Applicazioni GPGPU
Folding@Home




      CPU: 4 mol/day
      PS3: 100 mol/day
      HD 3870: 170 mol/day
      GTX 280: 500 mol/day
  A. Theodorou (Federico II)            Le moderne GPU                           C42009   35 / 152
La GPU in azione   Applicazioni general purpose


Applicazioni GPGPU
Password recovery




ElcomSoft Distributed Password Recovery
    http://www.elcomsoft.com/edpr.html
  A. Theodorou (Federico II)            Le moderne GPU                           C42009   36 / 152
La GPU in azione   Applicazioni general purpose


Applicazioni GPGPU
Nurien tech demo




                 Fisica dei capelli e degli abiti accelerata dalla GPU
  A. Theodorou (Federico II)            Le moderne GPU                           C42009   37 / 152
La GPU in azione   Applicazioni general purpose


Applicazioni GPGPU
Froblins Demo




                  L'IA degli oltre tremila agenti  gestita dalla GPU
                                                  e

  A. Theodorou (Federico II)            Le moderne GPU                           C42009   38 / 152
La GPU in azione   Applicazioni general purpose


Applicazioni GPGPU
Ulteriori applicazioni




             60 su 262 applicazioni dal sito CUDA Zone (Marzo 2009)
   A. Theodorou (Federico II)            Le moderne GPU                           C42009   39 / 152
La GPU in azione   Applicazioni tradizionali

1    Introduzione
        Primo approccio
        Panoramica storica
2    La GPU in azione
        Potenza elaborativa
        Applicazioni general purpose
        Applicazioni tradizionali
3    Cenni sulla programmazione
        Supporto OpenGL
        GL Shading Language
4    Sorgenti di esempi
        Gouraud e Phong shading
        Normal e parallax mapping
        Toon shading
        Depth of
eld
        Deferred shading
        High Dynamic Range Imaging
    A. Theodorou (Federico II)            Le moderne GPU                        C42009   40 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
La Game Industry


      Uno dei motori trainanti dell'economia statunitense con miliardi di
      dollari di fatturato annuale
      Nel 2008 ha superato il mercato mondiale dell'home video con oltre
      32 miliardi di dollari
      Il settore dell'intrattenimento  meno soggetto alla recente recessione
                                      e
      economica
      Causa principale della corsa agli armamenti nel settore dell'HW
      Uno dei principali campi applicativi della ricerca nella computer
      gra
ca
      Porta ad una ricaduta tecnologica anche in altri settori (educativo,
      medico, industriale, militare)


  A. Theodorou (Federico II)            Le moderne GPU                        C42009   41 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
La Game Industry


      Uno dei motori trainanti dell'economia statunitense con miliardi di
      dollari di fatturato annuale
      Nel 2008 ha superato il mercato mondiale dell'home video con oltre
      32 miliardi di dollari
      Il settore dell'intrattenimento  meno soggetto alla recente recessione
                                      e
      economica
      Causa principale della corsa agli armamenti nel settore dell'HW
      Uno dei principali campi applicativi della ricerca nella computer
      gra
ca
      Porta ad una ricaduta tecnologica anche in altri settori (educativo,
      medico, industriale, militare)


  A. Theodorou (Federico II)            Le moderne GPU                        C42009   41 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
La Game Industry


      Uno dei motori trainanti dell'economia statunitense con miliardi di
      dollari di fatturato annuale
      Nel 2008 ha superato il mercato mondiale dell'home video con oltre
      32 miliardi di dollari
      Il settore dell'intrattenimento  meno soggetto alla recente recessione
                                      e
      economica
      Causa principale della corsa agli armamenti nel settore dell'HW
      Uno dei principali campi applicativi della ricerca nella computer
      gra
ca
      Porta ad una ricaduta tecnologica anche in altri settori (educativo,
      medico, industriale, militare)


  A. Theodorou (Federico II)            Le moderne GPU                        C42009   41 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
La Game Industry


      Uno dei motori trainanti dell'economia statunitense con miliardi di
      dollari di fatturato annuale
      Nel 2008 ha superato il mercato mondiale dell'home video con oltre
      32 miliardi di dollari
      Il settore dell'intrattenimento  meno soggetto alla recente recessione
                                      e
      economica
      Causa principale della corsa agli armamenti nel settore dell'HW
      Uno dei principali campi applicativi della ricerca nella computer
      gra
ca
      Porta ad una ricaduta tecnologica anche in altri settori (educativo,
      medico, industriale, militare)


  A. Theodorou (Federico II)            Le moderne GPU                        C42009   41 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
La Game Industry


      Uno dei motori trainanti dell'economia statunitense con miliardi di
      dollari di fatturato annuale
      Nel 2008 ha superato il mercato mondiale dell'home video con oltre
      32 miliardi di dollari
      Il settore dell'intrattenimento  meno soggetto alla recente recessione
                                      e
      economica
      Causa principale della corsa agli armamenti nel settore dell'HW
      Uno dei principali campi applicativi della ricerca nella computer
      gra
ca
      Porta ad una ricaduta tecnologica anche in altri settori (educativo,
      medico, industriale, militare)


  A. Theodorou (Federico II)            Le moderne GPU                        C42009   41 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
La Game Industry


      Uno dei motori trainanti dell'economia statunitense con miliardi di
      dollari di fatturato annuale
      Nel 2008 ha superato il mercato mondiale dell'home video con oltre
      32 miliardi di dollari
      Il settore dell'intrattenimento  meno soggetto alla recente recessione
                                      e
      economica
      Causa principale della corsa agli armamenti nel settore dell'HW
      Uno dei principali campi applicativi della ricerca nella computer
      gra
ca
      Porta ad una ricaduta tecnologica anche in altri settori (educativo,
      medico, industriale, militare)


  A. Theodorou (Federico II)            Le moderne GPU                        C42009   41 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
Human Head (14/7/2007)




              Demo real-time della Nvidia per la GeForce 8800 Ultra
  A. Theodorou (Federico II)            Le moderne GPU                        C42009   42 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
CryEngine 2 vs Unreal Engine 3 (1/2)




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   43 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
CryEngine 2 vs Unreal Engine 3 (2/2)




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   44 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
Crysis vs Real-life




   A. Theodorou (Federico II)            Le moderne GPU                        C42009   45 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
Final Night Round 3 (20/2/2006)




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   46 / 152
La GPU in azione   Applicazioni tradizionali


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




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   47 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
Crysis (CryEngine 2, 13/11/2007)




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   48 / 152
La GPU in azione   Applicazioni tradizionali


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




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   49 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
Mass Eect (Unreal Engine 3, 20/11/2007)




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   50 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
3dMark Vantage, 28/4/2008




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   51 / 152
La GPU in azione   Applicazioni tradizionali


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




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   52 / 152
La GPU in azione   Applicazioni tradizionali


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




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   53 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
Fallout 3 (Gamebryo Engine, 28/10/2008)




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   54 / 152
La GPU in azione   Applicazioni tradizionali


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




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   55 / 152
La GPU in azione   Applicazioni tradizionali


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




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   56 / 152
La GPU in azione   Applicazioni tradizionali


Applicazioni tradizionali
Killzone 2, 25/2/2009




  A. Theodorou (Federico II)            Le moderne GPU                        C42009   57 / 152
Cenni sulla programmazione   Supporto OpenGL

1    Introduzione
        Primo approccio
        Panoramica storica
2    La GPU in azione
        Potenza elaborativa
        Applicazioni general purpose
        Applicazioni tradizionali
3    Cenni sulla programmazione
        Supporto OpenGL
        GL Shading Language
4    Sorgenti di esempi
        Gouraud e Phong shading
        Normal e parallax mapping
        Toon shading
        Depth of
eld
        Deferred shading
        High Dynamic Range Imaging
    A. Theodorou (Federico II)                      Le moderne GPU              C42009   58 / 152
Cenni sulla programmazione   Supporto OpenGL


Supporto OpenGL
Sommario


      Creazione shader object
      Creazione program object
      Utilizzo del program object
      Codice di esempio 1
      Liberazione delle risorse allocate
      Variabili uniformi
      Cenni sul resto
      Codice di esempio 2
Nota: Le funzioni che verranno esaminate fanno parte del core di OpenGL 2.0 e
successivi.


  A. Theodorou (Federico II)                      Le moderne GPU              C42009   59 / 152
Cenni sulla programmazione   Supporto OpenGL


Supporto OpenGL
Creazione shader object



      GLuint glCreateShader(GLenum shaderType )
      Ritorna l'handle per un nuovo shader
      Il tipo pu essere GL VERTEX SHADER o GL FRAGMENT SHADER.
                o
      void glShaderSource(GLuint shader, GLsizei count, const
      GLchar **string, const GLint *length )
      Imposta il sorgente per lo shader all'array di stringhe speci
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
Cenni sulla programmazione   Supporto OpenGL


Supporto OpenGL
Creazione program object




      GLuint glCreateProgram(void)
      Ritorna l'handle per un nuovo programma.
      void glAttachShader(GLuint program, GLuint shader )
      Associa lo shader al programma speci
cato.
      void glLinkProgram(GLuint program );
      Eettua la fase di linking per il programma.




  A. Theodorou (Federico II)                      Le moderne GPU              C42009   61 / 152
Cenni sulla programmazione   Supporto OpenGL


Supporto OpenGL
Utilizzo del program object




       void glUseProgram(GLuint program )
       Speci
ca il programma da usare.
       Da quel momento in poi, per qualsiasi operazione, non verr pi
                                                                  a u
       utilizzata la pipeline
ssa.
       Passando 0 come parametro si ritorna alla pipeline tradizionale.




   A. Theodorou (Federico II)                      Le moderne GPU              C42009   62 / 152
Cenni sulla programmazione   Supporto OpenGL


Supporto OpenGL
Codice di esempio 1
§
GLuint v , f , p ;
char £ vs , £ f s ;
p = glCreateProgram ( ) ;
v = g l C r e a t e S h a d e r (GL VERTEX SHADER ) ;
g l S h a d e r S o u r c e ( v , 1 , vs , NULL ) ;
glCompileShader ( v ) ;
glAttachShader (p , v ) ;

f = g l C r e a t e S h a d e r (GL FRAGMENT SHADER ) ;
g l S h a d e r S o u r c e ( f , 1 , f s , NULL ) ;
glCompileShader ( f ) ;
glAttachShader (p , f ) ;

glLinkProgram (p ) ;
glUseProgram ( p ) ;
¦                                                                                                 ¥
    A. Theodorou (Federico II)                      Le moderne GPU              C42009   63 / 152
Cenni sulla programmazione   Supporto OpenGL


Supporto OpenGL
Liberazione delle risorse allocate




       void glDeleteShader(GLuint shader )
       Comando opposto a quello di creazione, libera la memoria ed il
       riferimento associati all'handle passato.
       void glDeleteProgram(GLuint program )
       Come sopra, ma relativo ai programmi.
       void glDetachShader(GLuint program, GLuint shader )
       Cancella l'associazione tra shader e programma.




   A. Theodorou (Federico II)                      Le moderne GPU              C42009   64 / 152
Cenni sulla programmazione   Supporto OpenGL


Supporto OpenGL
Variabili uniformi
OpenGL permette il passaggio di dati agli shader
       GLint glGetUniformLocation(GLuint program, const GLchar
       *name )
       Ritorna il riferimento alla posizione di una certa variabile all'interno
       del programma, che dev'essere correntemente in uso.
       void glUniformf1|2|3|4gff|ig(GLint location, TYPE v )
       Imposta il valore della variabile alla locazione speci
cata a quello
       passato dalla funzione.
       void glUniformf1|2|3|4gff|igv(GLint location, GLuint
       count, const TYPE v )
       Come sopra, ma questa volta permette di speci
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
Cenni sulla programmazione   Supporto OpenGL


Supporto OpenGL
Cenni sul resto
       glGetUniform() e glGetActiveUniform()
       Ritorna il valore di una o di tutte le variabili uniformi attive nel
       programma speci
cato.
       Funzioni di query
       Permettono di ricavare lo stato degli oggetti creati, stampare log
       diagnostici, conoscere gli oggetti correntemente attivi.
       Funzioni relative agli attributi per vertice
       Permettono di speci
care attributi da passare agli shader, all'interno
       di una coppia glBegin()/glEnd(), diversi per ogni vertice.
       Multiple Render Targets
       I fragment shader supportano la scrittura contemporanea su pi frame
                                                                          u
       buer.
       Ausilio per lo svilupo
       glValidateProgram() controlla se l'eseguibile del programma
       speci
cato, dato lo stato OpenGL corrente, pu funzionare.
                                                         o
   A. Theodorou (Federico II)                      Le moderne GPU              C42009   66 / 152
Cenni sulla programmazione   Supporto OpenGL


Supporto OpenGL
Codice di esempio 2


§
GLuint p ;
GLint l o c 1 , l o c 2 ;

glUseProgram ( p ) ;
loc1 = glGetUniformLocation (p ,  Variable1  ) ;
glUniform1f ( loc1 , 1.0 f ) ;

loc2 = glGetUniformLocation (p ,  Variable2  ) ;
glUniform1i ( loc2 , 1 ) ;
¦                                                                                                 ¥



    A. Theodorou (Federico II)                      Le moderne GPU              C42009   67 / 152
Cenni sulla programmazione   GL Shading Language

1    Introduzione
        Primo approccio
        Panoramica storica
2    La GPU in azione
        Potenza elaborativa
        Applicazioni general purpose
        Applicazioni tradizionali
3    Cenni sulla programmazione
        Supporto OpenGL
        GL Shading Language
4    Sorgenti di esempi
        Gouraud e Phong shading
        Normal e parallax mapping
        Toon shading
        Depth of
eld
        Deferred shading
        High Dynamic Range Imaging
    A. Theodorou (Federico II)                      Le moderne GPU                  C42009   68 / 152

More Related Content

Similar to Le moderne GPU - C42009

Agrillo Fedora 11 release party 18 giugno 2009
Agrillo Fedora 11 release party 18 giugno 2009Agrillo Fedora 11 release party 18 giugno 2009
Agrillo Fedora 11 release party 18 giugno 2009Giuseppe Agrillo
 
LinuxDay 2005 - Multimedialità con Linux - slides
LinuxDay 2005 - Multimedialità con Linux - slidesLinuxDay 2005 - Multimedialità con Linux - slides
LinuxDay 2005 - Multimedialità con Linux - slidesMaurizio Antonelli
 
Linux Day 2016 Milano - Open Source Hardware PowerPC Notebook
Linux Day 2016 Milano - Open Source Hardware PowerPC Notebook Linux Day 2016 Milano - Open Source Hardware PowerPC Notebook
Linux Day 2016 Milano - Open Source Hardware PowerPC Notebook Roberto Innocenti
 
Software libero nei sistemi embedded
Software libero nei sistemi embeddedSoftware libero nei sistemi embedded
Software libero nei sistemi embeddedDaniele Costarella
 
OpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCLOpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCLFrancesco Garofalo
 
RGX Remote Graphics eXperience 1.1 Sinthera
RGX Remote Graphics eXperience 1.1 SintheraRGX Remote Graphics eXperience 1.1 Sinthera
RGX Remote Graphics eXperience 1.1 SintheraLuca Turco
 
Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...
Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...
Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...Daniele Ferla
 
Un Pinguino Nel Tuo Modem
Un Pinguino Nel Tuo ModemUn Pinguino Nel Tuo Modem
Un Pinguino Nel Tuo ModemMarco Scaloni
 
Object printing for dummies [veneziacamp format]
Object printing for dummies [veneziacamp format]Object printing for dummies [veneziacamp format]
Object printing for dummies [veneziacamp format]Leo Sorge
 

Similar to Le moderne GPU - C42009 (15)

Agrillo Fedora 11 release party 18 giugno 2009
Agrillo Fedora 11 release party 18 giugno 2009Agrillo Fedora 11 release party 18 giugno 2009
Agrillo Fedora 11 release party 18 giugno 2009
 
Io, Android
Io, AndroidIo, Android
Io, Android
 
LinuxDay 2005 - Multimedialità con Linux - slides
LinuxDay 2005 - Multimedialità con Linux - slidesLinuxDay 2005 - Multimedialità con Linux - slides
LinuxDay 2005 - Multimedialità con Linux - slides
 
Raspy Fi: Open source never sounded so good (by Michelangelo Guarise)
Raspy Fi: Open source never sounded so good (by Michelangelo Guarise)Raspy Fi: Open source never sounded so good (by Michelangelo Guarise)
Raspy Fi: Open source never sounded so good (by Michelangelo Guarise)
 
Multimedia con GNU/Linux
Multimedia con GNU/LinuxMultimedia con GNU/Linux
Multimedia con GNU/Linux
 
Linux Day 2016 Milano - Open Source Hardware PowerPC Notebook
Linux Day 2016 Milano - Open Source Hardware PowerPC Notebook Linux Day 2016 Milano - Open Source Hardware PowerPC Notebook
Linux Day 2016 Milano - Open Source Hardware PowerPC Notebook
 
Software libero nei sistemi embedded
Software libero nei sistemi embeddedSoftware libero nei sistemi embedded
Software libero nei sistemi embedded
 
G4MoRe 2.0 - ASITA 2013
G4MoRe 2.0 - ASITA 2013G4MoRe 2.0 - ASITA 2013
G4MoRe 2.0 - ASITA 2013
 
OpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCLOpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCL
 
Lezioni 2009
Lezioni 2009Lezioni 2009
Lezioni 2009
 
Thesis Frascino Slide iT
Thesis Frascino Slide iTThesis Frascino Slide iT
Thesis Frascino Slide iT
 
RGX Remote Graphics eXperience 1.1 Sinthera
RGX Remote Graphics eXperience 1.1 SintheraRGX Remote Graphics eXperience 1.1 Sinthera
RGX Remote Graphics eXperience 1.1 Sinthera
 
Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...
Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...
Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...
 
Un Pinguino Nel Tuo Modem
Un Pinguino Nel Tuo ModemUn Pinguino Nel Tuo Modem
Un Pinguino Nel Tuo Modem
 
Object printing for dummies [veneziacamp format]
Object printing for dummies [veneziacamp format]Object printing for dummies [veneziacamp format]
Object printing for dummies [veneziacamp format]
 

Le moderne GPU - C42009

  • 1. Le moderne GPU Cosa possibile fare oggi e cenni su come farlo e Angelo Encelo Theodorou Universit degli Studi di Napoli Federico II a Revisione di [CG2008] per il seminario in aula C4 A. Theodorou (Federico II) Le moderne GPU C42009 1 / 152
  • 2. Sommario Sommario 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 3. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 2 / 152
  • 4. Sommario Sommario 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 5. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 2 / 152
  • 6. Sommario Sommario 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 7. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 2 / 152
  • 8. Sommario Sommario 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 9. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 2 / 152
  • 10. Introduzione Primo approccio 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 11. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 3 / 152
  • 12. Introduzione Primo approccio Primo aprroccio La GPU oggi Caratteristiche salienti delle Graphics Processing Unit attuali: Vertex, Geometry e Fragment shader (architettura uni
  • 13. cata) Centinaia di gigaFLOPS in single-precision Decine di gigaFLOPS in double-precision Decine di GB/s di banda da e verso la VRAM Rapporto di crescita superiore a quello delle CPU Utilizzabili per compiti general purpose Programmabili mediante librerie non gra
  • 14. che A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
  • 15. Introduzione Primo approccio Primo aprroccio La GPU oggi Caratteristiche salienti delle Graphics Processing Unit attuali: Vertex, Geometry e Fragment shader (architettura uni
  • 16. cata) Centinaia di gigaFLOPS in single-precision Decine di gigaFLOPS in double-precision Decine di GB/s di banda da e verso la VRAM Rapporto di crescita superiore a quello delle CPU Utilizzabili per compiti general purpose Programmabili mediante librerie non gra
  • 17. che A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
  • 18. Introduzione Primo approccio Primo aprroccio La GPU oggi Caratteristiche salienti delle Graphics Processing Unit attuali: Vertex, Geometry e Fragment shader (architettura uni
  • 19. cata) Centinaia di gigaFLOPS in single-precision Decine di gigaFLOPS in double-precision Decine di GB/s di banda da e verso la VRAM Rapporto di crescita superiore a quello delle CPU Utilizzabili per compiti general purpose Programmabili mediante librerie non gra
  • 20. che A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
  • 21. Introduzione Primo approccio Primo aprroccio La GPU oggi Caratteristiche salienti delle Graphics Processing Unit attuali: Vertex, Geometry e Fragment shader (architettura uni
  • 22. cata) Centinaia di gigaFLOPS in single-precision Decine di gigaFLOPS in double-precision Decine di GB/s di banda da e verso la VRAM Rapporto di crescita superiore a quello delle CPU Utilizzabili per compiti general purpose Programmabili mediante librerie non gra
  • 23. che A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
  • 24. Introduzione Primo approccio Primo aprroccio La GPU oggi Caratteristiche salienti delle Graphics Processing Unit attuali: Vertex, Geometry e Fragment shader (architettura uni
  • 25. cata) Centinaia di gigaFLOPS in single-precision Decine di gigaFLOPS in double-precision Decine di GB/s di banda da e verso la VRAM Rapporto di crescita superiore a quello delle CPU Utilizzabili per compiti general purpose Programmabili mediante librerie non gra
  • 26. che A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
  • 27. Introduzione Primo approccio Primo aprroccio La GPU oggi Caratteristiche salienti delle Graphics Processing Unit attuali: Vertex, Geometry e Fragment shader (architettura uni
  • 28. cata) Centinaia di gigaFLOPS in single-precision Decine di gigaFLOPS in double-precision Decine di GB/s di banda da e verso la VRAM Rapporto di crescita superiore a quello delle CPU Utilizzabili per compiti general purpose Programmabili mediante librerie non gra
  • 29. che A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
  • 30. Introduzione Primo approccio Primo aprroccio La GPU oggi Caratteristiche salienti delle Graphics Processing Unit attuali: Vertex, Geometry e Fragment shader (architettura uni
  • 31. cata) Centinaia di gigaFLOPS in single-precision Decine di gigaFLOPS in double-precision Decine di GB/s di banda da e verso la VRAM Rapporto di crescita superiore a quello delle CPU Utilizzabili per compiti general purpose Programmabili mediante librerie non gra
  • 32. che A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
  • 33. Introduzione Primo approccio Primo aprroccio La GPU oggi Caratteristiche salienti delle Graphics Processing Unit attuali: Vertex, Geometry e Fragment shader (architettura uni
  • 34. cata) Centinaia di gigaFLOPS in single-precision Decine di gigaFLOPS in double-precision Decine di GB/s di banda da e verso la VRAM Rapporto di crescita superiore a quello delle CPU Utilizzabili per compiti general purpose Programmabili mediante librerie non gra
  • 35. che A. Theodorou (Federico II) Le moderne GPU C42009 4 / 152
  • 36. Introduzione Primo approccio Primo approccio La pipeline
  • 37. ssa A. Theodorou (Federico II) Le moderne GPU C42009 5 / 152
  • 38. Introduzione Primo approccio Primo approccio La pipeline programmabile (SM 4.0) A. Theodorou (Federico II) Le moderne GPU C42009 6 / 152
  • 39. Introduzione Primo approccio Primo approccio Lo shader Il sorgente speci
  • 40. cato dal programmatore e Viene eseguito in parallelo su pi unit autonome u a Pu modi
  • 41. care un solo elemento alla volta (gathering/scattering) o Pu intervenire in tre fasi distinte: o Trasformazione dei vertici Assemblaggio delle primitive Colorazione dei frammenti Di default emula le attivit della pipeline
  • 42. ssa a A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
  • 43. Introduzione Primo approccio Primo approccio Lo shader Il sorgente speci
  • 44. cato dal programmatore e Viene eseguito in parallelo su pi unit autonome u a Pu modi
  • 45. care un solo elemento alla volta (gathering/scattering) o Pu intervenire in tre fasi distinte: o Trasformazione dei vertici Assemblaggio delle primitive Colorazione dei frammenti Di default emula le attivit della pipeline
  • 46. ssa a A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
  • 47. Introduzione Primo approccio Primo approccio Lo shader Il sorgente speci
  • 48. cato dal programmatore e Viene eseguito in parallelo su pi unit autonome u a Pu modi
  • 49. care un solo elemento alla volta (gathering/scattering) o Pu intervenire in tre fasi distinte: o Trasformazione dei vertici Assemblaggio delle primitive Colorazione dei frammenti Di default emula le attivit della pipeline
  • 50. ssa a A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
  • 51. Introduzione Primo approccio Primo approccio Lo shader Il sorgente speci
  • 52. cato dal programmatore e Viene eseguito in parallelo su pi unit autonome u a Pu modi
  • 53. care un solo elemento alla volta (gathering/scattering) o Pu intervenire in tre fasi distinte: o Trasformazione dei vertici Assemblaggio delle primitive Colorazione dei frammenti Di default emula le attivit della pipeline
  • 54. ssa a A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
  • 55. Introduzione Primo approccio Primo approccio Lo shader Il sorgente speci
  • 56. cato dal programmatore e Viene eseguito in parallelo su pi unit autonome u a Pu modi
  • 57. care un solo elemento alla volta (gathering/scattering) o Pu intervenire in tre fasi distinte: o Trasformazione dei vertici Assemblaggio delle primitive Colorazione dei frammenti Di default emula le attivit della pipeline
  • 58. ssa a A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
  • 59. Introduzione Primo approccio Primo approccio Lo shader Il sorgente speci
  • 60. cato dal programmatore e Viene eseguito in parallelo su pi unit autonome u a Pu modi
  • 61. care un solo elemento alla volta (gathering/scattering) o Pu intervenire in tre fasi distinte: o Trasformazione dei vertici Assemblaggio delle primitive Colorazione dei frammenti Di default emula le attivit della pipeline
  • 62. ssa a A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
  • 63. Introduzione Primo approccio Primo approccio Lo shader Il sorgente speci
  • 64. cato dal programmatore e Viene eseguito in parallelo su pi unit autonome u a Pu modi
  • 65. care un solo elemento alla volta (gathering/scattering) o Pu intervenire in tre fasi distinte: o Trasformazione dei vertici Assemblaggio delle primitive Colorazione dei frammenti Di default emula le attivit della pipeline
  • 66. ssa a A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
  • 67. Introduzione Primo approccio Primo approccio Lo shader Il sorgente speci
  • 68. cato dal programmatore e Viene eseguito in parallelo su pi unit autonome u a Pu modi
  • 69. care un solo elemento alla volta (gathering/scattering) o Pu intervenire in tre fasi distinte: o Trasformazione dei vertici Assemblaggio delle primitive Colorazione dei frammenti Di default emula le attivit della pipeline
  • 70. ssa a A. Theodorou (Federico II) Le moderne GPU C42009 7 / 152
  • 71. Introduzione Primo approccio Primo approccio Lo stream processor Esegue uno qualsiasi dei tre tipi di shader (architettura uni
  • 72. cata) Viene istruito da un dispatcher che gestisce il work-load Opera seguendo un design superscalare Lavora in singola e doppia precisione (IEEE-754 compliant) Segue il paradigma dello stream processing (SPMD, kernel, stream) A. Theodorou (Federico II) Le moderne GPU C42009 8 / 152
  • 73. Introduzione Primo approccio Primo approccio Lo stream processor Esegue uno qualsiasi dei tre tipi di shader (architettura uni
  • 74. cata) Viene istruito da un dispatcher che gestisce il work-load Opera seguendo un design superscalare Lavora in singola e doppia precisione (IEEE-754 compliant) Segue il paradigma dello stream processing (SPMD, kernel, stream) A. Theodorou (Federico II) Le moderne GPU C42009 8 / 152
  • 75. Introduzione Primo approccio Primo approccio Lo stream processor Esegue uno qualsiasi dei tre tipi di shader (architettura uni
  • 76. cata) Viene istruito da un dispatcher che gestisce il work-load Opera seguendo un design superscalare Lavora in singola e doppia precisione (IEEE-754 compliant) Segue il paradigma dello stream processing (SPMD, kernel, stream) A. Theodorou (Federico II) Le moderne GPU C42009 8 / 152
  • 77. Introduzione Primo approccio Primo approccio Lo stream processor Esegue uno qualsiasi dei tre tipi di shader (architettura uni
  • 78. cata) Viene istruito da un dispatcher che gestisce il work-load Opera seguendo un design superscalare Lavora in singola e doppia precisione (IEEE-754 compliant) Segue il paradigma dello stream processing (SPMD, kernel, stream) A. Theodorou (Federico II) Le moderne GPU C42009 8 / 152
  • 79. Introduzione Primo approccio Primo approccio Lo stream processor Esegue uno qualsiasi dei tre tipi di shader (architettura uni
  • 80. cata) Viene istruito da un dispatcher che gestisce il work-load Opera seguendo un design superscalare Lavora in singola e doppia precisione (IEEE-754 compliant) Segue il paradigma dello stream processing (SPMD, kernel, stream) A. Theodorou (Federico II) Le moderne GPU C42009 8 / 152
  • 81. Introduzione Primo approccio Primo approccio Architettura a shader uni
  • 82. cati Figura: Architettura discreta Figura: Architettura uni
  • 83. cata A. Theodorou (Federico II) Le moderne GPU C42009 9 / 152
  • 84. Introduzione Primo approccio Primo approccio Architettura GT200 A. Theodorou (Federico II) Le moderne GPU C42009 10 / 152
  • 85. Introduzione Primo approccio Primo approccio Architettura RV770 A. Theodorou (Federico II) Le moderne GPU C42009 11 / 152
  • 86. Introduzione Panoramica storica 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 87. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 12 / 152
  • 88. Introduzione Panoramica storica Panoramica storica Quadro generale 1 Generazione (1995): accelerazione 3D di base 2 Generazione (1999): Transform Lighting in hardware 3 Generazione (2001): Programmabilit a livello dei vertici e, a limitatamente, a quello dei frammenti (SM 1.0) 4 Generazione (2002): Piena programmabilit a livello dei frammenti a (SM 2.0) 5 Generazione (2004): Meno limitazioni, molta pi libert di u a programmazione della pipeline (SM 3.0) 6 Generazione (2006): Programmabilit a livello delle primitive, a uni
  • 89. cazione delle unit di calcolo (SM 4.0) a 7 Generazione (2008): Un'evoluzione prestazionale (SM 4.1) A. Theodorou (Federico II) Le moderne GPU C42009 13 / 152
  • 90. Introduzione Panoramica storica Panoramica storica La prima generazione 01/12/1996: Diamond Monster 3D (SST1, 1M transistor) 01/08/1997: Nvidia Riva 128 (NV3, 3.5M transistor) 01/08/1998: Nvidia Riva TNT (NV4, 7M transistor) 01/11/1998: Ati Rage 128 (Rage 128, 8M transistor) 3 OpenGL 1.1 e Direct3D 5.0 Hidden Surface Removal tramite Z-buering Mipmapping Flat e Gouraud shading Filtro bi/trilineare per le texture Alpha blending Stencil buer (a) SST1 (b) NV3 (c) NV4 (d) Rage A. Theodorou (Federico II) Le moderne GPU 128 C42009 14 / 152
  • 91. Introduzione Panoramica storica Panoramica storica La seconda generazione 01/10/1999: Nvidia GeForce 256 (NV10, 23M transistor) 15/06/2000: ATI Radeon (R100, 30M transistor) 26/04/2000: Nvidia GeForce2 GTS (NV15, 25M transistor) 3 OpenGL 1.3 e Direct3D 7.0 Trasformazione, illuminazione e clipping dei vertici Z-buer pi preciso (compressione dei dati in transito) u Rudimentale shading per-pixel (nascosto nell'API, 2 texture miscelabili) Full Scene Anti Aliasing ed Anisotropic Filtering Supporto hardware alla compressione delle texture Supporto hardware a bump, shadow ed environment mapping (e) NV10 (f) R100 (g) NV15 A. Theodorou (Federico II) Le moderne GPU C42009 15 / 152
  • 92. Introduzione Panoramica storica Panoramica storica La terza generazione 01/05/2001: Nvidia GeForce 3 (NV20, 57M transistor) 14/08/2001: ATI Radeon 8500 (R200, 60M transistor) 04/02/2002: Nvidia GeForce4 Ti 4600 (NV25, 63M transistor) 3 OpenGL 1.4 e Direct3D 8.0/8.1 Vertex shader 1.0 Pixel shader 1.0 (parzialmente esposti nelle API, 4 texture miscelabili) Supporto hardware al True Re ective Bump Mapping, Environmental Mapped Bump Mapping, ... (h) NV20 (i) R200 (j) NV25 A. Theodorou (Federico II) Le moderne GPU C42009 16 / 152
  • 93. Introduzione Panoramica storica Panoramica storica La quarta generazione 19/08/2002: ATI Radeon 9700 PRO (R300, 110M transistor) 01/05/2003: Nvidia GeForce FX 5800 (NV30, 125M transistor) 04/05/2004: ATI Radeon X800 PRO (R420, 160M transistor) 3 OpenGL 1.5/2.0 e Direct3D 9.0b Vertex Shader 2.0 Pixel Shader 2.0 (programmabili direttamente) Precisione FP16/FP32 (k) R300 (l) NV30 (m) R420 A. Theodorou (Federico II) Le moderne GPU C42009 17 / 152
  • 94. Introduzione Panoramica storica Panoramica storica La quinta generazione 14/04/2004: Nvidia GeForce 6800 (NV40, 222M transistor) 22/06/2005: Nvidia GeForce 7800 GTX (G70, ex-NV47, 278M transistor) 05/10/2005: ATI Radeon X1800 XT (R520, 321M transistor) 3 OpenGL 2.0 e Direct3D 9.0c Vertex e Pixel Shader 3.0 Pi lunghi e con pi registri a disposizione u u Gestione di cicli dinamici Texture fetch all'interno dei vertex shader Multiple Render Targets Accelerazione HW per ussi video HD (n) NV40 (o) G70 (p) R520 A. Theodorou (Federico II) Le moderne GPU C42009 18 / 152
  • 95. Introduzione Panoramica storica Panoramica storica La sesta generazione 08/11/2006: Nvidia GeForce 8800 GTX (G80, 681M transistor) 14/05/2007: ATI Radeon HD 2900 XT (R600XT, 700M transistor) 11/12/2007: Nvidia GeForce 8800 GTS 512 (G92, 754M transistor) 3 OpenGL 2.0/2.1 e Direct3D 10 Vertex e Pixel Shader 4.0 Geometry Shader 4.0 Archittettura uni
  • 96. cata Design superscalare (q) G80 (r) (s) G92 R600XT A. Theodorou (Federico II) Le moderne GPU C42009 19 / 152
  • 97. Introduzione Panoramica storica Panoramica storica La settima generazione 19/11/2007: ATI Radeon HD 3870 (RV670XT, 666M transistor) 17/06/2008: Nvidia GeForce GTX 280 (G200, 1400M transistor) 25/06/2008: ATI Radeon HD 4870 (RV770XT, 956M transistor) 3 OpenGL 2.1/3.0/3.1 e Direct3D 10/10.1 Shader Model 4.1/Direct3D 10.1 (solo ATI) Supporto alla doppia precisione Sempre pi stream processor e larghezza di banda u Un'evoluzione pi che una rivoluzione u (t) (u) G200 (v) RV670XT RV770XT A. Theodorou (Federico II) Le moderne GPU C42009 20 / 152
  • 98. La GPU in azione Potenza elaborativa 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 99. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 21 / 152
  • 100. La GPU in azione Potenza elaborativa Potenza elaborativa Riferimenti numerici Processore Core Transistor (M) Frequenza (MHz) York
  • 101. eld (QX9970) 4 core 220+600 3200 Xenon (XBox 360) 3 core 165 3200 Cell (PS3) 1 PPE+6 SPE 234 3200 RV790XT (HD4890) 800 sp 956 850 GT200b (GTX285) 240 1400 1476 R700 (HD4870X2) 800x2 sp 956x2 750 GT200b (GTX295) 240x2 1400x2 1242 Processore SP (GFLOPS) DP (GFLOPS) Banda (GB/s) York
  • 102. eld (QX9970) 51.1 25.5 12.8 Xenon (XBox 360) 115.2 12 21.6 Cell (PS3) 204 15 12.8 RV790XT (HD4890) 1360 272 124.8 GT200b (GTX285) 1209.5 88.8 159 R700 (HD4870X2) 2400 480 115.2x2 GT200b (GTX295) 1788 131.3 111.9x2 A. Theodorou (Federico II) Le moderne GPU C42009 22 / 152
  • 103. La GPU in azione Potenza elaborativa Potenza elaborativa GPU vs CPU a Il Commissariat l'Energie Atomique ha ordinato un cluster ibrido da 295 TFlops: 103 TFlops derivanti dalle CPU 192 TFlops derivanti dalle GPU A. Theodorou (Federico II) Le moderne GPU C42009 23 / 152
  • 104. La GPU in azione Potenza elaborativa Potenza elaborativa Larghezza di banda A. Theodorou (Federico II) Le moderne GPU C42009 24 / 152
  • 105. La GPU in azione Potenza elaborativa Potenza elaborativa Legge di Moore A. Theodorou (Federico II) Le moderne GPU C42009 25 / 152
  • 106. La GPU in azione Applicazioni general purpose 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 107. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 26 / 152
  • 108. La GPU in azione Applicazioni general purpose Applicazioni GPGPU Il GPGPU GPGPU: General-Purpose computation on GPUs Sito di riferimento: http://www.gpgpu.org Speci
  • 109. che a standard aperto: OpenCL (Open Computing Language) Librerie dei produttori di HW: CUDA e Brook++/CAL Middleware
  • 110. sico: Nvidia PhysX (ex Ageia) Stage nella pipeline Direct3D 11: Compute shader Vecchie librerie open-source: BrookGPU, Sh A. Theodorou (Federico II) Le moderne GPU C42009 27 / 152
  • 111. La GPU in azione Applicazioni general purpose Applicazioni general purpose Nvidia Tesla: soluzione ad hoc Computer desktop o rack che montano pi schede video u Pensati speci
  • 112. catamente per applicazioni GPGPU tramite CUDA La controparte AMD chiamata FireStream e A. Theodorou (Federico II) Le moderne GPU C42009 28 / 152
  • 113. La GPU in azione Applicazioni general purpose Applicazioni general purpose Fast Fourier Transforms CPU: Intel Core 2 Quad, 2.4GHz (FFTW) GPU: Nvidia GeForce 8800 GTX (CUDA e CUFFT) A. Theodorou (Federico II) Le moderne GPU C42009 29 / 152
  • 114. La GPU in azione Applicazioni general purpose Applicazioni GPGPU Nvidia Gelato Renderer ad accelerazione hardware non in tempo reale A. Theodorou (Federico II) Le moderne GPU C42009 30 / 152
  • 115. La GPU in azione Applicazioni general purpose Applicazioni GPGPU OpenVIDIA Computer vision con supporto all'accelerazione della GPU A. Theodorou (Federico II) Le moderne GPU C42009 31 / 152
  • 116. La GPU in azione Applicazioni general purpose Applicazioni GPGPU Fluidodinamica Calcolo del sistema di equazioni dierenziali di Navier-Stokes sulla GPU A. Theodorou (Federico II) Le moderne GPU C42009 32 / 152
  • 117. La GPU in azione Applicazioni general purpose Applicazioni GPGPU Generazione ed erosione di terreni Fault Formation Circles Perlin Noise Pentium 4 3.0 GHz 10612 ms 650803 ms 10033 ms GeForce 7600GT 1090 ms 1356 ms 113 ms GeForce 8600GT 915 ms 952 ms 46 ms A. Theodorou (Federico II) Le moderne GPU C42009 33 / 152
  • 118. La GPU in azione Applicazioni general purpose Applicazioni GPGPU Ricostruzione tomogra
  • 119. ca FASTRA: PC consumer, monta 4 schede video 9800x2 (8 GPU), (Maggio 2008, meno di 4000 Euro) CalcUA: Supercomputer dell'Univerist di Antwerp, 256 nodi (512 CPU a Opteron 250), (Marzo 2005, 3.5M di Euro) A. Theodorou (Federico II) Le moderne GPU C42009 34 / 152
  • 120. La GPU in azione Applicazioni general purpose Applicazioni GPGPU Folding@Home CPU: 4 mol/day PS3: 100 mol/day HD 3870: 170 mol/day GTX 280: 500 mol/day A. Theodorou (Federico II) Le moderne GPU C42009 35 / 152
  • 121. La GPU in azione Applicazioni general purpose Applicazioni GPGPU Password recovery ElcomSoft Distributed Password Recovery http://www.elcomsoft.com/edpr.html A. Theodorou (Federico II) Le moderne GPU C42009 36 / 152
  • 122. La GPU in azione Applicazioni general purpose Applicazioni GPGPU Nurien tech demo Fisica dei capelli e degli abiti accelerata dalla GPU A. Theodorou (Federico II) Le moderne GPU C42009 37 / 152
  • 123. La GPU in azione Applicazioni general purpose Applicazioni GPGPU Froblins Demo L'IA degli oltre tremila agenti gestita dalla GPU e A. Theodorou (Federico II) Le moderne GPU C42009 38 / 152
  • 124. La GPU in azione Applicazioni general purpose Applicazioni GPGPU Ulteriori applicazioni 60 su 262 applicazioni dal sito CUDA Zone (Marzo 2009) A. Theodorou (Federico II) Le moderne GPU C42009 39 / 152
  • 125. La GPU in azione Applicazioni tradizionali 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 126. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 40 / 152
  • 127. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali La Game Industry Uno dei motori trainanti dell'economia statunitense con miliardi di dollari di fatturato annuale Nel 2008 ha superato il mercato mondiale dell'home video con oltre 32 miliardi di dollari Il settore dell'intrattenimento meno soggetto alla recente recessione e economica Causa principale della corsa agli armamenti nel settore dell'HW Uno dei principali campi applicativi della ricerca nella computer gra
  • 128. ca Porta ad una ricaduta tecnologica anche in altri settori (educativo, medico, industriale, militare) A. Theodorou (Federico II) Le moderne GPU C42009 41 / 152
  • 129. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali La Game Industry Uno dei motori trainanti dell'economia statunitense con miliardi di dollari di fatturato annuale Nel 2008 ha superato il mercato mondiale dell'home video con oltre 32 miliardi di dollari Il settore dell'intrattenimento meno soggetto alla recente recessione e economica Causa principale della corsa agli armamenti nel settore dell'HW Uno dei principali campi applicativi della ricerca nella computer gra
  • 130. ca Porta ad una ricaduta tecnologica anche in altri settori (educativo, medico, industriale, militare) A. Theodorou (Federico II) Le moderne GPU C42009 41 / 152
  • 131. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali La Game Industry Uno dei motori trainanti dell'economia statunitense con miliardi di dollari di fatturato annuale Nel 2008 ha superato il mercato mondiale dell'home video con oltre 32 miliardi di dollari Il settore dell'intrattenimento meno soggetto alla recente recessione e economica Causa principale della corsa agli armamenti nel settore dell'HW Uno dei principali campi applicativi della ricerca nella computer gra
  • 132. ca Porta ad una ricaduta tecnologica anche in altri settori (educativo, medico, industriale, militare) A. Theodorou (Federico II) Le moderne GPU C42009 41 / 152
  • 133. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali La Game Industry Uno dei motori trainanti dell'economia statunitense con miliardi di dollari di fatturato annuale Nel 2008 ha superato il mercato mondiale dell'home video con oltre 32 miliardi di dollari Il settore dell'intrattenimento meno soggetto alla recente recessione e economica Causa principale della corsa agli armamenti nel settore dell'HW Uno dei principali campi applicativi della ricerca nella computer gra
  • 134. ca Porta ad una ricaduta tecnologica anche in altri settori (educativo, medico, industriale, militare) A. Theodorou (Federico II) Le moderne GPU C42009 41 / 152
  • 135. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali La Game Industry Uno dei motori trainanti dell'economia statunitense con miliardi di dollari di fatturato annuale Nel 2008 ha superato il mercato mondiale dell'home video con oltre 32 miliardi di dollari Il settore dell'intrattenimento meno soggetto alla recente recessione e economica Causa principale della corsa agli armamenti nel settore dell'HW Uno dei principali campi applicativi della ricerca nella computer gra
  • 136. ca Porta ad una ricaduta tecnologica anche in altri settori (educativo, medico, industriale, militare) A. Theodorou (Federico II) Le moderne GPU C42009 41 / 152
  • 137. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali La Game Industry Uno dei motori trainanti dell'economia statunitense con miliardi di dollari di fatturato annuale Nel 2008 ha superato il mercato mondiale dell'home video con oltre 32 miliardi di dollari Il settore dell'intrattenimento meno soggetto alla recente recessione e economica Causa principale della corsa agli armamenti nel settore dell'HW Uno dei principali campi applicativi della ricerca nella computer gra
  • 138. ca Porta ad una ricaduta tecnologica anche in altri settori (educativo, medico, industriale, militare) A. Theodorou (Federico II) Le moderne GPU C42009 41 / 152
  • 139. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali Human Head (14/7/2007) Demo real-time della Nvidia per la GeForce 8800 Ultra A. Theodorou (Federico II) Le moderne GPU C42009 42 / 152
  • 140. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali CryEngine 2 vs Unreal Engine 3 (1/2) A. Theodorou (Federico II) Le moderne GPU C42009 43 / 152
  • 141. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali CryEngine 2 vs Unreal Engine 3 (2/2) A. Theodorou (Federico II) Le moderne GPU C42009 44 / 152
  • 142. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali Crysis vs Real-life A. Theodorou (Federico II) Le moderne GPU C42009 45 / 152
  • 143. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali Final Night Round 3 (20/2/2006) A. Theodorou (Federico II) Le moderne GPU C42009 46 / 152
  • 144. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali Gears of War (Unreal Engine 3, 9/11/2006) A. Theodorou (Federico II) Le moderne GPU C42009 47 / 152
  • 145. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali Crysis (CryEngine 2, 13/11/2007) A. Theodorou (Federico II) Le moderne GPU C42009 48 / 152
  • 146. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali Assassin's Creed (Scimitar Engine, 14/11/2007) A. Theodorou (Federico II) Le moderne GPU C42009 49 / 152
  • 147. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali Mass Eect (Unreal Engine 3, 20/11/2007) A. Theodorou (Federico II) Le moderne GPU C42009 50 / 152
  • 148. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali 3dMark Vantage, 28/4/2008 A. Theodorou (Federico II) Le moderne GPU C42009 51 / 152
  • 149. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali Dead Space (Unreal Engine 3, 14/10/2008) A. Theodorou (Federico II) Le moderne GPU C42009 52 / 152
  • 150. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali Far Cry 2 (Dunia Engine, 21/10/2008) A. Theodorou (Federico II) Le moderne GPU C42009 53 / 152
  • 151. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali Fallout 3 (Gamebryo Engine, 28/10/2008) A. Theodorou (Federico II) Le moderne GPU C42009 54 / 152
  • 152. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali Mirror's Edge (Unreal Engine 3, 12/11/2008) A. Theodorou (Federico II) Le moderne GPU C42009 55 / 152
  • 153. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali Prince of Persia (Anvil Engine, 2/12/2008) A. Theodorou (Federico II) Le moderne GPU C42009 56 / 152
  • 154. La GPU in azione Applicazioni tradizionali Applicazioni tradizionali Killzone 2, 25/2/2009 A. Theodorou (Federico II) Le moderne GPU C42009 57 / 152
  • 155. Cenni sulla programmazione Supporto OpenGL 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 156. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 58 / 152
  • 157. Cenni sulla programmazione Supporto OpenGL Supporto OpenGL Sommario Creazione shader object Creazione program object Utilizzo del program object Codice di esempio 1 Liberazione delle risorse allocate Variabili uniformi Cenni sul resto Codice di esempio 2 Nota: Le funzioni che verranno esaminate fanno parte del core di OpenGL 2.0 e successivi. A. Theodorou (Federico II) Le moderne GPU C42009 59 / 152
  • 158. Cenni sulla programmazione Supporto OpenGL Supporto OpenGL Creazione shader object GLuint glCreateShader(GLenum shaderType ) Ritorna l'handle per un nuovo shader Il tipo pu essere GL VERTEX SHADER o GL FRAGMENT SHADER. o void glShaderSource(GLuint shader, GLsizei count, const GLchar **string, const GLint *length ) Imposta il sorgente per lo shader all'array di stringhe speci
  • 159. cato. void glCompileShader(GLuint shader ) Compila il sorgente dello shader speci
  • 160. cato. Nota: A partire dalle OpenGL 3.0, glCreateShader() accetta anche il tipo GL GEOMETRY SHADER ARB. A. Theodorou (Federico II) Le moderne GPU C42009 60 / 152
  • 161. Cenni sulla programmazione Supporto OpenGL Supporto OpenGL Creazione program object GLuint glCreateProgram(void) Ritorna l'handle per un nuovo programma. void glAttachShader(GLuint program, GLuint shader ) Associa lo shader al programma speci
  • 162. cato. void glLinkProgram(GLuint program ); Eettua la fase di linking per il programma. A. Theodorou (Federico II) Le moderne GPU C42009 61 / 152
  • 163. Cenni sulla programmazione Supporto OpenGL Supporto OpenGL Utilizzo del program object void glUseProgram(GLuint program ) Speci
  • 164. ca il programma da usare. Da quel momento in poi, per qualsiasi operazione, non verr pi a u utilizzata la pipeline
  • 165. ssa. Passando 0 come parametro si ritorna alla pipeline tradizionale. A. Theodorou (Federico II) Le moderne GPU C42009 62 / 152
  • 166. Cenni sulla programmazione Supporto OpenGL Supporto OpenGL Codice di esempio 1 § GLuint v , f , p ; char £ vs , £ f s ; p = glCreateProgram ( ) ; v = g l C r e a t e S h a d e r (GL VERTEX SHADER ) ; g l S h a d e r S o u r c e ( v , 1 , vs , NULL ) ; glCompileShader ( v ) ; glAttachShader (p , v ) ; f = g l C r e a t e S h a d e r (GL FRAGMENT SHADER ) ; g l S h a d e r S o u r c e ( f , 1 , f s , NULL ) ; glCompileShader ( f ) ; glAttachShader (p , f ) ; glLinkProgram (p ) ; glUseProgram ( p ) ; ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 63 / 152
  • 167. Cenni sulla programmazione Supporto OpenGL Supporto OpenGL Liberazione delle risorse allocate void glDeleteShader(GLuint shader ) Comando opposto a quello di creazione, libera la memoria ed il riferimento associati all'handle passato. void glDeleteProgram(GLuint program ) Come sopra, ma relativo ai programmi. void glDetachShader(GLuint program, GLuint shader ) Cancella l'associazione tra shader e programma. A. Theodorou (Federico II) Le moderne GPU C42009 64 / 152
  • 168. Cenni sulla programmazione Supporto OpenGL Supporto OpenGL Variabili uniformi OpenGL permette il passaggio di dati agli shader GLint glGetUniformLocation(GLuint program, const GLchar *name ) Ritorna il riferimento alla posizione di una certa variabile all'interno del programma, che dev'essere correntemente in uso. void glUniformf1|2|3|4gff|ig(GLint location, TYPE v ) Imposta il valore della variabile alla locazione speci
  • 169. cata a quello passato dalla funzione. void glUniformf1|2|3|4gff|igv(GLint location, GLuint count, const TYPE v ) Come sopra, ma questa volta permette di speci
  • 170. care un array di valori. void glUniformMatrixf2|3|4gfv(GLint location, GLuint count, GLboolean transpose, const GLfloat *v ) Passa allo shader una matrice quadrata della dimensione speci
  • 171. cata, ordinata per colonne o per righe a seconda del parametro booleano. A. Theodorou (Federico II) Le moderne GPU C42009 65 / 152
  • 172. Cenni sulla programmazione Supporto OpenGL Supporto OpenGL Cenni sul resto glGetUniform() e glGetActiveUniform() Ritorna il valore di una o di tutte le variabili uniformi attive nel programma speci
  • 173. cato. Funzioni di query Permettono di ricavare lo stato degli oggetti creati, stampare log diagnostici, conoscere gli oggetti correntemente attivi. Funzioni relative agli attributi per vertice Permettono di speci
  • 174. care attributi da passare agli shader, all'interno di una coppia glBegin()/glEnd(), diversi per ogni vertice. Multiple Render Targets I fragment shader supportano la scrittura contemporanea su pi frame u buer. Ausilio per lo svilupo glValidateProgram() controlla se l'eseguibile del programma speci
  • 175. cato, dato lo stato OpenGL corrente, pu funzionare. o A. Theodorou (Federico II) Le moderne GPU C42009 66 / 152
  • 176. Cenni sulla programmazione Supporto OpenGL Supporto OpenGL Codice di esempio 2 § GLuint p ; GLint l o c 1 , l o c 2 ; glUseProgram ( p ) ; loc1 = glGetUniformLocation (p , Variable1 ) ; glUniform1f ( loc1 , 1.0 f ) ; loc2 = glGetUniformLocation (p , Variable2 ) ; glUniform1i ( loc2 , 1 ) ; ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 67 / 152
  • 177. Cenni sulla programmazione GL Shading Language 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 178. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 68 / 152
  • 179. Cenni sulla programmazione GL Shading Language GL Shading Language Sommario Tipi di dato Inizializzatori e costruttori Quali
  • 180. catori Flusso di controllo Swizzling Operazioni component-wise Funzioni built-in Variabili built-in Codice di esempio A. Theodorou (Federico II) Le moderne GPU C42009 69 / 152
  • 181. Cenni sulla programmazione GL Shading Language GL Shading Language Tipi di dato Scalari: float, int, bool Vettori: fe*|i|bgvecf2|3|4g, oating-point, interi o booleani Matrici: matf2|3|4g, matrici quadrate oating-point Sampler: samplerf1|2|3gDfe*|Cube|Shadowg, permettono di eettuare il fetch da una texture Supporto a strutture ed array A. Theodorou (Federico II) Le moderne GPU C42009 70 / 152
  • 182. Cenni sulla programmazione GL Shading Language GL Shading Language Inizializzatori e costruttori § float a , b = 3.0 , c ; const i n t S i z e = 4 ; // i n i t i a l i z e r i s r e q u i r e d vec3 c o l o r = vec3 ( 0 . 2 , 0 . 5 , 0 . 8 ) ; vec4 c o l o r 4 = vec4 ( c o l o r , 1 . 0 ) mat2 m= mat2 ( 1 . 0 , 2.0 , 3.0 , 4.0); vec3 v = vec3 ( 0 . 6 ) ; ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 71 / 152
  • 183. Cenni sulla programmazione GL Shading Language GL Shading Language Quali
  • 184. catori attribute Informazioni destinate al vertex shader che variano spesso nell'applicazione, anche tra la de
  • 185. nizione di un vertice e l'altro. uniform Informazioni che variano meno spesso, destinate al vertex o al fragment shader. varying Informazioni passate per interpolazione dal vertex al fragment shader. const Per variabili costanti dichiarate al momento della compilazione, come in C. Nota: A partire da GLSL 1.30 si usano le parole chiave in ed out al posto di attribute e varying. A. Theodorou (Federico II) Le moderne GPU C42009 72 / 152
  • 186. Cenni sulla programmazione GL Shading Language GL Shading Language Flusso di controllo Cicli for, while e do-while Presenza delle keyword break e continue Selezioni tramite if, if-else, ed operatore ternario :? Presenza della keyword discard, per abortire l'esecuzione del fragment shader per un certo frammento Assenza del supporto per goto e switch Nota: Il costrutto switch/case/default presente a partire da GLSL 1.30. e A. Theodorou (Federico II) Le moderne GPU C42009 73 / 152
  • 187. Cenni sulla programmazione GL Shading Language GL Shading Language Swizzling § vec4 v4 ; v4 . rgba ; // is a v e c 4 and t h e same a s j u s t u s i n g v4 v4 . rgb ; // is a vec3 v4 . b ; // is a float v4 . xy ; // is a vec2 vec4 pos = vec4 ( 1 . 0 , 2 . 0 , 3 . 0 , 4 . 0 ) ; vec4 s w i z = pos . wzyx ; // s w i z = ( 4 . 0 , 3 . 0 , 2 . 0 , 1 . 0 ) vec4 dup = pos . xxyy ; // dup = ( 1 . 0 , 1 . 0 , 2 . 0 , 2 . 0 ) vec4 pos = vec4 ( 1 . 0 , 2 . 0 , 3 . 0 , 4 . 0 ) ; pos . xw = vec2 ( 5 . 0 , 6 . 0 ) ; // pos = ( 5 . 0 , 2 . 0 , 3 . 0 , 6 . 0 ) pos . wx = vec2 ( 7 . 0 , 8 . 0 ) ; // pos = ( 8 . 0 , 2 . 0 , 3 . 0 , 7 . 0 ) ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 74 / 152
  • 188. Cenni sulla programmazione GL Shading Language GL Shading Language Operazioni component-wise § vec3 v , u; float f ; v = u + f; // v . x = u . x + f ; // [ . . . ] vec3 v , u , w ; w = v + u; // w . x = v . x + u . x ; // [ . . . ] ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 75 / 152
  • 189. Cenni sulla programmazione GL Shading Language GL Shading Language Funzioni built-in (1/2) Supportano l'overloading degli argomenti Trigonometriche: radians(), degree(), sin(), cos(), tan(), ... Esponenziali: pow(), exp(), log(), sqrt(), inversesqrt(), ... Comuni: abs(), sign(), floor(), ceil(), min(), max(), clamp(), mix(), ... Geometriche: length(), distance(), dot(), cross(), normalize(), reflect(), refract(), ... A. Theodorou (Federico II) Le moderne GPU C42009 76 / 152
  • 190. Cenni sulla programmazione GL Shading Language GL Shading Language Funzioni built-in (2/2) Supportano l'overloading degli argomenti Matriciali: matrixCompMult() Relazioni tra vettori: lessThan(), greatherThan(), equal(), notEqual(), ... Accesso alle texture: texturef1|2|3gD, texturef1|2|3gDProj, texturef1|2|3gDLod, texturef1|2|3gDCube, shadowf1|2|3gD, ... Solo frammenti: dFdx(), dFdy(), fwidth() Rumore: noisef1|2|3|4g() A. Theodorou (Federico II) Le moderne GPU C42009 77 / 152
  • 191. Cenni sulla programmazione GL Shading Language GL Shading Language Variabili built-in Input del vertex shader: gl Color, gl Normal, gl Vertex, gl MultiTexCoordf0..Ng, ... Output del vertex shader: gl Position, ... Input del fragment shader: gl FragCoord, gl FrontFacing Output del fragment shader: gl FragColor, gl FragData[], gl FragDepth Variabili uniformi comuni: gl ModelViewMatrix, gl ProjectionMatrix, gl ClipPlane, gl Point, gl FrontMaterial, gl LightSource[], gl Fog, ... A. Theodorou (Federico II) Le moderne GPU C42009 78 / 152
  • 192. Cenni sulla programmazione GL Shading Language GL Shading Language Codice di esempio § Listing 1: Vertex shader void main ( v o i d ) f gl Position = ftransform (); // g l P o s i t i o n = g l P r o j e c t i o n M a t r i x £ gl ModelViewMatrix £ gl Ver tex ; // g l P o s i t i o n = g l M o d e l V i e w P r o j e c t i o n M a t r i x £ gl Vertex ; g ¦ ¥ § Listing 2: Fragment shader void main ( v o i d ) f gl FragColor = gl Color ; g ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 79 / 152
  • 193. Sorgenti di esempi Gouraud e Phong shading 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 194. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 80 / 152
  • 195. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Blinn-Phong re ection model A. Theodorou (Federico II) Le moderne GPU C42009 81 / 152
  • 196. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Gouraud shading Vertex shader Trasforma il vertice Calcola l'attenuazione Calcola i tre contributi del modello di Phong Fragment shader Riceve l'intensit del vertice interpolata a Assegna il colore del frammento in base a questa Nota: Il prossimo esempio emula una point light come da pipeline
  • 197. ssa A. Theodorou (Federico II) Le moderne GPU C42009 82 / 152
  • 198. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Vertex shader (1/3) § v a r y i n g vec4 intensity ; void main ( v o i d ) f vec4 a m b i e n t G l o b a l , ambient , d i f f u s e ; vec3 ecPos , normal , l i g h t D i r , h a l f V e c t o r , aux ; f l o a t NdotL , NdotHV , d i s t , a t t ; ecPos = vec3 ( g l M o d e l V i e w M a t r i x £ g l V e r t e x ) ; normal = n o r m a l i z e ( g l N o r m a l M a t r i x £ g l N o r m a l ) ; aux = g l L i g h t S o u r c e [ 0 ] . p o s i t i o n . xyz   ecPos ; d i s t = l e n g t h ( aux ) ; l i g h t D i r = n o r m a l i z e ( aux ) ; ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 83 / 152
  • 199. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Vertex shader (2/3) § att = 1.0 / ( gl LightSource [ 0 ] . constantAttenuation + gl LightSource [ 0 ] . linearAttenuation £ dist + gl LightSource [ 0 ] . quadraticAttenuation £ dist £ dist ) a m b i e n t G l o b a l = g l L i g h t M o d e l . ambient £ g l F r o n t M a t e r i a l . ambient ; ambient = g l L i g h t S o u r c e [ 0 ] . ambient £ g l F r o n t M a t e r i a l . ambient ; i n t e n s i t y = a m b i e n t G l o b a l + ambient £ att ; diffuse = gl LightSource [ 0 ] . diffuse £ gl FrontMaterial . diffuse ; ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 84 / 152
  • 200. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Vertex shader (3/3) § NdotL = max ( dot ( normal , l i g h t D i r ) , 0 . 0 ) ; if ( NdotL 0 . 0 ) f h a l f V e c t o r = n o r m a l i z e ( l i g h t D i r + n o r m a l i z e ( ecPos ) ) ; i n t e n s i t y += a t t £ ( d i f f u s e £ NdotL ) ; NdotHV = max ( dot ( normal , h a l f V e c t o r ) , 0 . 0 ) ; i n t e n s i t y += a t t £ g l L i g h t S o u r c e [ 0 ] . s p e c u l a r £ gl FrontMaterial . specular £ pow ( NdotHV , g l F r o n t M a t e r i a l . s h i n i n e s s ) ; g gl Position = ftransform (); gl TexCoord [ 0 ] = gl TextureMatrix [ 0 ] £ gl MultiTexCoord0 ; g ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 85 / 152
  • 201. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Fragment shader § v a r y i n g vec4 i n t e n s i t y ; u n i f o r m sampler2D Tex0 ; void main ( v o i d ) f vec4 colorMap = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) ; gl FragColor = intensity £ colorMap ; g ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 86 / 152
  • 202. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Screenshot (a) GLSL parallax (b) GLSL multilight Per-pixel lighting A. Theodorou (Federico II) Le moderne GPU C42009 87 / 152
  • 203. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Phong shading Vertex shader Trasforma il vertice Calcola il valore del contributo d'ambiente e quello diuso di partenza Fragment shader Riceve la normale e l'eye vector interpolati Calcola l'attenuazione Calcola i tre contributi
  • 204. nali del modello di Phong Calcola il valore di intensit luminosa del frammento a Assegna il colore del frammento in base a questo A. Theodorou (Federico II) Le moderne GPU C42009 88 / 152
  • 205. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Vertex shader (1/2) § v a r y i n g vec4 a m b i e n t G l o b a l , ambient , d i f f u s e ; v a r y i n g vec3 normal , ecPos ; void main ( v o i d ) f normal = g l N o r m a l M a t r i x £ g l N o r m a l ; ecPos = vec3 ( g l M o d e l V i e w M a t r i x £ g l V e r t e x ) ; a m b i e n t G l o b a l = g l L i g h t M o d e l . ambient £ g l F r o n t M a t e r i a l . ambient ; ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 89 / 152
  • 206. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Vertex shader (2/2) § a m b i e n t G l o b a l = g l L i g h t M o d e l . ambient £ g l F r o n t M a t e r i a l . ambient ; ambient = g l L i g h t S o u r c e [ 0 ] . ambient £ g l F r o n t M a t e r i a l . ambient ; diffuse = gl LightSource [ 0 ] . diffuse £ gl FrontMaterial . diffuse ; gl Position = ftransform (); gl TexCoord [ 0 ] = gl TextureMatrix [ 0 ] £ gl MultiTexCoord0 ; g ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 90 / 152
  • 207. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Fragment shader (1/3) § v a r y i n g vec3 normal , ecPos ; v a r y i n g vec4 a m b i e n t G l o b a l , ambient , d i f f u s e ; u n i f o r m sampler2D Tex0 ; void main ( v o i d ) f vec3 n , aux , lightDir , refVec ; f l o a t NdotL , RdotE ; float dist , att ; vec4 colorMap = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) ; ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 91 / 152
  • 208. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Fragment shader (2/3) § n = n o r m a l i z e ( normal ) ; aux = g l L i g h t S o u r c e [ 0 ] . p o s i t i o n . xyz   ecPos ; d i s t = l e n g t h ( aux ) ; l i g h t D i r = n o r m a l i z e ( aux ) ; att = 1.0 / ( gl LightSource [ 0 ] . constantAttenuation + gl LightSource [ 0 ] . linearAttenuation £ dist + gl LightSource [ 0 ] . quadraticAttenuation £ dist £ dist ) g l F r a g C o l o r = a m b i e n t G l o b a l + ambient £ att ; NdotL = dot ( n , l i g h t D i r ) ; ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 92 / 152
  • 209. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Fragment shader (3/3) § if ( NdotL 0.0) f g l F r a g C o l o r += a t t £ ( d i f f u s e £ NdotL ) ; r e f V e c = r e f l e c t (  l i g h t D i r , n ) ; RdotE = dot ( r e f V e c , n o r m a l i z e (  ecPos ) ) ; g l F r a g C o l o r += a t t £ g l L i g h t S o u r c e [ 0 ] . s p e c u l a r £ gl FrontMaterial . specular £ pow ( RdotE , g l F r o n t M a t e r i a l . s h i n i n e s s ) ; g gl FragColor £= colorMap ; g ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 93 / 152
  • 210. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Screenshot (c) GLSL parallax (d) GLSL multilight Per-vertex lighting A. Theodorou (Federico II) Le moderne GPU C42009 94 / 152
  • 211. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Specular mapping Come per il Phong shading, ma in pi: u Fragment shader Esegue il fetch della glossmap Modula il costributo speculare secondo la texture precedente A. Theodorou (Federico II) Le moderne GPU C42009 95 / 152
  • 212. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Fragment shader § u n i f o r m sampler2D Tex1 ; [...] vec4 glossMap = t e x t u r e 2 D ( Tex1 , g l T e x C o o r d [ 0 ] . s t ) ; [...] i f ( NdotL 0 . 0 ) f [...] vec4 s p e c = a t t £ [ . . . ] £ pow ( . . . ) ; s p e c £= glossMap ; g l F r a g C o l o r += s p e c ; g [...] ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 96 / 152
  • 213. Sorgenti di esempi Gouraud e Phong shading Gouraud e Phong shading Screenshot A. Theodorou (Federico II) Le moderne GPU C42009 97 / 152
  • 214. Sorgenti di esempi Normal e parallax mapping 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 215. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 98 / 152
  • 216. Sorgenti di esempi Normal e parallax mapping Normal e parallax mapping Tangent space A. Theodorou (Federico II) Le moderne GPU C42009 99 / 152
  • 217. Sorgenti di esempi Normal e parallax mapping Normal e parallax mapping Normal mapping Come per il Phong shading, ma in pi: u Vertex shader Riceve il vettore della tangente dall'applicazione Calcola il vettore binormale e la matrice TBN Trasforma la normale, il light e l'eye vector secondo la matrice TBN Fragment shader Esegue il fetch della normalmap Riporta il valore letto dall'intervallo [0..1] all'intervallo [-1..1] Assegna tale valore alla variabile stabilita per la normale A. Theodorou (Federico II) Le moderne GPU C42009 100 / 152
  • 218. Sorgenti di esempi Normal e parallax mapping Normal e parallax mapping Vertex shader § a t t r i b u t e vec3 objTan ; [...] vec3 t a n g e n t = n o r m a l i z e ( g l N o r m a l M a t r i x £ objTan ) ; vec3 b i n o r m a l = c r o s s ( normal , t a n g e n t ) ; mat3 t b n M a t r i x = mat3 ( t a n g e n t . x , b i n o r m a l . x , normal . x , t a n g e n t . y , b i n o r m a l . y , normal . y , t a n g e n t . z , b i n o r m a l . z , normal . z ) ; [...] l i g h t D i r = tbnMatrix £ l i g h t D i r ; ecPos = t b n M a t r i x £ ecPos ; [...] ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 101 / 152
  • 219. Sorgenti di esempi Normal e parallax mapping Normal e parallax mapping Fragment shader § u n i f o r m sampler2D Tex2 ; [...] normalMap = t e x t u r e 2 D ( Tex2 , g l T e x C o o r d [ 0 ] . s t ) ; vec4 normal = n o r m a l i z e ( 2 . 0 £ normalMap . rgb   1 . 0 ) ; [...] ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 102 / 152
  • 220. Sorgenti di esempi Normal e parallax mapping Normal e parallax mapping Screenshot A. Theodorou (Federico II) Le moderne GPU C42009 103 / 152
  • 221. Sorgenti di esempi Normal e parallax mapping Normal e parallax mapping Teoria sul parallax mapping Si correggono le coordinate del texture fetch per riferirsi al punto B Ma c' bisogno di una nuova informazione: l'altezza del pixel e A. Theodorou (Federico II) Le moderne GPU C42009 104 / 152
  • 222. Sorgenti di esempi Normal e parallax mapping Normal e parallax mapping Parallax mapping Come per il normal mapping, ma in pi: u Fragment shader Esegue il fetch della heightmap con le texcoord reali del pixel Scala e trasla l'altezza secondo coecienti empirici Sposta le nuove texcoord verso l'osservatore secondo il valore precedente A. Theodorou (Federico II) Le moderne GPU C42009 105 / 152
  • 223. Sorgenti di esempi Normal e parallax mapping Normal e parallax mapping Fragment shader § [...] vec2 TexCoord ; float height ; float scale = 0.04; float bias = 0.02; h e i g h t = s c a l e £ t e x t u r e 2 D ( Tex2 , g l T e x C o o r d [ 0 ] . s t ) . a   bias ; TexCoord = g l T e x C o o r d [ 0 ] . s t + h e i g h t £ n o r m a l i z e ( ecPos ) . xy ; [...] ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 106 / 152
  • 224. Sorgenti di esempi Normal e parallax mapping Normal e parallax mapping Screenshot A. Theodorou (Federico II) Le moderne GPU C42009 107 / 152
  • 225. Sorgenti di esempi Toon shading 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 226. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 108 / 152
  • 227. Sorgenti di esempi Toon shading Toon shading Implementazione Requisiti: Frame Buer Object (per il post-processing in screen space) Multiple Render Targets (per memorizzare le normali al primo passo) 1 passo Si discretizza l'intensit luminosa in pochi valori ammessi a Si memorizzano in una texture i vettori delle normali in eye-space 2 passo Si applica l'operatore di Sobel ad una versione a scala di grigi della texture precedente Si evidenziano i contorni secondo un valore di soglia e spessore A. Theodorou (Federico II) Le moderne GPU C42009 109 / 152
  • 228. Sorgenti di esempi Toon shading Toon shading 1 passo, fragment shader (1/2) § v a r y i n g vec3 normal , ecPos ; u n i f o r m sampler2D Tex0 ; void main ( v o i d ) f vec3 n , l i g h t D i r ; f l o a t NdotL ; vec4 colorMap = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) ; n = n o r m a l i z e ( normal ) ; l i g h t D i r = n o r m a l i z e ( g l L i g h t S o u r c e [ 0 ] . p o s i t i o n . xyz   ecPos ) ; NdotL = dot ( n , l i g h t D i r ) ; ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 110 / 152
  • 229. Sorgenti di esempi Toon shading Toon shading 1 passo, fragment shader (2/2) § g l F r a g D a t a [ 0 ] = vec4 ( 0 . 0 ) ; if ( NdotL 0.95) g l F r a g D a t a [ 0 ] = vec4 ( 1 . 0 ) ; else if ( NdotL 0.5) g l F r a g D a t a [ 0 ] = vec4 ( 0 . 7 5 ) ; else if ( NdotL 0.25) g l F r a g D a t a [ 0 ] = vec4 ( 0 . 5 ) ; else if ( NdotL 0.0) g l F r a g D a t a [ 0 ] = vec4 ( 0 . 2 5 ) ; g l F r a g D a t a [ 0 ] £= colorMap ; g l F r a g D a t a [ 1 ] = vec4 ( n , 1 . 0 ) ; g ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 111 / 152
  • 230. Sorgenti di esempi Toon shading Toon shading 2 passo, fragment shader (1/3) § uniform i n t Width , H e i g h t ; uniform float Thickness ; uniform float Threshold ; uniform sampler2D Tex0 , Tex1 ; void main ( v o i d ) f vec2 ox = vec2 ( T h i c k n e s s / f l o a t ( Width ) , 0 . 0 ) ; vec2 oy = vec2 ( 0 . 0 , T h i c k n e s s / f l o a t ( H e i g h t ) ) ; vec2 uv = g l T e x C o o r d [ 0 ] . s t ; mat3 gray ; ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 112 / 152
  • 231. Sorgenti di esempi Toon shading Toon shading 2 passo, fragment shader (2/3) § int i , j ; vec2 PP = uv   oy ; for ( i = 0; i 3 ; i ++) f g r a y [ i ] [ 0 ] = dot ( t e x t u r e 2 D ( Tex1 , PP   ox ) . rgb , vec3 ( 1 . 0 g r a y [ i ] [ 1 ] = dot ( t e x t u r e 2 D ( Tex1 , PP ) . rgb , vec3 ( 1 . 0 / 3 . 0 ) g r a y [ i ] [ 2 ] = dot ( t e x t u r e 2 D ( Tex1 , PP + ox ) . rgb , vec3 ( 1 . 0 PP += oy ; g mat3 K; K [ 0 ] [ 0 ] =   1.0; K [ 0 ] [ 1 ] =   2.0; K [ 0 ] [ 2 ] =   1.0; K[ 1][ 0] = 0.0; K[1 ][ 1] = 0.0; K[1 ][2 ] = 0.0; K[ 2][ 0] = 1.0; K[2 ][ 1] = 2.0; K[2 ][2 ] = 1.0; ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 113 / 152
  • 232. Sorgenti di esempi Toon shading Toon shading 2 passo, fragment shader (3/3) § f l o at sx = 0 . 0 ; f l o at sy = 0 . 0 ; for ( i = 0; i 3 ; i ++) f for ( j = 0; j 3 ; j ++) f s x += g r a y [ i ] [ j ] £ K[ i ] [ j ] ; s y += g r a y [ i ] [ j ] £ K[ j ] [ i ] ; g g float d i s t = s q r t ( sx £ sx + sy £ sy ) ; if ( dist Threshold ) g l F r a g C o l o r = vec4 ( 0 . 0 ) ; else g l F r a g C o l o r = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) ; g ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 114 / 152
  • 233. Sorgenti di esempi Toon shading Toon shading Screenshot (a) Untextured (b) Textured (c) Grey normal (d) Edges A. Theodorou (Federico II) Le moderne GPU C42009 115 / 152
  • 234. Sorgenti di esempi Toon shading Toon shading Screenshot (e) Final A. Theodorou (Federico II) Le moderne GPU C42009 116 / 152
  • 235. Sorgenti di esempi Depth of
  • 236. eld 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 237. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 117 / 152
  • 238. Sorgenti di esempi Depth of
  • 240. eld Teoria x = s =d 3 x 0 = a(s =d ) 0 =a 00 x =a = (s   f )=f 3 x 00 = a(s   )=f = a(s =f   1) f s 1 1 jx   x j = a   1   a = a s     1 00 0 f s d f d A. Theodorou (Federico II) Le moderne GPU C42009 118 / 152
  • 241. Sorgenti di esempi Depth of
  • 243. eld Implementazione Si compone di 5 passi ed utilizza 4 Frame Buer Object 1 passo: rendering della scena in un FBO e calcolo della quantit di a blur 2 passo: downsampling in un altro FBO avente 1/4 delle dimensioni del precedente 3 passo: applicazione del
  • 244. ltro gaussiano lungo l'asse X 4 passo: applicazione del
  • 245. ltro gaussiano lungo l'asse Y 5 passo: interpolazione lineare tra la scena originale e quella ridotta e sfumata A. Theodorou (Federico II) Le moderne GPU C42009 119 / 152
  • 246. Sorgenti di esempi Depth of
  • 248. eld 1 passo, vertex shader § uniform f l o a t focalDistance , focalRange ; varying f l o a t Blur ; void main ( v o i d ) f vec4 PosWV = g l M o d e l V i e w M a t r i x £ gl Vertex ; B l u r = clamp ( abs( PosWV . z   f o c a l D i s t a n c e ) / focalRange , 0.0 , 1 . 0 ) ; gl Position = ftransform (); gl TexCoord [ 0 ] = gl TextureMatrix [ 0 ] £ gl MultiTexCoord0 ; g ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 120 / 152
  • 249. Sorgenti di esempi Depth of
  • 251. eld 1 passo, fragment shader § varying f l o a t Blur ; u n i f o r m sampler2D Tex0 ; void main ( v o i d ) f g l F r a g D a t a [ 0 ] = vec4 ( t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) . rgb , B l u r ) ; g ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 121 / 152
  • 252. Sorgenti di esempi Depth of
  • 254. eld 5 passo, fragment shader § u n i f o r m sampler2D Tex0 , Tex1 ; void main ( v o i d ) f vec4 F u l l r e s = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) ; vec4 B l u r r e d = t e x t u r e 2 D ( Tex1 , g l T e x C o o r d [ 1 ] . s t ) ; gl FragColor = Fullres + Fullres . a £ ( Blurred   Fullres ); g ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 122 / 152
  • 255. Sorgenti di esempi Depth of
  • 256. eld Depth of Field Screenshot (a) Depth of Field (b) Quantit di blur a A. Theodorou (Federico II) Le moderne GPU C42009 123 / 152
  • 257. Sorgenti di esempi Depth of
  • 258. eld Depth of Field Screenshot (d) Normal + Parallax + DoF A. Theodorou (Federico II) Le moderne GPU C42009 124 / 152
  • 259. Sorgenti di esempi Deferred shading 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 260. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 125 / 152
  • 261. Sorgenti di esempi Deferred shading Deferred shading Confronto (1/3) Single-pass, multi-light Per ogni oggetto: renderizzo l'oggetto ed applico l'illuminazione in un solo shader Spreco di shading nel caso di super
  • 262. ci invisibili Mal si integra con le tecniche di shadowing Poche luci gestibili contemporaneamente C' bisogno di uno shader diverso per ogni combinazione e A. Theodorou (Federico II) Le moderne GPU C42009 126 / 152
  • 263. Sorgenti di esempi Deferred shading Deferred shading Confronto (2/3) Multi-pass, multi-light Per ogni luce: Per ogni oggetto in uenzato: aggiungo al framebuer il contributo della luce sull'oggetto Spreco di shading nel caso di super
  • 264. ci invisibili Le chiamate alla funzioni di disegno possono essere anche N (luci ) ¢ N (oggetti ) Molto lavoro ripetuto (trasformazione dei vertici, ...) A. Theodorou (Federico II) Le moderne GPU C42009 127 / 152
  • 265. Sorgenti di esempi Deferred shading Deferred shading Confronto (3/3) Deferred shading Per ogni oggetto: memorizzo gli attributi che servono a calcolare l'illuminazione nel G-buer Per ogni luce: aggiungo al framebuer il contributo della luce tramite il G-buer Sempli
  • 266. ca la gestione dell'illuminazione (un solo shader per memorizzare gli attributi) Si integra bene con le tecniche di shadowing Le chiamate alle funzioni di disegno sono al pi N (luci ) + N (oggetti ) u L'illuminazione diventa un lavoro di post-processing in screen space Stesso lavoro per calcolare l'illuminazione di una luce grande o di tante piccole A. Theodorou (Federico II) Le moderne GPU C42009 128 / 152
  • 267. Sorgenti di esempi Deferred shading Deferred shading Implementazione Requisiti: Texture oating point (per la posizione) Multiple Render Targets (per scrivere tutti gli attributi contemporaneamente) Floating-point blending (per il compositing) Passi: Si ricavano gli attributi per ogni vertice Si interpolano per frammento e si scrivono nel G-buer Si utilizza il G-buer per l'illuminazione A. Theodorou (Federico II) Le moderne GPU C42009 129 / 152
  • 268. Sorgenti di esempi Deferred shading Deferred shading §due fragment shader I v a r y i n g vec3 p o s i t i o n , normal ; u n i f o r m sampler2D Tex0 ; void main ( v o i d ) f g l F r a g D a t a [ 0 ] = vec4 ( p o s i t i o n . xyz , 1 . 0 ) ; g l F r a g D a t a [ 1 ] = vec4 ( n o r m a l i z e ( normal . xyz ) , 0 . 0 ) ; g l F r a g D a t a [ 2 ] = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) ; g ¦ ¥ § u n i f o r m sampler2D Tex0 , Tex1 , Tex2 ; [...] vec3 ecPos = t e x t u r e 2 D ( Tex0 , g l T e x C o o r d [ 0 ] . s t ) . xyz ; vec3 normal = t e x t u r e 2 D ( Tex1 , g l T e x C o o r d [ 1 ] . s t ) . xyz ; vec4 colorMap = t e x t u r e 2 D ( Tex2 , g l T e x C o o r d [ 2 ] . s t ) ; [...] ¦ ¥ A. Theodorou (Federico II) Le moderne GPU C42009 130 / 152
  • 269. Sorgenti di esempi Deferred shading Deferred shading Screenshot A. Theodorou (Federico II) Le moderne GPU C42009 131 / 152
  • 270. Sorgenti di esempi High Dynamic Range Imaging 1 Introduzione Primo approccio Panoramica storica 2 La GPU in azione Potenza elaborativa Applicazioni general purpose Applicazioni tradizionali 3 Cenni sulla programmazione Supporto OpenGL GL Shading Language 4 Sorgenti di esempi Gouraud e Phong shading Normal e parallax mapping Toon shading Depth of
  • 271. eld Deferred shading High Dynamic Range Imaging A. Theodorou (Federico II) Le moderne GPU C42009 132 / 152
  • 272. Sorgenti di esempi High Dynamic Range Imaging HDRI Teoria Immagini dal rapporto di contrasto molto elevato Consente un'impostazione accurata dei valori di esposizione Si presta facilmente all'utilizzo con algoritmi di adattamento temporale dell'esposizione Permette di implementare un eetto di bloom (o glow) realistico Per la visualizzazione a schermo fondamentale il tone-mapping e A. Theodorou (Federico II) Le moderne GPU C42009 133 / 152