Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica...

37
Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006

Transcript of Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica...

Page 1: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Antialiasing

parzialmente tratto da: Han-Wei Shen

Daniele Marini

Corso Di Programmazione Grafica aa2005/2006

Page 2: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 2

Cos’è un alias?

• Alias - In telecomunicazione un falso segnale dovuto a interferenza tra frequenza del segnale e frequenza di campionamento – aliasing c’è ovunque in computer graphics poichè il rendering è un processo di campionamento

– Esempi: • linee a dente di sega (jagged lines)• false tramature di texture (moirée)

Page 3: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 3

Aliasing spaziale di linee e di texture

• Osserviamo aliasing sia su singole linee o bordi (denti di sega) sia su texture (moirée)

Page 4: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 4

Aliasing temporale

• Si osserva aliasing anche in sequenze di immagini:

Page 5: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 5

Il rendering è un processo di campionamento

Page 6: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 6

Il rendering è un processo di campionamento

rendere una curva

Page 7: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 7

Veloce rassegna di campionamento di segnali

• Due passi nella rappresentazione digitale di un segnale: campionamento e ricostruzione– Campionamento: da segnale continuo a campioni discreti– Ricostruzione: dai valori discreti al segnale continuo

• Aliasing può derivare da entrambi i passaggi

Page 8: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 8

Alias provocato da sotto-campionamento

• una ruota sembra girare in senso inverso

Osserva solo a 1/4 della frequenza

problema di sotto campionamento

Page 9: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 9

Alias provocato da sotto-campionamento

• segnale 1D

segnale effettivosegnale campionato

Page 10: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 10

Alias provocato da sotto-campionamento

• segnale 2d: moirée

aliasing moderato aliasing più forte

Page 11: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 11

Se aumentiamo la frequenza di

campionamento?

f=1 rpm

1 campione per rivoluzione

1 < campione/rivoluzione < 2

2 campioni/rivoluzione

> 2 campioni/rivoluzione

Page 12: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 12

Quanto basta?

• qual’è la giusta frequenza di campionamento?

• teorema del campionamento (o limite di Nyquist) - la frequenza di campionamento deve essere almeno doppia della massima frequenza del segnale

due campioni in questo periodo

Page 13: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 13

Si può evitare totalmente aliasing

• Dato il limite di Nyquist ?• In realtà no – la frequenza massima potrebbe essere infinita, segnale non limitato in banda

• La maggior parte delle scene grafiche non sono bandlimited: bordi netti non possono mai venire campionati correttamente in modo digitale (point sampling)

• Come si può correggere o limitare l’aliasing?

Page 14: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 14

Ricostruzione

• Dopo aver campionato (idealmente) in modo corretto, dobbiamo ricostruire il segnale continuo

• Si procede usando filtri di ricostruzione

Page 15: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 15

Filtri di ricostruzione

• Filtri più comuni:

Box Filtro a tenda

Sinc = sin(x)/x

Page 16: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 16

Box

• Molto semplice ma non molto buono

• Si chiama anche nearest neighbor

Page 17: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 17

Filtro triangolare

• Basato su interpolazione lineare. Migliore ma ancora non smooth

32x3232x32

Nearest neighborNearest neighbor

LineareLineare

Page 18: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 18

Sinc

• Filtro passa basso ideale:

nearestneighbor

lineare

bicubica

Page 19: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 19

Ricampionamento

• Allargare o ridurre il segnale• Supponiamo che i campioni siano a intervalli unitari: 0,1,2,3,4,…

• Ricampionare in modo che la loro distanza valga a– a< 1 produce magnification– a>1 produce minification

Page 20: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 20

Ri-campionamento

• Minification e Magnification – ricampiona il segnale a risoluzioni diverse

Magnification

Minification

(in questo caso la minificazione è stata fatta male)

Page 21: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 21

Magnification

• facile da usare, ricampiona in modo semplice il segnale da ricostruire

Segnale ricostruito Ricampionamento a frequenza doppia del segnale ricostruito

Page 22: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 22

Minification

• Raddoppiamo la distanza tra i campioni

• Si ha un effetto di sfocatura

Page 23: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 23

Minification

• Più difficile• La frequenza del segnale è troppo alta per evitare aliasing

• Soluzioni possibili: – Accresci l’ampiezza del filtro passa basso del filtro ideale sinc - sfoca l’immagine

– Prima sfoca l’immagine (con qualunque metodo), poi ricampionala

Page 24: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 24

Tecniche di Antialiasing in tempo reale

• Tecniche pratiche usate in hardware grafico

• Lavorano nello spazio schermo

Page 25: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 25

Algoritmi basati su spazio schermo

• Approccio comune: campiona più fittamente la scena e calcola la media (sovracampionamento)

• È più difficile: i bordi hanno infinite frequenze

idea risultato

Page 26: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 26

Differenti schemi di sovracampionamento

• Formula comune: c(i,x,y): colore del campione i per

pixel(x,y); wi: peso

Diversi schemi di sovracampionamento

Page 27: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 27

Campionamento perturbato (Jittered)

• Il campionamneot regolare non può eliminare l’aliasing, può solo ridurlo!

• Perché ?• Poiché i bordi richiedono la presenza di alte frequenze infinite

• Jittering rimpiazza l’aliasnig con rumore• Si usa nel ray tracing• Esempio:

Page 28: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 28

Tecniche di multicampionamneto con A-

buffer• Prende >1 campione / pixel, suddivide la computazione tra campioni entro il pixel– Lighting– Texturing

• Fattori di forza: aliasing dei bordi e accurato trattamento della trasparenza

Page 29: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 29

A-buffer

• Per trattare meglio i bordi si usa una maschera di ricoprimento per pixel

• La maschera di ricoprimento, la profondità e il colore costituiscono un fragment

• Durante il rendering i fragment possono esser scartati quando possibile (test di profondità)

• Quando tutti i poligoni sono stati resi, i fragment vengono fusi in un solo colore visibile– Costa in memoria!

Page 30: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 30

Multicampionamento: Quincunx

• Genera 2 campioni per pixel• w1=0.5, w2=0.125, w3=0.125, w4=0.125, w5=0.125 (filtro triangolare 2D )

• Tutti i pixel producono lo stesso effetto sull’immagine (pixel di centro= 0.5, pixel d’angolo = 4*0.125=0.5)

Page 31: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 31

Quincunx

• Fatti prestare qualcosa dal vicino

• Qualità comparabile al metodo 4x a metà del costo

Page 32: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 32

FLIPQUAD

• Pesi: 0.25 per campione• Si comporta meglio di

Quincunx

Page 33: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 33

FSAA (full screen anti-aliasing)

• Rendi la scena a una risoluzione molto più alta poi fanne la media

• Nvidia GeForce 2: usa ordered grid supersampling (OGSS)

• 3dfx voodo 5: rotated grid supersampling (RGSS) – elimina meglio alias

• 2x or 4x: numero di subpixels per ciascun pixel

• Costoso: l’intera scena può dover essere resa più volte!

OGSS

RGSS

Page 34: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 34

Multisampling AA

• Nvidia GeForce3 – per accrescere performance

• 2x RGSS e 4x OGSS • Non si inviano più texture per subpixels – usa la stessa texture di colore per i subpixels

• Usata solo sui pixel di contorno – GPU ha più intelligenza (è la maggiore differenza dal sovra campionamento)

Page 35: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 35

Confronto 4X - Quincunx

4X FSAA 4X Quincunx

Page 36: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 36

Jittering: ATI - SMOOTHVISIONTM

• usa un pattern di campionamento jittered

• Ogni pixel ha (2x, 4x, 8x) locazioni di campionamneto alternative pre-programmate, jittered.

• Pseudo-random-look (La visione umana è meno sensibile a configurazioni di campionamento casuali)

Possibili locazioni perSMOOTHVISION 4x

Page 37: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Programmazione Grafica aa2005/2006 37

ATI - SMOOTHVISIONTM

Quake3 screen shot

4x multi-sampling SMOOTHVISION™ 2x High-Quality mode