270 likes | 382 Views
Corso Di Programmazione Grafica. Architetture per la grafica. Daniele Marini. Tratto da appunti di: Tomas Akenine-Möller Department of Computer Engineering Chalmers University of Technology. Aspetti considerati. Ricordare i problemi di texturing prospettico
E N D
Corso Di Programmazione Grafica Architetture per la grafica Daniele Marini Tratto da appunti di: Tomas Akenine-Möller Department of Computer Engineering Chalmers University of Technology
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: www.realtimerendering.com Programmazione Grafica
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 Grafica
Sulla pipeline • Nella GeForce3: 600-800 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 ms 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 Grafica
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 Grafica
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 Grafica
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 Grafica
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 Grafica
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 Grafica
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 Grafica
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 Grafica
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 Grafica
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 Grafica
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 Grafica
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 Grafica
Esaminiamo la GPU Xbox è una macchina UMA • UMA = unified memory architecture • Ogni componente del sistema accede alla medesima memoria Programmazione Grafica
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 Grafica
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 Grafica
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 Grafica
textureswizzling • 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 Grafica
Xbox conclusioni • (Quasi) un PC con un grande HW grafico • Architettura del tipo Sort-last fragment • 2 vertex shaders • 4 pixel pipelines @ 250 MHz • Programmabile per pixel • Una dellle migliori console attuali (per ora …) Programmazione Grafica
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) • http://www.dansdata.com/prophet4500.htm Programmazione Grafica
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 Grafica
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 Grafica
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 Grafica
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 Grafica
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… Programmazione Grafica