Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica Tratto da appunti di: Tomas Akenine-Möller Department of Computer Engineering Chalmers University of Technology
Programmazione Grafica2 Aspetti considerati Ricordare i problemi di texturing prospettico Ricordare le trasformazioni geometriche per il rendering L’architettura di XBOX L’architettura di KYRO C’è in giro molta documentazione su HW grafico, cercare qui:
Programmazione Grafica3 Aspetti generali L’evoluzione delle recenti architetture grafiche parte dalla fase finale della pipeline –Si è aggiunto all’HW la rasterizzazione (il maggiore aumento di prestazioni deriva da questo) –Poi si è rivisto lo stadio di geometria –L’applicazione non è stata ancora messa in HW! Due vie principali per migliorare le prestazioni: –Pipelining –Parallellizazione –Combinazione dei due fattori
Programmazione Grafica4 Sulla pipeline Nella GeForce3: stadi di pipeline! –57 millioni di transistor –Pentium IV: 20 stadi, 42 millioni transistor Schede recenti: –Radeon 9700: 110M transistor –GeForce FX 5800: 125 M transistor, 500 MHz Idealmente: n stadi accrescono il throughput di n volte –Ma aumenta la latenza! –Comunque non è ancora un problema: Consdieriamo un chip con una frequenza di circa 200 MHz (5ns per clock) 5ns*700=3.5 m s di latenza complessiva Ma abbiamo circa 20 ms per frame (50 frames per secondo) HW grafico è semplice da organizzare in pipeline perchè: –I pixel sono per lo più independenti l’uno dagli altri –Pochi test e funzionalità molto precise –Non è necessaria una frequenza troppo elevata: il collo di bottiglia è la banda passante per la comunicazione con la memoria Questo sta cambiando con il crescere della programmabilità –È semplice prevedere i meccanismi di accesso a memoria, e quindi fare un ” prefecthing”
Programmazione Grafica5 Parallellismo Idea semplice: calcola n risultati in parallalo e combinali alla fine GeForce FX 5800: 8 pixels/clock, 16 textures/clock –Con una pipeline di parecchi gruppi a 100 stadi si possono processare molti pixel insieme Non è sempre semplice! –Provate a parallelizzare un algoritmo di sort … –Ma i pixel sono tra loro indipendenti, e quindi per la grafica è più semplice Si può parallelizzare sia la geometria sia la rasterizzazione:
Programmazione Grafica6 Classificazione dei tipi di hardware È necessario computare un sort dallo spazio modello allo spazio schermo Quattro alternative principali: –Sort-first –Sort-middle –Sort-Last Fragment –Sort-Last Image
Programmazione Grafica7 Sort-first Ordina le primitive prima dello stadio di geometria Schermo suddiviso in grandi regioni Ogni singola pipeline è responsabile di una regione G è lo stadio geometrico FG fragment generator, parte della rasterizzazione, trova quali pixel sono interni a un triangolo FM fragment merge, assembla i frammenti nei vari buffer (Z-buffer, colore) Architettura inusuale e poco usata
Programmazione Grafica8 Sort-middle Ordina dopo G prima di rasterizzare (R) Naturale, perché dopo G conosciamo le posizioni dei triangoli nello spazio schermo Suddividi il lavoro tra le varie unità G Lo schermo può esser suddiviso in “piastrelle” (es. 4x4 pixel, oppure in n linee di scansione) R è responsabile del rendering entro una piastrella Triangoli comuni a due regioni sono inviate ai due R responsabili
Programmazione Grafica9 Sort-Last Fragment Ordina tra FG e FM XBOX adotta questo schema! Suddividi il lavoro tra le G Il risultato si invia a FG I frammente sono quindi ordinati prima di inviarli a FM –Ogni FM è responsabile di una piastrella di pixel Un triangolo è spedito a un solo FG, si evita di duplicare il lavoro
Programmazione Grafica10 Sort-Last Image Ordina alla fine della pipeline Ciascun FG & FM ha un frame buffer separato per l’intero schermo (Z e colore) Dopo che tutte le primitive sono state spedite alla pipeline z-buffer e color buffer sono fusi in un solo color buffer Può essere visto come un insieme di pipeline indipendenti Richiede enorme memoria! Usato per ricerca ma non commercialmente
Programmazione Grafica11 La banda passante per la memoria è enorme !! R lettura, W scrittura, T texture, Z è Z-buffer, C è color buffer Supponendo 2 texture per pixel, e il costo TR 24 byte (triline MIP-mapping), il resto costa 32 bit (4 byte) Un pixel normale costa: ZR+ZW+CW+2*TR=60 byte per pixel Se vogliamo 60 fps, 1280x1024: 4.5 Gb/s Ma un pixel viene sovrascritto molte volte! Se la sovrascrittura è 4 volte, si ha: 18 Gb/s ! Supponiamo una DDRAM a 300 MHz, 256 bit per accesso: 9.6 Gb/s 18>9.6 !!
Programmazione Grafica12 Banda passante 18>9.6 L’uso di banda non è mai al 100%, possiamo inoltre usare molte texture, anti- aliasing, che richiede ancor più banda Ci sono molte tecniche per ridurre l’uso di banda: –Texture caching e prefetching –Compressione delle Texture –Z-compression –Z-occlusion testing (HyperZ)
Programmazione Grafica13 Z-occlusion testing e Z- compression Un modo per ridurre la banda –ATI Inc., ha esplorato per primo questa strada con la tecnologia HyperZ Molto semplice e molto efficace –Dividi lo schermo in piastrelle di 8x8 pixels –Mantieni uno stato della memoria sul chip –Accesso molto veloce –Memorizza altra informazione richiesta da questo algoritmo Abilita occlusion culling sui triangoli, z- compression, e Z-clear veloce
Programmazione Grafica14 Memorizza zmax per tile, e un flag (se è compresso/non-compresso) Rasterizza una piastrella per volta Test: se zmin sul triangolo è maggiore di zmax della piastrella –Se sì non far nulla!!! –Salva la texture e z-read per l’intera piastrella– enorme risparmio! Altrimenti leggi Z-buffer compresso e decomprimi Scrivi Z-buffer non-compresso, quando hai finito comprimilo e spediscilo indietro alla memoria, aggiorna zmax Per Z-clear fast: setta un flag a”clear” per ciascuna piastrella –Non dobbiamo leggere dallo Z-buffer, basta spedire lo Z pulito per quella piastrella
Programmazione Grafica15 Xbox game console Costruita da Microsoft e NVIDIA È quasi un PC: –Pentium III, 733 MHz –GeForce3 estesa Perché una console? –Resta stabile … –Non devi preoccuparti di 20 differenti schede grafiche e di CPU che vanno da 100 MHz a 2GHz
Programmazione Grafica16 Xbox è una macchina UMA UMA = unified memory architecture –Ogni componente del sistema accede alla medesima memoria Esaminiamo la GPU
Programmazione Grafica17 geometry stage Dual vertex shaders –La stessa procedura su un vertice è eseguita due volte in parallelo –Vertex shader è una SIMD opera su 4 componenti per volta –Invece di uno stadio geometrico con funzione fissata, abbiamo pieno controllo sulla animazione dei vertici, lighting etc. Usa DMA (direct memory access), la GPU invia i vertici direttamente dalla memoria! 3 differenti caches – per prestazioni migliori!
Programmazione Grafica18 geometry stage: le cache Pre T&L (transform & lighting) –Memorizza i vertici inviati dalla memoria Evitare invii inutili –In media un vertice è condiviso da 6 triangoli –Ha 4 kbyte di memoria locale Post T&L cache: –Evita di lavorare più di una volta su ogni vertice –Ha memoria sufficiente per 16 vertici trasformati Primitive Assembly cache: –Un vertice trasformato richede un sacco di memoria, ci vuole tempo per fetchare un vertice dalla Post T&L cache –Può salvare 3 vertici completamente shaded –Esiste per evitare fetch da Post T&L Il compito della cache PA è di inviare i triangoli al rasterizzatore
Programmazione Grafica19 rasterizer Primo blocco: trianglesetup (TS) and FG Sorting è fatto dopo FG Architettura del tipo Sort-last 2 texture unit TX RC (register combiners) opera sui valori di texel filtrati dal TX e dallo shading interpolato sui triangoli (è programmabile) –Può esser usato ad es. per bump mapping Infine i risultati da TX, RC, shading interpolation, fog interpolation è fuso da FM in un colore finale per il pixel
Programmazione Grafica20 texture swizzling Una tecnica di accesso che si usa ad es. per filtraggio bilineare Questa è una curva di ”riempimento del piano” (simile alla curva di Peano) usata per sfruttare la coerenza spaziale tra pixel
Programmazione Grafica21 Xbox conclusioni (Quasi) un PC con un grande HW grafico Architettura del tipo Sort-last fragment 2 vertex shaders 4 pixel 250 MHz Programmabile per pixel Una dellle migliori console attuali (per ora …)
Programmazione Grafica22 KYRO – una architettura differente Basata su architettura PowerVR (StMicrolectronics) Basata su piastrelle –KYRO II: 32x16 pixels Differenze fondamentali –Per l’intera scena esegui: Trova tutti i triangoli interni a ciascuna piastrella Renderizza tutti i triangoli interni ad essa Vantaggi: può implementare colori temporanei, stencil, e Z- buffer su una veloce memoria on-chip Risparmia memoria e banda di comunicazione con memoria centrale! –Il produttore dichiara di risparmiare 2/3 della banda usuale rispetto ad architetture tradizionali (senza test di Z-occlusione) –
Programmazione Grafica23 KYRO: panoramica CPU invia dati dei triangoli a KYRO II Tile Accelerator (TA) –Deve avere l’intera scena prima di far partire i blocchi ISP e TSP –Mentre ISP e TSP lavorano, TA lavora sull’immagine successiva (lavorano in modo pipeline) –TA ordina i triangoli e crea una lista di puntatori a triangoli per ciascuna piastrella
Programmazione Grafica24 KYRO Tile accelerator (TA): –Quando tutti i triangoli della scena sono ordinati nelle piastrelle, TA spedisce i dati al blocco ISP –TA continua sul frame successivo, ed esegue il sorting in parallelo Image synthesis processor (ISP): –Implementa Z-buffer, color buffer, stencil buffer per la piastrella –Esegue occlusion culling (simile al test Z-occlusion) Testa 32 pixels per volta nello Z-buffer Registra quali pixel sono visibili –Raggruppa i pixel con la stessa texture e li invia al TSP Questi pixel sono certamente visibili, quindi si calcola la texture una solva volta per ciascun pixel
Programmazione Grafica25 KYRO: TSP Texture and Shading Processor (TSP): –Gestisce texturing e interpolazione di shading Ha due pipeline che lavorano in parallelo –2 pixels per clock Può usare al più 8 texture –Viene implementato con una specie di ”loop” nel TSP I dati texture sono prelevati dalla memoria locale Supersampling: 2x1, 1x2, and 2x2 –Renderizza un’immagine a dimensione maggiore e la filtra scalandola –Nel caso 2x2 occorre solo 4x la dimensione della piastrella, ovvero rende 4x le piastrelle ma non richiede 4x la memoria
Programmazione Grafica26 KYRO: vantaggi e svantaggi Usa una piccola memora aggiuntiva molto veloce –Riduce notevolmente la banda necessaria –Riduce notevolmente la memoria buffer Ma richiede maggiore memoria locale –Per l’ordinamento delle piastrelle Questo limita il numero di triangoli che si possono elaborare –3 MB possono gestire circa 30,000 triangoli
Programmazione Grafica27 Il futuro? Progettare unanuova architettura per la global illumination Pochi si sono occupati di algoritmi basati su”ray tracing” Altre cose utili: –Test rapido di intesezione tra superfici curve in HW –Attraversamento rapido di una struttura dati spaziale –Gestire scene molto grandi HW standard può lavorare già abbastanzza bene percheè vengono scartati triangoli che sono già stati elaborati Gli algoritmi di ray tracing non possono avere questo vantaggio, perchè sono globali, e devono conoscere l’intera geometria –Photon mapping…