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

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

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.

Antialiasing

parzialmente tratto da: Han-Wei Shen

Daniele Marini

Corso Di Programmazione Grafica

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

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.

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.

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.

5

Il rendering è un processo di campionamento

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

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.

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.

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.

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.

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.

11

Alias e spettro

• Si può comprendere il fenomeno dell’aliasing considerando che lo spettro di un segnale a supporto finito si ripete periodicamente

• Se la frequenza di campionamento è inferiore alla frequenza massima del segnale queste ripetizioni si sovrappongono nelle code

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

12

Se aumentiamo la frequenza di

campionamento?

f=1 rpm

1 campione per rivoluzione

1 < campione/rivoluzione < 2

2 campioni/rivoluzione

> 2 campioni/rivoluzione

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

13

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 14: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica.

14

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 15: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica.

15

Ricostruzione

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

• Si procede usando filtri di ricostruzione

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

16

Alcuni filtri di ricostruzione

• Filtri più comuni: Box - InterpolazioneNearest neighbour

Filtro a tendaInterpolazionelineare

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

17

Alcuni filtri di ricostruzione

Interpolazionebicubica

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

18

Box

• Molto semplice ma non molto buono

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

19

Filtro triangolare

• Basato su interpolazione lineare. Migliore ma ancora non smooth

32x3232x32

Nearest neighborNearest neighbor

LineareLineare

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

20

Bicubico

• Filtro passa basso ideale:

nearestneighbor

lineare

bicubica

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

21

Ricampionamento

• 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 22: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica.

22

Ri-campionamento

• Minification e Magnification – ricampiona il segnale a risoluzioni diverse

Magnification

Minification

(in questo caso la minificazione è stata fatta male)

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

23

Magnification

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

Segnale ricostruito Ricampionamento a frequenza doppia del segnale ricostruito

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

24

Minification

• Raddoppiamo la distanza tra i campioni

• Si ha un effetto di sfocatura

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

25

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 26: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica.

26

Tecniche di Antialiasing in tempo reale

• Tecniche pratiche usate in hardware grafico

• Lavorano nello spazio schermo

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

27

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 28: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica.

28

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 29: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica.

29

Campionamento perturbato (Jittered)

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

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

– Questo dà anche luogo a oscilazioni ai bordi

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

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

30

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 31: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica.

31

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 necessario (test di profondità)

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

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

32

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 )

• Il campione centrale viene sovrapesato (pixel di centro= 0.5, pixel d’angolo = 4*0.125=0.5)

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

33

Quincunx

• Fatti prestare qualcosa dal vicino

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

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

34

FLIPQUAD

• Pesi: 0.25 per campione

• Si comporta meglio di Quincunx

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

35

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 36: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica.

36

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 37: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica.

37

Confronto 4X - Quincunx

4X FSAA 4X Quincunx

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

38

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 39: Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica.

39

ATI - SMOOTHVISIONTM

Quake3 screen shot

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