Pipeline di rendering
Transcript
Pipeline di rendering
Pipeline di rendering Davide Gadia Corso di Programmazione Grafica per il Tempo Reale Laurea Magistrale in Informatica per la Comunicazione a.a. 2013/2014 Outline • Grafica “off-line” vs Grafica “real-time” • Pipeline di rendering • Velocità di rendering e bottleneck • GPU e pipeline di rendering GPU-based Grafica “off-line” • Rendering fotorealistico • Simulazione avanzata di interazione luce-materia ! Ray tracing, Photon mapping, subsurface scattering, ... • Lunghi tempi di rendering • Rendering statici • Animazione cinematografica http://www.blendswap.com/blends/view/21803 Grafica real-time • Applicazioni interattive • Rendering deve essere ricalcolato MOLTE volte per secondo ! Almeno 30 fps (frame per second) = 0.0 33 secondi per frame • Fluidità effetto finale • Ottimizzazione qualità rendering/tempo di calcolo Videogames Far Cry 3 Modellazione 3D/CAD Call of Duty: Black Ops II Visualizzazione Scientifica Realtà Virtuale Pipeline di rendering • Camera virtuale • Scena 3D • Sorgenti di luce • Textures Immagine 2D • ….. • Equazioni di shading Pipeline di rendering: fasi concettuali Pipeline di rendering: fasi concettuali • Ogni fase può essere a sua volta una pipeline • Una fase può essere parallelizzata (anche in parte) Pipeline di rendering: fasi concettuali • Fase concettuale comprende diverse fasi funzionali • Fasi funzionali possono essere sviluppate in fasi di pipeline ! ! ! ! In maniera diversa Diverse architetture Soluzioni diverse SW/HW …. Pipeline di rendering: Application stage • Diversi tipi di task ! Eseguiti in parallelo dai diversi core della CPU • Lo sviluppatore ha pieno controllo di questa fase • Esempi: ! Caricamento modelli ! Collision detection ! Tecniche di accelerazione ! Calcolo parametri animazione procedurale ! Gestione I/O • Task più importante: ! Invio delle primitive di rendering a hardware grafico Pipeline di rendering: Geometry stage • Responsabile della maggior parte delle operazioni su poligoni e vertici ! ! per-polygon per-vertex • Suddivisa in fasi funzionali: Geometry stage: Model and View Transform • Trasformazioni di modello ! Da coordinate locali a coordinate mondo • Trasformazioni di vista ! ! ! ! Camera virtuale ha posizione e orientamento Trasformazione di vista posiziona camera nell'origine, orientata lungo l'asse z Agevola operazioni di proiezione e clipping Da coordinate mondo a coordinate camera Geometry stage: Vertex shading • Calcolo dell'apparenza superficiale degli oggetti • Interazione luce-materiale ! Diversi livelli di simulazione ! Shading equation ! Es: Phong • Calcoli per-vertex ! Ulteriori operazioni svolte in fasi successive ! Rasterizzazione interpola i dati Geometry stage: Clipping • Solo le primitive dentro il volume di vista canonico vengono mandate alla fase di rasterizzazione ! ! Totalmente o parzialmente Clipping opera sulle primitive parzialmente dentro il volume di vista Geometry stage: Screen mapping • Coordinate x,y delle primitive vengono trasformate in coordinate schermo ! Nuove coordinate + valori z-buffer sono passati alla fase di rasterizzazione Pipeline di rendering: Rasterizer stage • Obiettivo: ! calcolare il colore dei pixel nell'immagine finale coperti da ogni primitiva • Suddivisa in fasi funzionali: Rasterizer stage: Triangle setup and traversal • Scan conversione ! Controllo su pixel con centro coperto (anche parzialmente) da un triangolo ! Generazione fragment per la parte di pixel coperto da triangolo ! Dati di shading proveniente da Geometry stage ! Profondità ! Dati interpolati a partire dai 3 vertici Rasterizer stage: Pixel shading • Operazioni per-pixel ! Shading (se non effettuato in geometry stage) ! Calcolo del colore per ogni pixel ! Color interpolation ! Texturing ! ….. Rasterizer stage: Merging • Combinazione tra: ! colore mantenuto nel color buffer ! colore dei fragment • Risoluzione visibilità: ! Valori in color buffer solo per primitive visibili ! Z-buffer algorithm ! Controllo valore profondità frammento con valore in z-buffer ! Se minore, allora frammento è visibile e sostituisco valore nel color buffer e z-buffer ! Se maggiore, allora non è visibile e lo scarto ! Ordine rendering ininfluente ! Problemi con oggetti trasparenti ! Vanno trattati per ultimi e in ordine back-to-front Rasterizer stage: Merging • Altri canali e buffer influiscono sui frammenti e sul colore finale dei pixel ! ! ! Alpha channel ! Informazioni opacità per ogni pixel Stencil buffer ! Usato per particolari operazioni di blending Accumulation buffer ! Usato per effetti come motion blur, soft shadows, ecc Rasterizer stage: Merging • Double buffering ! per evitare di vedere il risultato progressivo della rasterizzazione ! Rendering offline in back buffer ! Contenuto trasferito nel front buffer Performance di una pipeline • Elementi di una pipeline eseguiti in parallelo • Velocità di rendering ! Rendering speed o throughput ! data dallo stage più lento di una pipeline ! Collo di bottiglia (bottleneck) ! Frame per second (fps) ! Numero di immagini renderizzate al secondo ! Di solito considerata su intervallo ! Hertz (Hz) = 1/seconds ! Frequenza di update ! Utilizzata per display ! Valore fisso Performance di una pipeline • fps e Hz vanno messi in relazione ! Se fps sono maggiori della frequenza di refresh del display, la velocità di rendering è data da quest'ultima. • Esempio: ! Collo di bottiglia della pipeline: 62.5 ms = 1/0.0625 = 16 fps ! Monitor: frequenza di 60 Hz ! Opzioni per velocità di rendering: ! 60 Hz, 30 Hz, 20 Hz, 15 Hz, 12 Hz, ….. ! Di conseguenza: ! velocità di rendering finale 15 Hz ! Massimo valore costante supportabile dal monitor Pipeline grafica GPU • Graphics Processing Unit (GPU) • Accelerazione hardware essenziale per alte velocità di rendering ! ! ! Silicon Graphics leader nell'ambito professionale Dal 1996 (3Dfx Voodoo 1) hardware grafico disponibile in PC Ad oggi, hardware grafico disponibile su schede separate (ATI, NVIDIA) o integrate nelle schede madri (Intel) ! Su PC, notebook, tablet, smartphone, ecc.... Pipeline grafica GPU • Videogiochi richiedono shading avanzato • GPU più potenti = shading migliore • Necessità di mantenere fps adeguati = continua evoluzione hardware Pipeline grafica GPU • Crescita valore GFLOPS Pipeline grafica GPU • GPU Memory Bandwidth Pipeline grafica GPU • Design GPU specifico per calcoli matematici intensivi • Rendering grafico: ! Tanto: ! Calcolo sequenziale ! Algebra lineare ! Calcolo matriciale ! Accesso sequenziale a memoria ! Poco: ! Controllo di flusso (if/else, cicli) ! Accesso casuale memoria Pipeline grafica GPU • Più transistors per Arithmetic Logic Unit (ALU) ! Calcoli di rendering più veloci ! Area dedicata ad ALU: CPU (7%) vs GPU (>50%) Pipeline grafica GPU: inizi CPU GPU • Accelerazione hardware inizialmente usata per fasi finali pipeline ! rasterizzazione Pipeline grafica GPU: pipeline fissa CPU GPU • Generazioni successive di hardware: ! Accelerazione hardware ha “risalito” la pipeline • Pipeline fissa: ! ! ! ! fixed-function pipeline Pipeline hardware composta da elementi non programmabili Possibilità di settare diversi stati in alcune parti ! Es: test Z-buffer on/off Ma no possibilità di controllo sull'ordine e su quali funzioni applicare in ogni stato Pipeline grafica GPU: pipeline programmabile CPU GPU • Ultima decina di anni: pipeline programmabile ! Parti critiche della pipeline sono programmabili dall'utente ! tramite Shaders ! Implementazione, controllo e determinazione su tipo e ordine operazioni in alcune parti della pipeline ! Alcune parti rimangono configurabili e non programmabili ! Trend è verso sempre maggiore flessibilità e programmabilità Pipeline grafica GPU: pipeline programmabile CPU GPU • Da pipeline fissa a pipeline programmabile: ! Processo graduale da limitata e opzionale programmabilità a “obbligo” utilizzo shaders ! Progressiva deprecazione di funzioni della pipeline fissa Pipeline grafica: implementazione GPU • Riorganizzazione Geometry and Rasterizer stage ! Diverse fasi hardware con diversi livelli di configurabilità o programmabilità ! Verde: completamente programmabili ! Gialli: configurabili ma non programmabili ! Blu: completamente fissi Geometry e Rasterizer stage revisitati Pipeline grafica GPU: Vertex shader • Prima fase ad elaborare una triangle mesh ! Precedente fase di assemblamento informazioni su vertici ecc ! Preparazione dati per elaborazione vertex shader • Vertex shader: ! Modifica ! Crea ! Ignora • Valori associati ad ogni vertice ! Colore ! Normale ! Coordinate texture ! posizione Pipeline grafica GPU: Vertex shader • Non può creare o distruggere vertici • Ogni vertice processato indipendentemente ! parallelismo ! Risultato elaborazione un vertice non può essere passato ad un altro vertice • Esempi: ! Shadow volume ! Vertex blending ! Deformazioni procedurali (clothing, acqua, ecc) ! …. Pipeline grafica GPU: Geometry shader • Fase opzionale • Elabora insieme più vertici di un oggetto • Problemi di performance: ! Primitive sono elaborate e restituite nello stesso ordine di input ! Risultato da salvare e ordinare in caso di computazione in parallelo ! Imposto limite al numero di calcoli possibili • Esempi: ! Creazione di un limitato numero di copie ! Selezione bordi per algoritmi legati a calcolo ombre ! Elaborazione ed estrazione di parametri legati ai vertici ! …. Pipeline grafica GPU: Pixel shader • Fase relativa alla definizione e gestione di come un triangolo copra i pixel dell'immagine finale • Pixel shader offre piena programmabilità alle operazioni sui frammenti ! ! ! Tecniche image processing Calcolo gradienti Utilizzo avanzato textures Pipeline grafica GPU: Pixel shader • Multiple render targets (MRT) ! Salvataggio risultati pixel shader in buffer differenti ! Un singolo passo per calcolare più immagini intermedie ! Render-to-texture ! Tecniche Image-based ● Deferred rendering Forward rendering vs Deferred Rendering • Forward rendering modalità “standard” descritta fino ad adesso calcolo illuminazione per-vertex, per-fragment, per ogni luce molto calcolo sprecato per frammenti che verranno scartati da depth testing Forward rendering vs Deferred Rendering • Deferred rendering processo geometria senza applicare lighting utilizzo diversi render targets per salvare colori profondità normali …. applico lighting alla fine in Fragment shader solo su fragment effettivamente visibili complessità forward rendering: O(num_fragments * num_lights) complessità deferred rendering: O(screen_resolution * num_lights) Forward rendering vs Deferred Rendering • Deferred rendering Forward rendering vs Deferred Rendering • Problemi Deferred rendering serve HW recente: supporto MRT serve adeguata larghezza di banda problemi con oggetti trasparenti e materiali multipli no anti-aliasing Adeguato in scene con molte luci dinamiche Shader model • Caratteristiche programmabilità delle pipeline • Introdotti seguendo evoluzione DirectX • Servono a categorizzare la caratteristiche della scheda grafica in uso Shader model Direct3D OpenGL Esempio scheda 2 9 2.x NVIDIA GeForce 6800 ATI Radeon X800 3 10.x 3.x NVIDIA GeForce 8800 ATI Radeon HD 2900 4 11.x 4.x NVIDIA GeForce GTX 480 ATI Radeon HD 5870 Shader model Shader model 4 • Unified Shader Model ! Common-shader core ! Vertex, pixel, geometry shader condividono un modello di programmazione ! Set istruzioni consistente tra i 3 tipi ! Con differenze ! Es: solo pixel shaders possono utilizzare gradienti di coordinate per accedere a textures Shader model 4 • Unified Shader Architecture ! Unified design ! Unità computazionali possono eseguire tutti e 3 i tipi di shader ! Architettura flessibile ! Vertex, pixel, geometry shader diventano thread • Hardware non deve per forza avere architettura unica per supportare lo Unified Shader Model ! E viceversa Unified Shader Architecture Unified Shader Architecture Unified Shader Architecture Unified Shader Architecture References • “Real time rendering – 3rd edition” : Cap 2-3 – Cap 7 (pag. 279-283) • Slide e immagini da www.realtimerendering.com • Slide CS 563 “Advanced Topics in Computer Graphics” (Worcester Polytechnic Institute) ! http://web.cs.wpi.edu/~emmanuel/courses/cs563/S12/ • Slide corso SIGGRAPH 2008 “Beyond Programmable Shading” ! http://s08.idav.ucdavis.edu/ ! Immagini da http://gamedevelopment.tutsplus.com/articles/forward-rendering-vs-deferred-rend ering--gamedev-12342
Documenti analoghi
Presentazione di PowerPoint
Definire i parametri di una camera é necessario perché
un viewer possa generare un’immagine di una scene
Interattivamente (implicitamente) a (CAD, Games)
Seguendo una API (esplicitamente)
Transform
Cenni storici sull’hardware grafico
2007: geometry shader, stesso hardware per tutti gli
shaders (NVidia 8800)
CPU
GPU: Graphical Processing Unit
3D
2D
n
PDF pipeline
Cenni storici sull’hardware grafico
2007: geometry shader, stesso hardware per tutti gli
shaders (NVidia 8800)
CPU
GPU: Graphical Processing Unit
3D
2D