I problemi del Real Time
Lezione 19:
Grafica in tempo reale
Come visto nelle precedenti lezioni, i calcoli
necessari a generare immagini 3D sono
numerosi e complessi.
I programmi di grafica 3D impiegano spesso
diversi minuti (anche ore) per generare un
singolo fotogramma di animazione.
Eppure esistono numerose applicazioni in
tempo reale.
I problemi del Real Time
I videogiochi a cui siamo abituati oggi
permettono ai personaggi di muoversi in interi
mondi tridimensionali.
I problemi del Real Time
I problemi del Real Time
In numerose applicazioni vengono utilizzati
simulatori (ad esempio i simulatri di volo) che
riproducono immagini 3D realistiche in tempo
reale.
I problemi del Real Time
I problemi che bisogna affrontare sono di 2
tipi:
Problemi di banda
Problemi di calcolo
La realta' virtuale ci ha poi portato a definire
mondi 3D in cui l'utente puo' muoversi.
I problemi del Real Time
I limiti del Bus
I problemi di banda sono legati al
trasferimento delle immagini dalla memoria
del PC al video. Si verificano tanto nella
grafica 2D che in quella 3D.
Per comprendere i problemi di banda,
occorre concentrarsi sull'architettura di un PC
e comprendere il meccanismo di generazione
delle immagini.
I problemi di calcolo sono invece legati
alla generazione delle immagini. Essi sono
minimi nella grafica 2D, ma sono assai
significativi nella grafica 3D.
La componente di un PC che crea le
immagini visualizzate sullo schermo viene
chiamata scheda video.
I limiti del Bus
CPU
Memoria
Centrale
I limiti del Bus
Scheda
Video
CPU
BUS
I limiti del Bus
CPU
VRAM
BUS
Il processore del PC comunica con la memoria
centrale e con la scheda video attraverso un
dispositivo chiamato BUS.
Normalmente ogni schdea video possiede una
memoria privata (VRAM) incorporata.
I limiti del Bus
Scheda
Video
Memoria
Centrale
Scheda
Video
Memoria
Centrale
VRAM
BUS
La scheda video invia al monitor le immagini
create in base alle informazioni presenti nella
memoria privata.
CPU
Scheda
Video
Memoria
Centrale
VRAM
BUS
Il processore visualizza le immagini trasferendo i
colori dei singoli pixel dalla memoria centrale alla
memoria della scheda video passando per il BUS.
I limiti del Bus
CPU
Memoria
Centrale
I limiti del Bus
Scheda
Video
CPU
VRAM
Bit-BlitBUS
BUS
I limiti del Bus
Il BUS e' in grado di trasferire i dati ad una
velocita' limitata.
I limiti del Bus
1024 x 768 x 16M colori =
CPU
3 MB
VRAM
BUS
La quantita' di memoria necessaria per memorizzare
un'immagine puo' rendere la velocita' del BUS
inadeguata a produrre animazioni fluide.
I limiti del Bus
BUS
Scheda
Video
Memoria
Centrale
3 MB x 60 Hz =
180 MB/s
Il fatto di condividere un unico canale per
accedere sia alla memoria centrale che alla
scheda video causa ulteriori rallentamenti.
I limiti del Bus
Scheda
Video
CPU
VRAM
32 MB/s
L'operazione di trasferimento di un'immagine
dalla memoria centrale alla memoria video
viene chiamata Bit-Blit.
Memoria
Centrale
Scheda
Video
Memoria
Centrale
VRAM
AGP
Per risolvere questo problema i PC di oggi
hanno 2 Bus uno dei quali dedicato
esclusivamente alla scheda video (AGP).
Memoria
Centrale
Scheda
Video
CPU
32MB/s
VRAM
1MB/s
Questo BUS e' molto piu' veloce di quello standard.
Essendo poi fisicamente separato puo' lavorare
indipendentemente dalla memoria centrale.
Il sincornismo video
Il sincornismo video
Il trasferimento rapido di dati dalla memoria
centrale alla scheda video non è sufficiente a
garantire la fluidita' delle immagini.
Un'altra serie di problemi da risolvere e'
quella del sincronismo con il video.
Il monitor ridisegna l'immagine con un
pennello ottico 60-100 volte al secondo.
Il sincornismo video
Il sincornismo video
Scheda
Video
Scheda
Video
VRAM
VRAM
La scheda video legge dalla propria memoria il
colore del pixel da inviare al monitor.
Il sincornismo video
Se si disegna un'immagine mentre il pennello
ottico sta passando...
Il sincornismo video
La soluzione piu' semplice consiste
nell'aspettare il V-Sync per incominciare a
trasferire un'immagine.
... questa viene "mozzata"! La parte inferiore
dell'immagine viene visualizzata nel primo
fotogramma, l'immagine intera in quello successivo!
La scheda video avvisa il processore (V-Sync)
quando ha iniziato a trasferire una nuova
immagine. La CPU ha quindi il tempo di
comporre la nuova figura prima che
quest'ultima venga raggiunta dal pennello
ottico.
Il sincornismo video
Il sincornismo video
L'attesa obbligata del V-Sync rallenta
l'animazione.
Puo' succedere che i vari elementi che
compongono un'animazione si muovano a
scatti.
Scheda
Video
VRAM
VRAM
Se la scheda video ha memoria sufficiente per
ospitare due immagini, si puo' adottare la
tecnica chiamata doppio buffer.
Il sincornismo video
Il sincornismo video
Scheda
Video
VRAM
VRAM
Scheda
Video
CPU
Il processore compone l'immagine in una delle
due aree mentre la scheda video invia al
monitor l'altra...
Il sincornismo video
VRAM
VRAM
CPU
... Non appena l'immagine e' stata composta, la CPU
scambia le 2 aree. La scheda video visualizza
l'immagine precedente, mentre la CPU compone la
nuova. Lo scambio avviene ad un V-Sync.
Il sincornismo video
Quando l'animazione e' destinata alla
televisione si puo' aumentare la fluidita'
utilizzando l'interlacciamento.
I programmi possono sfruttare questo fatto
generando prima le righe pari, poi quelle
dispari.
La televisione ha una FPS di 25 frame al
secondo ma ritraccia l'immagine 50 volte al
secondo.
In questo modo si crea l'illusione di avere
immagini a 50 fps su un mezzo che in realta'
ne consente solo 25!
La prima volta traccia le righe pari, poi
quelle dispari.
La pipeline
La pipeline
I problemi causati dal bus e dal sincronismo
si verificano tanto per grafica 2D che 3D.
I calcoli necessari a realizzare un'immagine
3D in tempo reale vengono suddivisi in fasi.
La grafica 3D richiede pero' calcoli piu'
complessi che complicano ulteriormente
l'operazione di visualizzazione in tempo
reale.
La sequenza delle fasi viene chiamata
pipeline.
La pipeline
La pipeline
Costruzione Trasformazione
Accettazione Illuminazione
del modello
del modello
Trasformazione
di visualizzazione
Clipping
Divisione
per w
Rasterizzazione
Una versione piu' generale della pipeline di
visualizzazione puo' includere fino ad 8 fasi.
La pipeline
Nel modalita' immediata il modello viene
ricostruito da zero ad ogni frame.
Nella modalita' trattenuta il modello
precedentemente memorizzato viene
mantenuto. Il programma provvede
solamente a modificare le parti necessarie.
Vediamo quali tecniche sono state sviluppate
per accelerare i singoli stadi della pipeline.
Nella fase di costruzione del modello
vengono ricercati tutti gli oggetti che
compongono un modello.
Durante un'animazione un modello puo'
cambiare. Esistono due modi con cui si
possono aggiornare i cambiamenti:
immediato e trattenuto (retained).
La pipeline
Nella fase di trasformazione del modello
vengono applicate tutte le trasformazioni
necessarie per calcolare le posizioni dei vertici
dei singoli oggetti.
In questa fase vengono effettuati numerosi
prodotti vettore per matrice per determinare
le posizioni dei vertici.
La pipeline
La pipeline
Nella fase di accettazione s'individuano gli
oggetti esterni al campo visivo e si eliminano
le superfici nascoste.
Lo stadio di trasformazione di
visualizzazione calcola le proiezioni
prospettiche dei vertici degli oggetti.
Durante la fase di illuminazione vengono
valutati i parametri necessari al calcolo delle
luci (le direzioni delle normali alle superfici,
le direzioni delle luci nei vari punti...). Non
viene pero' ancora effettuato il calcolo dei
colori dei pixel.
La fase di clipping determina le parti degli
oggetti che intersecano la finestra di
visualizzazione.
La pipeline
La fase di rasterizzazione si occupa di:
Disegnare le superfici
Determinare le superfici visibili
Applicare texture e luci
La pipeline
Si determina quindi il colore effettivo del
pixel da disegnare considerando le texture ed
effettuando il calcolo delle luci.
S'inserisce quindi il pixel nella memoria della
scheda video, considerando l'informazione
contenuta nello z-buffer.
La divisione per w, trasforma le coordinate
omogenee in coordinate 2D.
La pipeline
Il disegno delle superfici esamina
semplicemente tutti i triangoli corrispondenti
agli oggetti e determina a quali pixel essi
corrispondano.
La determinazione delle superfici
visibili viene generalmente realizzata
mediante z-buffer. Corrisponde quindi a
calcolare la distanza di ogni pixel
dall'osservatore.
Schede video accelerate
L'ultimo stadio della pipeline e' quello che
nasconde la complessita' maggiore.
Esso richiede un numero enorme di
operazioni tra numeri interi (uno per ogni
pixel generato).
Fino a pochi anni fa', questo era il punto piu'
difficile e che richiedeva alla CPU la
massima potenza di calcolo.
Schede video accelerate
Sono nate quindi numerose schede video
accelerate capaci di rendere piu' veloce
questo stadio di visualizzazione.
Ormai quasi tutte le schede video presenti in
commercio forniscono queste funzionalita'.
In passato esistevano componenti
addizionali che andavano acquistate
separatamente (es. 3Dfx).
Schede video accelerate
Schede video accelerate
Il tipo piu' semplice di accelerazione consiste
nello z-buffer hardware.
La CPU deve solo determinare il colore dei
pixel e la loro distanza. La scheda video
automaticamente determina le superfici
visibili utilizzando lo z-buffer.
La scheda deve pero' disporre di un
maggiore quantitativo di memoria in modo
da memorizzare anche lo z-buffer.
Schede video accelerate
Il livello di accelerazizone successivo consiste
nello spostare la determinazione del colore
dei pixel sulla scheda video.
La scheda deve avere piu' memoria in
quanto deve anche memorizzare le texture.
In questo caso la scheda determina i colori
dei pixel utilizzando le informazioni relative
alle luci ed alle texture.
Questo tipo di schede implementa in
hardware interamente l'ultimo stadio della
pipeline.
Schede video accelerate
Schede video accelerate
Le prime schede accelerate erano in grado di
elaborare tramite hardware solamente
triangoli.
L'accelerazione in hardware fatta
direttamente dalla scheda video presenta
numerosi vantaggi.
I modelli attuali sono in grado di gestire
anche oggetti piu' complessi come NURBS e
superfici di Hermite.
Con l'accelerazione hardware, nè il
processore nè la memoria centrale restano
coinvolti nel calcolo dell'ultimo stadio di
visualizzazione.
Schede video accelerate
Le estensioni dei processori
Il processore puo' quindi dedicare tutta la sua
potenza di calcolo ai primi stadi della
pipeline.
Oltre alle schde video, anche i processori
sono stati estesi per accelerare la pipeline di
visualizzazione 3D.
L'ultimo stadio e' quello piu' facilmente
parallelizzabile. La scheda video puo'
quindi implementare un'architettura parallela
dedicata per questo tipo calcoli ottenendo
un'efficienza superiore a quella raggiungibile
dal solo processore.
Due dei tentativi piu' importanti sono le
istruzioni MMX e le estensioni SIMD.
Le estensioni MMX
Le estensioni MMX
Un primo tentativo di accelerare la pipeline di
visualizzazione nei PC domestici fu compiuto
nel 1995 dall'INTEL con l'introduzione dei
processori PENTIUM MMX.
Queste istruzioni erano studiate per facilitare
la decompressione di filmati MPEG e per
velocizzare operazioni comuni come rotazioni
e scalamenti di texture 2D.
Questi processori includevano alcune
istruzioni capaci accelerare i calcoli interi
utilizzati nello stadio finale della pipeline.
Permettevano inoltre un'implementazione
software efficiente dello z-buffer.
Le estensioni MMX
Le estensioni MMX
Sebbene l'idea fosse interessante queste
estensioni non ebbero il successo atteso.
Come accennato precedentemente, le stesse
operazioni vengono fatte in modo migliore
dalle schede video accelerate.
Esse infatti erano poco utili in un contesto di
grafica 3D, in quanto potevano intervenire
in modo adeguato solamente nella fase di
implementazione dello z-buffer software.
Le estensioni MMX sono quindi oggi
utilizzate solamente per la decompressione
delle immagini JPEG e dei filmati MPEG.
Le estensioni SIMD
Le estensioni SIMD
Le schede video possono accelerare
solamente l'ultimo stadio della pipeline di
visualizzazione.
I processori Intel a partire dal pentium 3, e gli
AMD a partire dal K6 - 3, hanno introdotto
nuove istruzioni per questo scopo.
Occorrono quindi altri meccanismi hardware
per accelerare i primi 7 stadi della pipeline.
Queste istruzioni prendono il nome di
estensioni SIMD (single instruction,
multiple data) in quanto permettono di
eseguire piu' calcoli con un'unica istruzione
in linguaggio macchina.
Le estensioni SIMD
Le soluzioni proposte dalle due principali
marche di processori sono differenti e non
sono compatibili tra loro.
Entrambe si basano sullo stesso principio:
facilitare i calcoli vettoriali e matriciali.
Le estensioni SIMD
Le estensioni SIMD
Le istruzioni SIMD permettono di realizzare
con una singola istruzione in linguaggio
macchina una somma o un prodotto
matriciale o vettoriale.
Vengono solamente considerati vettori a 4
componenti e matrici di dimensione 4x4:
quelli necessari per effettuare le
trasformazioni 3D in coordinate omogenee.
Gli standard software
Grazie a queste estensioni si riesce a
velocizzare di un ordine di grandezza i calcoli
necessari nelle prime fasi della pipeline.
Le possibilita' di accelerazione fornite dalle
schede video variano da modello a modello.
In questo modo si possono considerare
anche modelli con migliaia di poligoni ed un
numero elevato di trasformazioni.
Anche i set d'istruzioni per l'accelerazione
fornite dai processori non sono compatibili.
Occorre quindi un meccanismo uniforme per
rendere queste estensioni diponibili ai
programmi.
Gli standard software
Esistono due standard per rendere disponibili
le accelerazioni grafiche ai programmi:
OpenGL
DirectX
OpenGL
OpenGL e' uno standard aperto per la
visualizzazione 3D indipendente dal sistema
operativo, dal linguaggio di programmazione
e dall'architettura utilizzata.
Esiste per Windows e per UNIX, tanto per
PC che per macchine piu' specializzate
(come ad esempio le Silcon Graphics).
DirectX
Le DirectX sono un insieme di primitive
disponibili in ambiente Windows per facilitare
la realizzazione di videogiochi.
Includono primitive per il suono, per la
grafica, l'accesso alla rete, al Joystick....
Direct3D e' la componente delle DirectX
che si occupa della grafica tridimensionale.
Gli standard software
Entrambi i meccanismi si basano sullo stesso
principio: definiscono una serie di
funzionalita' che i programmi possono
utilizzare per realizzare grafica 3D.
Ogni costruttore di scheda grafica o
processore fornisce i suoi driver che
implementano le funzionalita' richieste
sfruttando al meglio le ottimizzazioni messe a
disposizione dai propri prodotti.
OpenGL
Fornisce tutte le primitive necessarie per
inserire oggetti nella pipeline e per
visualizzarli.
Permette di inserire texture, luci e materiali
(di tipo Phong). E' meno efficiente delle
DirectX, ma trova maggiore compatibilità
con sistemi non Windows .
DirectX
Le DirectX esistono solo su PC ed
esclusivamente in ambiente Windows.
Consentono di utilizzare superfici complesse
con texture e vari meccanismi di
illuminazione.
DirectX
Essendo specifiche per Windows, l'hardware
delle schede grafiche e' ottimizzato per la
grafica DirectX.
Sono piu' potenti ed efficienti rispetto all'
OpenGL, ma meno compatibili.