27
Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

Embed Size (px)

Citation preview

Page 1: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

Architettura di OGL e pipe-line

Daniele Marini

Corso Di Programmazione Grafica per il Tempo Reale

Page 2: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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….

PGTR aa 2010/2011

Page 3: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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

PGTR aa 2010/2011

Page 4: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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

PGTR aa 2010/2011

Page 5: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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.

PGTR aa 2010/2011

Page 6: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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

PGTR aa 2010/2011

Page 7: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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).

PGTR aa 2010/2011

Page 8: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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).

PGTR aa 2010/2011

Page 9: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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.

PGTR aa 2010/2011

Page 10: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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.

PGTR aa 2010/2011

Page 11: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

11

Projection - 2

• Proiezione ortografica

PGTR aa 2010/2011

Page 12: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

12

Projection - 3

• Proiezione prospettica

PGTR aa 2010/2011

Page 13: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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).

PGTR aa 2010/2011

Page 14: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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.

PGTR aa 2010/2011

Page 15: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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)

PGTR aa 2010/2011

Page 16: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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

PGTR aa 2010/2011

Page 17: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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.

PGTR aa 2010/2011

Page 18: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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.

PGTR aa 2010/2011

Page 19: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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 ...

PGTR aa 2010/2011

Page 20: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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

PGTR aa 2010/2011

Page 21: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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

PGTR aa 2010/2011

Page 22: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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

PGTR aa 2010/2011

Page 23: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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

PGTR aa 2010/2011

Page 24: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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

PGTR aa 2010/2011

Page 25: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

25

Texture assembly

• Le texture vengono applicate alla geometria

PGTR aa 2010/2011

Page 26: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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à

PGTR aa 2010/2011

Page 27: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica per il Tempo Reale

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

PGTR aa 2010/2011