Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

18
Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini

Transcript of Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

Page 1: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

Pipeline di Rendering

Corso di Programmazione Grafica e Laboratorio

Daniele Marini

Page 2: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

Pipeline - 1

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

Page 3: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

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

Page 4: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

Application stage - 1

• E’ sempre implementata via software

• Quindi il programmatore ha pieno controllo dell’implementazione

• Non è suddidivisa in ulteriori pipeline

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

Page 5: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

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

Page 6: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

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

Page 7: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

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

Page 8: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

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.

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

Page 9: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

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

Page 10: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

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.

Page 11: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

Projection - 2

• Proiezione ortografica

Page 12: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

Projection - 3

• Proiezione prospettica

Page 13: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

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

Page 14: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

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.

Page 15: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

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)

Page 16: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

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

Page 17: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

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) mi dicono per ogni pixel quale primitiva sia più “vicina” rispetto alle altre, e quindi quale sia il colore da assegnare.

• Vengono anche calcolate le informazioni relative alle texture.

Page 18: Pipeline di Rendering Corso di Programmazione Grafica e Laboratorio Daniele Marini.

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 effetti di motion blur.

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