1
Effetti impressionistici
Daniele Marini
2
• Tecniche discrete di manipolazione del frame buffer:– Texture mapping– Antialiasing– Compositing– Alpha blending– Tone reproduction (correzione gamma,
correzione colori)
3
• riprodurre fedelmente la realtà: es. dell’arancia, costruire un modello accurato:– Modello poliedrico– Modello spline– Modello procedurale/funzionale
• Approssimare la realtà con metodi “impressionistici” - aggiungere dettagli a un modello semplice
4
• Scomporre la superficie da rendere in “frammenti” fragments della dimensione al più di un pixel; durante il rendering a ogni fragment si assegna il colore seguendo il modello di illuminazione scelto e modificandolo secondo una qualche regola:– Texture mapping --> usa una texture– Bump mapping --> perturba le normali– Environmental mapping --> simula riflessioni– …..
5
Fragments
• Le primitive sono rasterizzate e convertite in una immagine 2D. Rasterizzare vuol dire decidere quali quadrati di una griglia a valori interi in coordinate window sono occupati dalla primitiva, e assegnare un colore e altri valori
• Un quadrato della griglia con associati i valori di colore e profondità è chiamato fragment frammento
• Un frammento è un pixel “virtuale”
• I Pixel sono elementi del frame buffer; un frammento, che proviene da operazioni di rasterizzazione di una primitiva, viene combinato con il suo pixel corrispondente per produrre un nuovo pixel
6
Fragments
• Quando il frammento è stato costruito si può applicare: texturing, nebbia, antialiasing se sono inclusi nella descrizione del frammento
• Fatto ciò si possono applicare: alpha blending, dithering, operazioni logiche bit per bit (maschere, ..), usando il frammento e il pixel già inserito nel framebuffer
• Infine il valore di colore del frammento (indice in LUT o quaterna RGBA) viene scritto nel pixel e visualizzato nella window usando la modalità di colore scelta.
7
Dithering
• Se la profondità di colore è limitata, si approssima la gamma dei colori attraverso con il dithering (esitare, tremare).
• alternando il colore di pixel adiacenti si ottengono le sfumature desiderate, visibili da una certa distanza
• l'occhio non è in grado di distinguere i piccoli punti singolarmente, ma coglie solo l'effetto d'insieme.
• tecnica di riproduzione dei colori a stampa con i retini
8
Dithering
9
Dithering
• errore cromatico: differenza tra il valore esatto del colore del pixel e quello più vicino, data una profondità di colore
• Il dithering compensa l’errore cromatico distribuendo la differenza sui pixel confinanti con il pixel considerato
10
Dithering
• algoritmo di Floyd-Steinberg: distribuisce l'errore cromatico sui pixel confinanti: – 7/16 assegnati al pixel a EST, – 5/16 al pixel SUD, – 3/16 al pixel SUD-OVEST, – 1/16 al pixel SUD-EST
11
Alpha blending
• Senza blending ogni nuovo frammento sovrascriverebbe il colore già presente nel framebuffer come se il frammento fosse opaco
• Con il blending si può controllare quanta parte del colore esistente deve venir combinato col colore nel nuovo frammento
• alpha blending permette di creare un frammento trasparente, “attraverso il quale” si può vedere il colore già presente
• Compositing, painting e trasparenza si basano sul blending.
12
Compositing
• Una immagine di sintesi può essere il prodotto del rendering di molteplici elementi, per ciascuno dei quali si costruisce una immagine
• Il compositing mette assieme le diverse immagini per creare la scena completa
13
Compositing - alpha blending
• Alpha blending richiede alfa channel RGB• Il quarto canale alfa contiene il valore di
blending• Trasparente: =0; • opaco: =1
– Pixel sorgente: s=(sr,sg,sb,sa) – pixel destinazione: d=(dr,dg,db,da) – compositing: d’=(brsr+crdr, …) – dove b e c sono i fattori di blending del pixel
sorgente e pixel destinazione
14
• L’ordine con cui viene eseguito il compositing influenza il risultato
glEnable(GL_BLEND)
glBlendFunc(source_factor, destination_factor)
Date n immagini da comporre con blending, al pixel i ogni immagine ha un colore Cii Sommando con blending le immagini si supera il valore di coloreSi sostituisce Ci con 1/n Ci e i con 1/n i
15
Correzione del gamma
• Una variazione lineare dello stimolo produce una variazione logaritmica della sensazione percepita
• I monitor sono costruiti seguendo questo principio: un incremento della tensione di controllo produce un incremento logaritmico della intensità dell’emissione
• Il gamma si può correggere con LUT
16
gamma
• Due monitor diversi producono immagini diverse
• Due problemi: calibrazione e riproduzione dei toni
varia, tipici valori sono 1.5, 2, 2.5
logI c0 logV
I c V
17
18
Aliasing e anti aliasing
• Prodotto da insufficiente frequenza di campionamento
19
20
• Possiamo campionare in posizioni regolari al centro del pixel:
21
• Profili seghettati
• Perdita di dettagli
• Scomparsa della texture
22
• Filtraggio: sovracampionare il segnale
23
• Per ogni pixel si prende la media pesata del vicinato dei sovracampioni:
24
• In OGL si può attivare anti aliasing di punti, linee e poligoni con:
glEnable(GL_POINT_SMOOTH);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_POLYGON_SMOOTH);
• Si può attivare anti aliasing con blending e compositing:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONES_MINUS_SRC_ALPHA);
Top Related