Daniele Banovaz
30 maggio 2006
Elementi di Grafica Digitale, A.A. 2005-2006
Stencil Shadows
L’importanza delle ombre
• La resa efficace delle ombre è un elemento importante
per agevolare la percezione della profondità all’interno di
scene 3D, e, in certi casi, essa rappresenta l’unico
riferimento per comprendere a colpo d’occhio il
posizionamento relativo di oggetti disgiunti.
• La volontà di aumentare il fotorealismo in videogames,
ambienti virtuali ed altre applicazioni grafiche interattive
ha dato vita a numerosi algoritmi per la resa ed il
perfezionamento di ombre realistiche; le due tecniche
maggiormente utilizzate sono Shadow Maps e Stencil
Shadows Volumes.
Shadow Maps
(Lance Williams, 1978)
• Tecnica pensata per essere semplice, generale ed
efficiente, nelle applicazioni in tempo reale è pienamente
supportata in HW e risulta computazionalmente molto
veloce; tuttavia la quantità di memoria presente sulle
schede video risulta ancora troppo bassa per una resa
“pulita” e senza artefatti.
• In particolare, per la dipendenza stretta del metodo da
rasterizzazione e proiezione prospettica della mappa
d’ombra, sono inevitabili nelle applicazioni odierne dei
forti fenomeni di aliasing delle silhouettes; tuttavia vi
sono in corso numerosi studi per l’eliminazione del
fenomeno sui piani d’interesse (in particolare Chong and
Gortler, 2004).
Shadow Maps passo passo
Un caso d’uso attuale: CoD2
Volume Shadows
(Frank Crow, 1977)
• Questa tecnica e le sue derivate si basano
sulla ricostruzione dei volumi d’ombra che
si stagliano dagli oggetti illuminati
(“shadow casters”)
• Vi sono differenti metodologie che
differiscono in accuratezza e velocità di
calcolo, che tuttavia partono da una base
comune: la generazione dei volumi.
Generazione dei volumi
• Tale procedimento si compone dei seguenti passi:
- Individuazione dei silhouette edges, cioè gli spigoli di
separazione tra facce illuminate (front-facing faces) e facce in
ombra (back-facing faces); tale procedimento, che per modelli
complessi risulta computazionalmente dispendioso, nelle
applicazioni real time viene approssimato, sia per esigenze di
velocità, sia per la frequente mancanza di spigoli separatori
ideali in modelli “low-poly count”.
- Definizione dei volumi: gli spigoli individuati vengono estesi in
direzione opposta alla luce a formare dei quadrilateri.
- Eventuale chiusura dei volumi, utilizzata in tecniche avanzate
come lo Zfail o in qualche correzione dello Zpass.
Le prime implementazioni
• La prima tecnica per la resa delle ombre
attraverso gli Shadow Volumes è la
ExclusiveOR: lo stencil buffer viene riempito
pixel per pixel invertendo il valore per ogni
volume che passa lo Z-test.
• Questa implementazione, che richiede un solo
passo addizionale, è molto veloce ma presenta
moltissime imperfezioni, tra cui l’annullamento
dell’ombra nelle intersezioni tra i volumi ed il
problema, comune allo Zpass, del near clipping
plane.
Zpass
• La tecnica più diffusa negli anni precedenti è
rappresentata dallo Zpass: un algoritmo relativamente
semplice e non esente da difetti.
• A differenza dell’ExclusiveOR, lo Zpass utilizza uno
stencil buffer con più bit per pixel, nei quali conteggia gli
attraversamenti di volumi; i passi assomigliano a quelli
che compongono il metodo precedente, cambia ciò che
viene salvato sullo stencil buffer: le facce front-facing
incrementano il valore, mentre le back-facing lo
decrementano. Valori finali diversi da zero indicano che
la zona è in ombra.
Zpass
1.
2.
3.
4.
•
Rendering della scena utilizzando
solo luci ambientali
Rendering delle facce front-facing
sullo stencil buffer: se passano il
depth test i pixel corrispondenti
vengono incrementati.
Rendering delle facce back-facing
sullo stencil buffer: se passano il
depth test i pixel corrispondenti
vengono decrementati.
Viene eseguito il rendering della
scena complessiva con diffuse e
specular lightening solo nelle aree
in cui lo stencil buffer vale zero.
Nella figura risulta evidente il problema più grosso di questo approccio: il
near clipping plane. Tale piano infatti, tronca i volumi d’ombra vicini
all’osservatore, escludendoli dal conteggio nello stencil buffer. Ne
risultano zone erroneamente in ombra o illuminate qualora lo shadow
volume si trovi ad attraversare questo piano.
Zfail
• Nel tentativo di porre rimedio agli artefatti causati dal
near plane, svariati studi giungono a definire un
approccio inverso, che considera i volumi che falliscono
il depth-test. L’implementazione più consistente di
questo robusto metodo nasce con l’engine di Doom III,
ad opera di John Carmack (da cui l’altro nome con cui è
noto lo Zfail: “Carmack’s Reverse”).
• Tale metodo sposta il problema dal near al far plane,
dove può essere aggirato estendendo il piano e la
proiezione del “dark cap” lungo il volume d’ombra a un
“homogeneus infinity” (Everitt and Kilgard, 2002).
Zfail
0.
•
•
•
•
•
Chiusura dei volumi d’ombra alle
estremità.
Rendering della scena utilizzando solo
luci ambientali
Rendering delle facce front-facing sullo
stencil buffer: se falliscono il depth
test i pixel corrispondenti vengono
decrementati.
Rendering delle facce back-facing sullo
stencil buffer: se falliscono il depth
test i pixel corrispondenti vengono
incrementati.
Viene eseguito il rendering della scena
complessiva con diffuse e specular
lightening solo nelle aree in cui lo
stencil buffer vale zero.
Questo metodo, più robusto del precedente, risulta anche più lento, in
quanto è necessario calcolare la geometria per “chiudere” i volumi e,
inoltre, viene escluso da alcune ottimizzazioni che per loro natura
escluderebbero immediatamente le geometrie che falliscono il depth test.
Zfail: Doom III
Il futuro dello Zpass: ZP+
• Come specificato in precedenza, lo Zpass processa gli shadow
volumes in maniera efficiente ma scorretta nel caso di intersezione
con il near clipping plane: vi sono molti metodi per “tappare” i volumi
troncati, ma tutti molto poco efficienti e soggetti ad altri artefatti
dovuti soprattutto ad imprecisione aritmetica. L’unica alternativa
robusta è data dallo Zfail, ma a costo di una maggior complessità
elaborativa e del sacrificio dell’accelerazione data dall’early depth
culling dei volumi d’ombra coperti al punto di vista.
• Una soluzione a questo problema è la promettente tecnica del
Correct Zpass, altrimenti detto ZP+. Questo metodo, proposto nel
2004 da Samuel Hornus, Jared Hoberock, Sylvain Lefebvre e John
Hart, riprende l’approccio seguito dallo Zpass, utilizzando un
procedimento analogo alle shadow maps per inizializzare lo stencil
buffer definendo al contempo delle chiusure perfette per i volumi
troncati.
L’innovazione del ZP+
•
•
•
Al posto di calcolare complesse geometrie di
chiusura, spesso disallineate e responsabili
di “crepe” nelle ombre, questo sistema
prevede una fase di inizializzazione dello
stencil buffer, in cui il punto di vista viene
spostato sulla luce ed il far clipping plane
viene fatto coincidere con il near del punto di
vista dell’osservatore.
La rasterizzazione attribuisce alle facce
frontali un incremento dello stencil buffer ed
alle altre un decremento.
Alla fine di questa fase di inizializzazione, il
punto di vista ritorna quello dell’osservatore,
e viene eseguito un normale Zpass: dal
momento che il buffer è già inizializzato con i
valori dei volumi tra osservatore e near
clipping plane, si evitano i problemi dei
volumi tronchi.
Performances
• Lo Zpass semplice rimane il metodo più
performante, ma presenta errori inammissibili; il
confronto viene invece eseguito tra i ben più
robusti Zfail e ZP+.
• I risultati, su HW di 2 anni fa, mettono in
evidenza come lo Zfail sia estremamente
compromesso dall’aumentare della complessità
dei modelli, e possa risultare più lento anche
dell’80% rispetto allo Zpass.
• Lo ZP+ invece, si attesta ad ottimi valori, che
ricalcano gli andamenti dello Zpass pur
rimanendo più lento di circa il 10%.
Decremento di prestazioni (%) rispetto allo Zpass
twisted torus
(12.000 tr)
head
(20.222 tr)
pregnant woman
(83.666 tr)
--- : Zfail
--- : ZP+
Perché ZP+ è più veloce
1. ZP+ non ha bisogno del “dark cap” all’infinito, mentre lo Zfail deve
fare il rendering degli “occluders” due volte.
2. Zfail non può trarre beneficio dalle “batched geometry” (per es.
triangle strips), perché non supportano la classificazione dei vertici
come appartenenti a dark o light cap.
3. Dal momento che la dimensione del light frustum è molto inferiore a
quella del camera frustum, la percentuale di geometria scartata con
il culling nello Zpass è molto più alta rispetto allo Zfail: anche le
“chiusure” delle geometrie non troncate dal near plane devono
essere calcolate manualmente nello Zfail, mentre lo ZP+,
eseguendo il rendering nel light frame, può avvalersi del culling HW.
4. Infine, lo Zfail non può godere dei benefici apportati dall’early depth
culling, che nell’intento di ridurre il prima possibile la complessità
geometrica escluderebbe poligoni rilevanti per il calcolo delle ombre.
Bibliografia
•
ZP+: Correct Z-pass Stencil Shadows, (Samuel Hornus, Jared Hoberock, Sylvain Lefebvre, John Hart)
(http://artis.imag.fr/Publications/2005/HHLH05/hhlh-zp-plus.pdf)
•
Stencil Shadow Volumes, (oZone3D Tutorials, http://www.ozone3d.net/tutorials/stencil_shadow_volumes.php)
•
John Carmack - E-mail to private list (2000). Published on the NVIDIA website.
•
Specifiche nVidia UltraShadow (fonte: nVidia) (http://www.nvidia.com/attach/63050?type=support&primitive=0)
•
Specifiche nVidia UltraShadow II (Tom’s Hardware Italia)
(http://www.tomshw.it/graphic.php?guide=20040414&page=feforce_6800-13#ultra_shadow_ii)
•
Wikipedia:
–
–
–
–
•
Shadow mapping (http://en.wikipedia.org/wiki/Shadow_mapping)
Shadow volume (http://en.wikipedia.org/wiki/Shadow_volume)
Stencil shadow volume (http://en.wikipedia.org/wiki/Stencil_shadow_volume)
Silhouette edge (http://en.wikipedia.org/wiki/Silhouette_edge)
…altri siti di cui ho perso i riferimenti…
Scarica

Banovaz - Stencil Shadows