Evoluzione della Computer Grafica


All'inizio gli unici dispositivi grafici disponibili erano plotter, ingombranti e costosi, usati per CAD e simili applicazioni; qualcuno provava a produrre disegni sulle stampanti utilizzando caratteri (ASCII art), ma si era ben distanti da una vera grafica.
Con l'introduzione di tubi a vuoto,fin dagli anni 50, si provo' a produrre, con questi, immagini e giochi commerciali, che ebbero pero' poco successo. In un tubo a vuoto un fascio di elettroni e' prodotto da un filamento caldo (punto 1 in figura) ed accelerato da alta tensione, in modo che, dopo essere stato focalizzato da magneti (punto 3), vada a sbattere in un punto preciso di uno schermo. Lo ricoperto di un sottile strato di sostanze fluorescenti (fosfori, punti 4 e 5 in figura). Noi moderni monitor a colori ci sono 3 fasci di elettroni, che colpiscono fosfori di 3 colori diversi e davanti allo schermo c'e' una lastra con piccoli fori (maschera, al punto 4 in figura) che fa si' che il fascio colpisca i fosfori del colore giusto. I fosfori colpiti si illuminano e restano luminosi per un breve momento; per avere l'impressione di un'immagine stabile occorre che questa venga ridisegnata decine di volte al secondo. Questo viene chiamato "refresh" dello schermo.

CRT diagram

Sistemi grafici ebbero da subito applicazioni importanti, anche se si trattava di sistemi complicati e costosi, ad esempio furono creati sistemi per la progettazione meccanica, alla General Motors, a fine anni 50, in collaborazione con IBM.

All'inizio c'erano solo schermi monocromatici e valori numerici erano utilizzati per pilotare il fascio di elettroni lungo lo schermo, e produrre linee, punti luminosi, archi, ma con questo sistema era possibile disegnare solo figure semplici, un passo avanti si fece con la grafica "raster", una tecnologia simila a quella utilizzata dagli apparecchi televisivi: il fascio di elettroni illumina , in sequenza, una serie di punti sullo schermo, procedendo da sinistra a destra e dall'alto in basso. Definendo il colore e la luce dei singoli punti si possono disegnare forme complesse, l'immagine e' fatta pero' non piu' di tratti continui, ma di tanti puntini (pixel), e questo, in certi casi, da luogo ad artefatti (aliasing) per la cui eliminazione sono poi state sviluppate tecniche particolari, dette appunto di: anti-aliasing. Anche oggi si parla di grafica vettoriale, ove le figure sono fatte di primitive geometriche rappresentate da formule matematiche, e grafica "raster" ove le figure sono rappresentate da un insieme di punti di diverso colore e luminosita'.

Negli anni 60 iniziarono ad apparire veri e propri terminali per l'input-output dei computer , invece di schede o telescriventi.
L'IBM commercializzava, nel 1964, l'IBM 2250, un terminale grafico, che costava attorno ai 100.000 dollari, e veniva collegato ai mainframes. Altri terminali grafici erano prodotti dalla Tektronix. Fra i primi terminali grafici di successo ci furono quelli della Digital: il PDP-1 aveva un monitor, e su questa macchina fu sviluppato il gioco: "spacewars" (Russel et al.), un semplica gioco grafico, che veniva distribuito come demo, asieme ai PDP ed ebbe larga diffusione. In figura il monitor del PDP-1, con spacewars.

Spacewars su PDP-1


I primi monitor erano dotati di capacita' grafiche limitate, ed erano soprattutto intesi a mostrare testi; i terminali Dec, VT105, degli annni 70, potevano tracciare linee, od altre semplici figure geometriche, le versioni successive avevano un vero e proprio linguaggio grafico proprietario (Regis); mandando opportuni caratteri al terminale si poteva attivare un modo grafico, che permetteva di fare diagrammi ed altri disegni. Il terminale memorizzava una specie di programma, che disegnava primitive geometriche, e veniva rieseguito di continuo per il refresh dello schermo.

In questo periodo la Tektronix produceva il Textronix 4014 (1974) , che aveva fosfori speciali, che conservavano a lungo l'immagine e veniva usato per grafica vettoriale (in figura).

Tektronix 4014

Gli anni 70 videro anche lo sviluppo di giochi "arcade". Si tratta dell'evoluzione elettronica del classico flipper meccanico: un processore dedicato pilota un video tipo televisivo, producendo immagini in movimento, che cambiano in base a comandi dati dall'utente, con alcuni tasti. Il giocatore simula quindi sangionosi scontri con nemici, corse di macchine, sfide sportive ed altro. Questi giochi funzionavano a monete od a gettoni, e sono in voga ancor oggi. Alcuni sono dei veri capolavori, in termini di disegno, espressivita' e complessita' del software.

Donkey Kong Arcade Metal Slug CAbinet

Negli anni 70-80, con il calare dei costi e l'aumento delle prestazioni, ci fu una evoluzione nell'uso della memoria dedicata al video, con l'introduzione del frame-buffer. Il frame-buffer e' una memoria dedicata che rappresenta i valori di colore ed illuminazione dei punti dello schermo. Non e' piu' l'hardware del video che interpreta una serie di comandi grafici, ed in base a questi pilota il fascio di elettroni lungo linee, od altre primitive geometriche, ma l'applicazione disegna l'immagine sul framebuffer, ed il frame buffer viene poi scaricato sullo schermo, utilizzando la tecnologia della grafica "raster". In questo modo il disegno viene fatto dalla CPU e puo' essere molto complesso. A volte si usa un doppio frame buffer: mentre si disegna su uno l'altro viene scricato sul video.

All'inizio, quando la memoria era molto costosa, c'erano piccoli frame buffer, monocromatici, con un bit per pixel, od a toni di grigio, con 8 bit per pixel. Nei video a colori si usavano 8 bit/pixel con cui si potevano rappresentare 256 colori, 3 bit si usavano per il rosso ed il verde, 2 per il blu, con 4 livelli di intensita' per il blu ed 8 per il rosso e verde.

Un modo di utilizzare piu' colori era quello di usare gli 8 bit del framebuffer per indirizzare una tabella di colori, con piu' di 8 bit per esprimere un colore, ma con solo 256 colori, invece di un colore per ogni pixel dello schermo (palette o tavolozza grafica). I colori della tavolozza erano scelti in modo da rappresentare al meglio le sfumature dell'immagine. I valori del frame buffer erano utilizzati come una look-up table, ovvero come indirizzi della palette; ad esempio,se nel valore del frame buffer corrispondente al pixel 32 c'era il numero 74 si andava a prendere il colore numero 74 della tavolozza ed era quello che veniva disegnato nel pixel 32 dello schermo.
Coll'aumentare delle prestazioni delle memorie ed il calare dei loro costi, furono usati framebuffer con piu' bits per pixel, senza piu' palette: quelli con 16 bit/pixel erano detti highcolor, quelli a 24 bit/pixel truecolor. Con 24 bit/pixel si usa 1 byte per l'intensita' di ognuno dei 3 colori fondamentali: rosso, verde, blu (RGB, per red,green,blue). Oggi ci sono anche frambuffer a 32 bit/pixel, con codifica RGBA invece che RGB, 32 bits sono per il colore, gli altri 8 bit sono usati per il cosidetto "alfa channel", utilizzato per esprimere la trasparenza.

L'utilizzo di grandi quantita' di memoria per la grafica ha portato a problemi di trasmissione dei dati alla scheda grafica, per cui si e' passati dal connettere la scheda grafica al bus PCI ad un canale dedicato (AGP, 1997) e poi al PCI-express (2004).

Negli anni 70 vengono anche svilupate gran parte delle tecniche grafiche che verranno poi implementate in hardware negli anni 90, come varie tecniche di anti-aliasing, raffinati usi delle texture, diversi tipi di shading (Gourand, Phong shading) etc. Tecniche che allora erano applicate in contesti sperimentali, spesso su hardware dedicato.


La pipeline grafica e la Silicon Graphics

Nell'82 Jim Clark, a Stanford, creo' quella che era la prima pipeline grafica; un circuito integrato che implementava operazioni come trasformazioni di coordinate, clipping (eliminazioni di parti del disegno fuori della visuale) e proiezione dell'immagine della figura tridimensionale sul piano di vista. Clark fondo' poi la Silicon Grafics (SGI), che produsse prima terminali grafici e poi le prime vere workstation grafiche. Anche la SUN negli anni successivi produsse workstation con buone capacita' grafiche, ma per molti anni la Silicon mantene il primato nel campo della grafica ad alto livello.

La prima macchina della SGI, L'IRIS-1000 (1984) era piu' che altro un terminale grafico, con una CPU Motorola 68000, a 8 Mhz, e 768 KB di memoria, che implementava, in hardware, la "Geometry Engine", un sistema dedicato a proiettare un insieme di oggetti tridimensionali sul piano di vista rappresentato dallo schermo. L'evoluione di questa fu la "Reality Engine" che calcolava anche le luci ed aveva algoritmi di shading per calcolare i valori di luce dei pixels.

L'IRIS-2000 (1984) aveva una CPU fra i 12 ed i 33 Mhz, era una vera Workstation, con un sistema operativo Unix System V, modello successivo fu l'IRIX 3000 (1989) ed, in una fase successiva le macchine Indy, poi l'Octane e l'Onyx.

La Silicon fu anche fornitore degli studi di Hollywood, creando sistemi per animazioni digitali ed effetti speciali e producendo anche veri e propri supercomputers. Nel 2005-2006, con un mercato invaso da schede grafiche a basso costo si trovo' in difficolta' ed e' ora (2008) relegata ad un mercato di nicchia (sistemi Altix, a molti processori).


La grafica a basso costo

Nell'81 i PC IBM avevano una scheda video: l'MDA (Monochrome Display Adapter) capace di mostrare solo testo: 25 linee di 80 caratteri; modelli successivi (CGA 1981) avevano un modo grafico a 16, poi 256 colori, con grafica vettoriale. Successivamente furono prodote diverse schede grafiche, la Hercules (1982) fu una delle piu' note. Questa scheda permetteva al programmatore di definire il colore dei singoli pixel dello schermo, visti come fossero posizioni di memoria in posizioni speciali nella RAM del computer.

Le prime schede grafiche avevano caratteristiche incompatibili, che ne rendevano difficile l'utilizzo, poi finirono per essere standardizzate, in modo che il software fosse, in qualche modo, portabile; lo standard VGA e' dell'87, prevede un modo grafico capace di pilotare uno schermo di 640x480 pixel, a 256 colori, 256 KB di ram e modi testuali evoluti. Lo standard si e' poi evoluto nel super-VGA (SVGA 1989) con 800x600 pixels, oggi abbiamo anche XGA, SXGA, UXGA, QXGA, HXGA ed altri modi grafici, in grado di pilotare schermi sempre piu' grandi.

Negli anni 90 nelle schede grafiche per PC fu inserito hardware dedicato ad accelerare il disegno di primitive grafiche, e maggior memoria per il frame buffer, produttori di questo periodo erano Matrox, S3, ATI. Poi nelle schede grafiche si inizio' ad inserire hardware per l'accelerazione di funzioni tridimensionali (3D), analoghe a quelle presenti nelle workstation grafiche degli anno 80 (Silicon, SUN)

La prima scheda grafica in grado di offrire veramente buone prestazioni nel 3D era la Voodoo1 della 3dfx (1996).Non si trattava di una vera e propria scheda grafica, ma di una scheda da aggiungere alla scheda grafica del PC, dedicata ad applicazione delle texture e al calcolo dei colori dei pixel.

Queste schede venivano fornite assieme a librerie con API proprietarie (Glide) per l'uso da parte degli sviluppatori di software.

Negli anni 90 c'erano diverse API, fornite dai fabbricanti di software assieme al loro hardware. La Silicon aveva l'IRIS GL, proprietario, che era diventato uno standard di fatto, c'era poi lo standard PHIGS, meno diffuso. Nel 1992 la Silicon promosse l'introduzione dell'open GL, uno standard aperto, gestito da un consorzio di produttori.

Successivamente, nel 1996, la Microsoft entro' nel mercato della grafica ed introduse le librerie grafiche Direct3D, una componente delle librerie DirectX, per Windows, che avevano apposite API per interfacciarsi con le schede grafiche, in modo da facilitare lo sviluppo di applicazioni grafiche e giochi per Windows. Ovviamente le DirectX girano solo sotto Windows e non sono compatibili con le OpenGL.

Attualmente, per l'uso della grafica da parte dei programmatori sono in uso 2 librerie, le OpenGL e de DirectX della Microsoft. I fabbricanti di schede grafiche forniscono driver per usare i loro prodotti con entrambi i sistemi.

Lo sviluppo delle schede grafiche fu estremamente veloce. Le schede grafiche degli anni 90: Nvidia TNT2, Ati Rage, 3dfx Vodoo3 avevano hardware dedicato per texture e pixel shading, ma le trasformazioni geometriche venivano fatte dalla CPU.

Fra il 1999 ed il 2000 fu introdotto nelle schede grafiche hardware per le trasformazioni geometriche ed il calcolo delle luci (vertex shaders), supportato da librerie come le DirectX-7. Schede di questo periodo erano la GeForce 2 e la GeForce 250 della NVidia, la Ati Radeon 753, la S3 Savage 3D.

Nel 2001 schede come la GeForce 3, GeForce 4 Ti della Nvidia, e le Ati Radeon 8500 avevano vertex shaders programmabili, supportati dalle DirectX 8 e dalla estensione ARB delle OpenGL.

Nel 2002 vediamo sia vertex che pixel shaders programmabili, schede di questo periodo sono le GeForce FX NVidia e la Radeon 9700. Supportate da DirectX 9, ed OpenGL 2, in cui viene introdotto un vero e proprio linguaggio di programmazione per i vertex shaders programmabili. (OpenGL Shading Language)

Nel 2007 due produttori, NVidia ed Ati dominano il mercato delle schede grafiche di alto livello, NVidia ed Ati producono gli integrati per le schede grafiche, che sono poi assemblati in una vera e propria scheda grafica da diversi costruttori. NVidia ed Ati preoducono anche i drivers e le librerie (API) per l'uso delle schede.

Per quanto riguarda il mercato delle Consolle, dopo il ritiro dal mercato della Sega, che continua a sviluppare videogiochi, ma non piu' consolle, restano Sony, con la Playstation, la Nintendo, con il gameCube e poi il Vii, e la Microsoft, con Xbox.
Si tratta di computer dedicati, con architettura custom, CPU ed acceleratori grafici estremamente potenti, dedicati alla visualizzazione di immagini in movimento. XBox, che in realta' e' un PC adattato, utilizza dapprima grafica NVidia e poi Ati, la Playstation 3 usa un processore grafico speciale, prodotto da NVidia. La grafica per il Vii e' prodotta da Ati. Questi computer non hanno in dotazione un video, ma si collegano in genere ad un televisore. In figura Nintendo GameCube, Playstation 2 ed Xbox, le consolle diffuse nel 2007.

PS2 Sony Nintendo gameCube Xbox, Microsoft