Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica.

Post on 02-May-2015

213 views 0 download

Transcript of Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica.

Architettura di OGL e pipe-line

Daniele Marini

Corso Di Programmazione Grafica

2

Pipeline - 1

• Funzione principale della pipeline di rendering è generare (renderizzare) un’immagine bidimensionale, dati:– una foto camera virtuale, – oggetti tridimensionali, – sorgenti di luce, – modelli di illuminazione, – texture ed effetti– ecc….

3

Pipeline - 2

• Fasi concettuali:

• Ogni fase può essere a sua volta una pipeline.

• L’elemento della pipeline più lento determina la velocità di rendering (misurata in frames per second, o fps).

Application Geometry Rasterizer

4

Application stage - 1

• E’ sempre implementata via software• Quindi il programmatore ha pieno controllo dell’implementazione

• Non è suddivisa in ulteriori pipeline

• Può essere eseguita in parallelo su numerosi processori per aumentare le prestazioni

5

Application stage - 2

• Processi normalmente considerati e implementati in questa fase:– Collision detection– Input da joystick, tastiera, mouse, ecc….

– Geometry morphing, animazione via trasformazioni, ecc…..

– Algoritmi di accelerazione

• Alla fine di questi processi la geometria viene inviata allo stadio successivo.

6

Geometry stage

• In questa fase viene eseguita la maggior parte di operazioni sui poligoni e sui vertici.

• E’ normalmente suddivisa in questo modo:Applic Geom Rast

Model and View

TransformLighting Projection Clipping

ScreenMapping

7

Model and View Transform - 1

• In questa fase vengono applicate le trasformazioni ai vertici e alle normali della geometria passata dall’ Application stage.

• Dopo l’applicazione delle trasformazioni, si dice che la geometria è descritta in coordinate mondo (world coordinates).

8

Model and View Transform - 2

• In questa fase vengono applicate anche le trasformazioni di vista.

• Lo scopo è facilitare le proiezioni e il clipping, posizionando la camera virtuale nell’origine e facendola guardare lungo l’asse negativo delle z (prospettiva canonica).

• Dopo l’applicazione di queste trasformazioni, si dice che la geometria è descritta in coordinate occhio o camera (camera coordinates o eye coordinates).

9

Lighting and Shading

• In questa fase normalmente vengono applicati modelli di illuminazione che cercano di simulare l’interazione tra luce e materiali dei modelli della scena.

• In grafica real-time vengono utilizzati normalmente modelli di illuminazione locali, che calcolano il colore di un vertice considerando il materiale dell’oggetto, la posizione del vertice e la sua normale, e la posizione della luce.

10

Projection - 1

• In questa fase il volume di vista viene trasformato in un cubo con estremi in: (-1,-1,-1) e (1,1,1) , chiamato volume di vista canonico.

• Esistono due tipi di proiezione:– Ortografica (o parallela): il volume di vista è un parallelepipedo, linee parallele rimangono parallele.

– Prospettica: il volume di vista è un tronco di piramide a base rettangolare (frustum), linee parallele possono convergere all’orizzonte.

11

Projection - 2

• Proiezione ortografica

12

Projection - 3

• Proiezione prospettica

13

Projection - 4

• Le proiezioni, come le trasformazioni di modellazione e di vista, sono rappresentate da matrici 4x4.

• Dopo l’applicazione della proiezione, si dice che la geometria è descritta in coordinate dispositivo normalizzate (normalized device coordinates).

14

Clipping

• Solo le primitive interamente o parzialmente dentro il volume di vista devono essere passate al rasterizer stage.

• Le primitive in parte dentro il volume vanno clippate per eliminare le parti fuori dal volume.

15

Screen mapping

• Questa fase consiste nel mappare le coordinate tridimensionali (x,y,z) dei vertici nel cubo di lato unitario in coordinate bidimensionali (x’,y’) della finestra sullo schermo.

• Le coordinate z non sono modificate.• Le coordinate (x’,y’) sono dette coordinate schermo (screen coordinates).

• Le coordinate schermo insieme alle coordinate z sono dette coordinate finestra (window coordinates)

16

Riassunto coordinate Model and

ViewTransform

Lighting Projection ClippingScreen

Mapping

World Coord.3D

World Coord.4D (Omogenee)

Normalized DeviceCoord.

4D (Omogenee)

Window Coord.2D

(x’,y’) coordinate schermo+ coordinata z di profondità

mantenuta a parte

17

Rasterizer stage - 1

• Scopo di quest’ultima fase è assegnare il colore corretto ai pixel dell’immagine finale, memorizzati nel color buffer.

• In questa fase si risolve il problema della visibilità: le coordinate z (memorizzate nello Z-buffer) dicono, per ogni pixel, quale primitiva è più “vicina” rispetto alle altre, e quindi qual è il colore da assegnare.

• Vengono anche calcolate le informazioni relative alle texture.

18

Rasterizer stage - 2

• Altri buffer possono essere utilizzati in questa fase per effettuare operazioni sui pixel:– Alpha channel, per effetti di trasparenza

– Stencil buffer, per vari effetti come ombre e riflessioni

– Accumulation buffer, per altri effetti come il motion blur.

• Alla fine di queste operazioni, l’immagine può essere visualizzata.

19

La pipeline di OGL

pixel data

vertex data

display list

pixel operation

evaluator

rasterization per vertex op& primitiveassembly

textureassembly

per fragmentoperation

framebuffer

genera vertici da spline

trasformazionianche su texture

clipping,proiezioneprospettica

organizzatexture mappingsfrutta memorialocale x texture

possono essereriletti da FBoperazioni su gruppi di pixel

(BitBlt)

no DLimmediate

mode

effetti fogdithering

hiddden surfacemasking ...

20

Display List

• Tutti i dati (geometria o pixel di texture) sono salvate in una display list

• Se la display list non viene usata si opera in modalità immediata, cioè i dati sono processati immediatamente

21

Evaluator

• Tutte le primitive geometriche sono in ultima analisi descritte da vertici. Curve parametriche possono essere definite da punti di controllo e funzioni polinomiali (funzioni base). I vertici vengono ricavati dalla valutazione della curva parametrica.

• Fornisce anche normali, coordinate texture, colori e valori di coordinate spaziali di vertici dai punti di controllo

22

Per-vertex operation

• I vertici vengono convertiti nello spazio omogenee 4D

• Viene calcolata la proiezione prospettica• Se le texture sono attivate vengono generate le coordinate texture e traformate per la proiezione

• Se il modello di illuminazione è abilitato viene calcolato in questa fase, usando coordinate, normali, posizione delle sorgenti di luce, proprietà dei materiali per calcolare il colore

23

Primitive assembly

• La parte prevalente dell’assemblaggio delle primitive è il clipping

• Il clipping di linee può generare nuovi vertici in corrispondenza dell’intersezione con i piani limite del frustum di visione

• Viene eseguita la divisione per la componente w ritornando nello spazio 3D

• Si applica la trasformazione window-to-viewport

• Se il face culling è abilitato si escludono le facce autonascoste

24

Pixel operation

• I pixel dall’immagine di input vengono spacchettati in funzione del formato di ingresso

• I dati sono scalati e rinormalizzati• Se i pixel sono letti dal frame buffer vengono ancora riscalati e rinormalizzati

• Vengono gestiti anche i caratteri• Il risultato viene trasferito al frame buffer, alla memoria texture o alla memoria centrale

25

Texture assembly

• Le texture vengono applicate alla geometria

26

Rasterization

• I dati geometrici e i pixel vengono convertiti in fragments

• Ogni fragment (quadrato) corrisponde a un pixel finale

• Se la conversione riguarda linee si applica l’antialiasing

• Se la conversione riguarda poligoni si applica il colore derivante dal modello di illuminazione

• Ogni fragment conserva l’informazione di profondità

27

Fragment operation

• Al fragment viene associato un texel, elemento di texture calcolato in precedenza

• Se previsto si calcola l’effetto nebbia

• Si calcola alpha test per effetti di trsparenza, stencil test per effetti di mascheratura (es. ombre) e lo depth buffer test (z-buffer) per la rimozione delle facce nascoste

• Alla fine il fragment viene scritto nel frame buffer