Corso Di Programmazione Grafica per il Tempo Reale
Antialiasing
parzialmente tratto da: Han-Wei Shen
Daniele Marini
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)
2
Aliasing spaziale di linee e di
texture
• Osserviamo aliasing sia su singole linee
o bordi (denti di sega) sia su texture
(moirée)
3
Aliasing temporale
• Si osserva aliasing anche in sequenze
di immagini:
4
Il rendering è un processo di
campionamento
5
Il rendering è un processo di
campionamento
rendere una curva
6
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
7
Alias provocato da sottocampionamento
• una ruota sembra girare in senso
inverso
Osserva solo a 1/4 della frequenza
problema di sotto campionamento
8
Alias provocato da sottocampionamento
• segnale 1D
segnale effettivo
segnale campionato
9
Alias provocato da sottocampionamento
• segnale 2d: moirée
aliasing moderato
aliasing più forte
10
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
11
Se aumentiamo la frequenza
di campionamento?
f=1 rpm
1 campione per rivoluzione
1 < campione/rivoluzione < 2
2 campioni/rivoluzione
> 2 campioni/rivoluzione
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
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?
14
Ricostruzione
• Dopo aver campionato (idealmente)
in modo corretto, dobbiamo ricostruire
il segnale continuo
• Si procede usando filtri di ricostruzione
15
Alcuni filtri di ricostruzione
• Filtri più comuni:
Box - Interpolazione
Nearest neighbour
Filtro a tenda
Interpolazione
lineare
16
Alcuni filtri di ricostruzione
Interpolazione
bicubica
17
Box
• Molto semplice ma non molto buono
18
Filtro triangolare
Lineare
• Basato su interpolazione
lineare. Migliore ma ancora
non smooth
32x32
Nearest neighbor
19
Bicubico
• Filtro passa basso ideale:
nearestneighbor
lineare
bicubica
20
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
21
Ri-campionamento
• Minification e Magnification –
ricampiona il segnale a risoluzioni
diverse
Minification
Magnification
(in questo caso la minificazione è stata fatta male)
22
Magnification
• facile da usare, ricampiona in modo
semplice il segnale da ricostruire
Segnale ricostruito
Ricampionamento a frequenza doppia
del segnale ricostruito
23
Minification
• Raddoppiamo la distanza tra i
campioni
• Si ha un effetto di sfocatura
24
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
25
Tecniche di Antialiasing in tempo
reale
• Tecniche pratiche usate in hardware
grafico
• Lavorano nello spazio schermo
26
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
27
Differenti schemi di
sovracampionamento
• Formula comune:
c(i,x,y): colore del campione i per pixel(x,y); wi: peso
Diversi schemi di sovracampionamento
28
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:
29
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
30
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!
31
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)
32
Quincunx
• Fatti prestare qualcosa dal vicino
• Qualità comparabile al metodo 4x
a metà del costo
33
FLIPQUAD
• Pesi: 0.25 per campione
• Si comporta meglio di
Quincunx
34
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
35
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)
36
Confronto 4X - Quincunx
4X FSAA
4X Quincunx
37
Jittering: ATI TM
SMOOTHVISION
• usa un pattern di
campionamento jittered
• Ogni pixel ha (2x, 4x, 8x)
locazioni di
campionamneto
alternative preprogrammate, jittered.
• Pseudo-random-look (La
visione umana è meno
sensibile a configurazioni
di campionamento
casuali)
Possibili locazioni per
SMOOTHVISION 4x
38
ATI -
TM
SMOOTHVISION
4x multi-sampling
SMOOTHVISION™
2x High-Quality
mode
Quake3 screen shot
39
Scarica

Alias