Daniele Marini
Modelli di illuminazione globali: ray
tracing
Introduzione
•  Ad oggi abbiamo visto modelli locali in cui le primitive
sono trattate in modo indipendente le une dalle altre
in base a:
–  Proprietà della primitiva
–  Posizione della camera/osservatore
–  Posizione delle luci
•  Vantaggi: semplicità, parallelizzazione, costo costante
per primitiva
Ray tracing e scan conversion
for each triangle in scene…
•  Nella scan conversion (pipeline grafica) considero i
poligoni uno alla volta e li proietto sull immagine
•  Eseguo la discretizzazione alla fine
A.vanDam
Modelli locali
I = I a ka + ∑m f att I p [kd n ⋅ l + k s (r ⋅ v) n ]
!
%
$
# %
"$"
#
ambiente
diffusa
v
r
n
θ θ l
speculare
•  Non mi serve conoscere l intera scena
•  La componente di luce ambiente è una
approssimazione dell illuminazione gobale
•  Il modello di Phong descrive le superfici glossy
Modelli locali
•  Il modello di Lambert e quello di Phong sono
approssimazioni della BDRF
Lr (θ r , φr ) = ∫ f r (θ i , φi ,θ r , φr )dLi (θ i , φi ) cosθ i dωi
Ω
Limitazioni dei modelli locali
•  Ombre portate: il modello locale non calcola le ombre
•  Non riesco a rappresentare l effetto che il colore di
una superficie ha sulle superfici adiacenti (interriflessione, color bleading)
Cosa vogliamo ottenere ?
•  Il calcolo delle ombre
•  La riflessione speculare tra gli oggetti
–  Nei modelli locali la riflessione è solo tra superficie e sorgente
di illuminazione
•  La riflessione diffusiva tra gli oggetti nella scena
(inter-riflessione)
Modelli globali
•  Paradigmi di rendering basati sull effetto complessivo
della scena
•  La luce non proviene direttamente dalle sorgenti ma
può arrivare da altre superfici
•  Ray Tracing
–  Basato su ray casting (tracciamento dei raggi), ottica
geometrica
•  Radiosity
–  Ottica radiativa
Riflessione tra superfici
•  Assumendo che vi siano
due tipi di superfici
ideali nella scena
(diffusive e speculari) vi
sono 4 meccanismi di
trasmissione della luce
tra superfici:
•  Ray tracing modella la
situazione a), Radiosity
la situazione d).
Esempio
Philipp Slusallek
Ray tracing
•  Considera i raggi
luminosi nella scena
ed il loro contributo
nel determinare il
flusso di energia
luminosa che
raggiunge
l osservatore
Ray tracing
•  I raggi luminosi prodotti
dalla sorgente di luce
possono giungere
all osservatore
direttamente o dopo
riflessione/rifrazione/
trasmissione sulle superfici
della scena
Ray tracing
•  La maggior parte dei raggi
prodotti dalla sorgente di
luce non raggiungono
l osservatore
•  Calcolo all indietro la
storia del cammino
percorso dalla radiazione
luminosa che ha raggiunto
l osservatore
Ray tracing
•  Non considero gli infiniti
raggi che arrivano alla
camera
•  Si considerano tutti i pixel e
si traccia il raggio di
proiezione (raggio
primario)
•  Il raggio è una semiretta
uscente dal COP che
interseca il piano di vista
Ray tracing e scan conversion
for each sample
in pixel image…
•  Nel ray tracing parto dai pixel
•  Eseguo la discretizzazione all inizio
Ray casting
Algoritmo:
Per ogni pixel:
traccio il raggio ottico che lo attraversa
determino le intersezioni del raggio con gli
oggetti
considero l intersezione più vicina all osservatore
.....
Ray casting
•  Risolvo un problema di visibilità
Ray casting
• Il raggio viene rappresentato in forma
parametrica: l intersezione con valore più
piccolo del parametro è quella più vicina
p(t ) = p0 + td
Ray casting
l
n
v
....
Determino il colore del punto in base alla normale
della superficie e alla posizione della luce
Ray casting
•  Fin qui sto facendo un ray-casting, ed il risultato non è
diverso da ciò che avrei ottenuto con I modelli locali,
con il vantaggio che è più facile il rendering di
superfici semplici tipo sfere
Ray tracing
•  Se si usa un modello di shading locale (Phong) fin’ora
il risultato sarebbe uguale
•  Con tutta la scena a disposizione, per determinare lo
shading di un punto ci possiamo guardare intorno e
calcolare
–  Ombre proiettate
–  Riflessione
–  Trasparenza e rifrazione
Ray tracing
•  Whitted (1979)
•  Il raggio non viene
arrestato alla prima
intersezione ma
vengono considerati
ulteriori raggi
Ray tracing: ombre
•  Quanta luce nel punto?
•  Traccio un raggio ombra
per stabilire se il punto è
illuminato direttamente
dalla sorgente
•  Se il raggio ombra interseca
degli oggetti, il punto è in
ombra
Ray tracing: ombre
B
A
n
v
raggio ombra
L oggetto riceve luce direttamente dalla sorgente:
non è in ombra
Ray tracing: ombre
A
n
B
v
raggio ombra
Il raggio ombra interseca l oggetto B: l oggetto A è
in ombra rispetto alla sorgente
Ombre
•  Le ombre proprie sono quelle che si producono sui
corpi nelle zone che non ricevono la luce; le ombre
portate (o proiettate) sono quelle che il corpo
proietta nell'ambiente circostante, interrompendo il
flusso luminoso.
•  Le ombre autoportate sono quelle che il corpo
proietta su sé stesso, ad esse è dovuto l'effetto di
rilievo.
Da R. Migliari, La prospettiva della luce
Raggi ombra
•  Il tracciamento dei raggi ombra consente di
determinare sia le ombre proprie che le ombre portate
Riflessione speculare
•  Se la superficie ha riflettività speculare devo valutare
il raggio di riflessione speculare
•  Il colore dipende dalla luce incidente nel punto dalla
direzione da cui può provenire la radiazione riflessa
•  Traccio il raggio corrispondente e vedo da dove
proviene
v
n
θ θ l
Ray tracing: riflessioni
B
raggio riflesso
lr
A
lr
v
n
v
n
l
Rifrazioni
•  Con analoga strategia posso tracciare anche un raggio
secondario in caso di oggetto trasparente (raggio di
rifrazione)
lt
lt
Rifrazione
Un raggio che colpisce un oggetto totalmente o
parzialmente trasparente è rifratto secondo la legge di
Snell:
sin θ1 η 2
=
= ηr
sin θ 2 η1
l
n
η1
θ1
θ2 t
t = nηr (n ⋅ l) − n 1 −ηr2 (1 − (n ⋅ l) 2 ) −ηrl
η2
Ray tracing
Algoritmo:
Per ogni pixel:
traccio il raggio che lo attraversa
determino le intersezioni del raggio con gli oggetti
considero l intersezione più vicina all osservatore
considero i raggi secondari (ombra, riflessione,
trasmissione)
Ray tracing
•  Modello di Whitted (estensione di Phong):
I = I a k a + ∑l f att I l [k d (n ⋅ l) + k s (r ⋅ v) n ] + k s I s +
kt I t
!
!
!
%$# %
"$"
#
ambiente
riflessa
trasmessa / rifratta
diffusa
speculare
%""
"
$"""
#
ricorsive
n
r
l
n
r
θ θ l
v
Ldiffusa = k d Li cosθ i = k d Li (l⋅ n)
Dalle altre
superfici
considero solo il
contributo per
riflessione
speculare o
trasmissione
Ray tracing
•  L algoritmo è ricorsivo, ogni raggio primario genera
dinamicamente un albero di raggi
Raggi
T3
R2
N2
T1
R1
L2
N3
N1
L1
Eye
R3
L1
L3
R1
Eye
T1
L2
L3
Ni normale alla superficie
Ri raggio riflesso
R2
R3
Li raggio ombra
Ti raggio trasmesso (rifratto)
Cutler and Durand
T3
Ricorsione
•  Quando termino?
–  Profondità massima di ricorsione
• Mi fermo dopo aver generato un certo numero di
raggi
–  Soglia minima di contributo
0 ricorsione
1 ricorsione
2 ricorsione
Cutler and Durand
Riassumendo
•  Assunzione: lo spazio è trasparente (mezzo nonpartecipante)
•  Superfici: modelli geometrici 3D
•  Sono note le caratteristiche delle superfici
–  Riflessione, rifrazione, …
•  Illuminazione
–  Sono note le posizioni delle sorgenti e le loro caratteristiche
Riassumendo
Passi fondamentali:
•  Generazione dei raggi primari
•  Intersezione con gli oggetti
•  Shading
–  Determinare l intensità luminosa lungo il raggio primario
(colore del pixel)
–  L intensità in arrivo sulla superficie è determinata dai raggi
secondari
• Raggi ombra
• Raggio speculare: nella direzione di riflessione
speculare perfetta
• Raggio di rifrazione: nella direzione di
trasmissione della luce
Implementazione
•  L aspetto fondamentale dell algoritmo è il calcolo
dell intersezione raggio-superficie, cioè quanto è
efficiente il calcolo dell intersezione tra un segmento
3D e una primitiva di modellazione
•  La maggior parte del tempo di esecuzione di un ray
tracer è nel calcolo delle intersezioni raggio-oggetti
Tracciare i raggi
•  Il modello è la pinhole camera
– 
– 
– 
– 
o: Origine (COP)
f: Vettore al centro del piano di vista
x, y: Coordinate sul piano di vista
xres, yres: Dimensione del piano
for (x= 0; x < xres; x++)
for (y= 0; y < yres; y++)
{
d= f + 2(x/xres - 0.5)⋅x
+ 2(y/yres - 0.5)⋅y;
d= d/|d|; // Normalize
col= trace(o, d);
write_pixel(x,y,col);
}
x
y
u
d
o
f
Calcolo delle intersezioni
•  Rappresentazione implicita di una superficie
f (x, y, z) = f (p) = 0
•  Raggio in forma parametrica
•  Le intersezioni sono date dalle soluzioni
dell equazione:
p(t ) = p0 + td
f (p0 + td) = 0
Raggio-sfera
•  L intersezione si può calcolare in modo semplice per
superfici quadriche. Consideriamo una sfera di raggio
r:
(p − p c )(p − p c ) − r 2 = 0
•  Otteniamo l equazione
d ⋅ dt 2 + 2(p 0 − p c ) ⋅ dt + (p 0 − p c ) ⋅ (p 0 − p c ) − r 2 = 0
Raggio-piano
•  Equazione del piano
p ⋅n − c = 0
•  Equazione del raggio
p(t ) = p0 + td
•  Calcolo il punto di intersezione
c − p0 ⋅ n
t=
d ⋅n
raggio
n
d
xn x + yn y − c = 0
n = (−1,1)
•  Nell esempio, se p0=(0,0) e d=(-1,1) risulta t=1 c = 2
y = 2+ x
Raggio-triangolo
•  Equazione del triangolo
c
p(α , β , γ ) = αa + βb + γc
α + β +γ =1
α ≥ 0, β ≥ 0, γ ≥ 0
α = 1− β − γ
p( β , γ ) = a + β (b − a) + γ (c − a)
a
p
b
•  Ho un sistema lineare in 3 equazioni e tre incognite
p0 + td = a + β (b − a) + γ (c − a)
Raggio-triangolo
boolean RayTri(ray r, vec3 a, vec3 b, vec3 c,
interval[t0, t1]
compute t
if(t<t0)or(t>t1) then return false
compute γ
if(γ<0)or(γ>1) then return false
compute β
if(β<0)or(β>1-γ) then return false
return true
Problemi
•  Ci possono essere problemi di precisione
Cutler and Durand
Costo computazionale
•  L algoritmo è computazionalmene oneroso
•  Il costo dipende dall enorme numero di test di
intersezione tra raggio e superficie
•  Tecniche per velocizzare:
•  Implementazioni parallele in cui l immagine da
realizzare viene partizionata su più nodi di calcolo
•  Adozione di opportune strutture dati:
–  Bounding volume
–  Suddivisione dello spazio
Bounding volume
•  Per semplificare il test di intersezione, racchiudo
l oggetto con una superficie semplice
•  Posso usare strutture gerarchiche ( Hierarchical
bounding volumes)
•  Quali tipi di volumi?
Partizionamento dello spazio
•  Partizionamento dello spazio in regioni non
sovrapposte:
–  Griglia uniforme
–  Octree
–  kD tree
Griglia uniforme
•  Viene fatto il test sulle primitive che sono all interno
dei voxel attraversati dal raggio
•  Limitazioni: risoluzione costante, non si adatta alla
scena
Octree
•  Suddivisione non uniforme dello spazio
•  Limitazioni: algoritmo di attraversamento più
complesso
kD trees
•  Suddivisione non regolare dello spazio mediante piani
paralleli al sistema di riferimento
•  Input:
–  volume che contiene la scena
(bounding box)
–  lista di primitive
kD trees
•  PASSI:
–  Suddivisione dello spazio (cella) in due parti (left, right)
usando un piano ortogonale a un asse. DOVE?
–  Ricorsione
–  STOP
•  La strategia di suddivisione implica minimizzare una
funzione costo:
Costo (cella) = Cattraversamento +
cella
P(left
cella
)C (left ) + P(right
cella
)C (right )
kD trees
•  Probabilità condizionata: sapendo che il raggio
attraversa la cella, qual è la probabilità che attraversi
la porzione left?
raggi che attraversano la porzione left
)=
cella
raggi che attraversano la cella
•  Si può rappresentare con il rapporto tra aree:
P(left
Aleft
Acella
kD trees
Costo(cella) = Cattraversamento +
cella
Aleft
Acella
C (left ) +
Aright
Acella
C (right )
•  Il costo di ciascuna porzione è il tempo per calcolare
le intersezioni con le primitive, che consideriamo
proporzionale al numero di primitive
Distributed ray tracing
•  Le immagini prodotte con il ray tracing visto sino ad
ora sono molto innaturali:
–  Riflessioni speculari nette
–  Ombre nette
–  Seghettature
R.L.Cook, T.Porter,L.Carpenter, Distributed Ray Tracing,
Computer Graphics, 1984
Distributed ray tracing
•  E una strategia di ray tracing che permette la
simulazione di numerosi effetti mediante il
tracciamento di più raggi:
– 
– 
– 
– 
– 
Riflessioni speculari sfumate (glossy)
Traslucenza
Penombra
Profondità di campo
Motion-blur
Distributed ray tracing
•  La soluzione dell equazione del rendering richiede il
calcolo di integrali
....
d
ω
∫
•  Con il ray tracing discretizziamo l integrale ad un solo
punto
•  Con il distributed ray tracing prevediamo più campioni
Ombra
•  Il meccanismo del raggio ombra assume che la
sorgente di luce sia puntiforme: assenza di penombra:
un solo raggio produce ombre nette
Cutler and Durand
Ombra
•  La penombra la posso generare in un ray tracer
tradizionale sostituendo la sorgente con N sorgenti
puntiformi
Ombra
•  Svantaggi:
–  Aumento la complessità
–  Ho delle ombre nette nella penombra
•  Soluzione: considero un insieme infinito di sorgenti
che scelgo in modo casuale
I(i,j)
I(p)
u v
p = ξ uu + ξ v v
Esempio
Aliasing
•  Aliasing-> non ho abbastanza campioni
•  Se considero un solo raggio per pixel ho delle
seghettature (jaggies) per effetto della
discretizzazione
Andrew Zaferakis
Antialiasing
•  Così come per le texture, la strategia di antialiasing si
basa sulla media di punti adiacenti
•  Se uso una griglia regolare posso avere artefatti, tipo
pattern moirè
Pixel Samples
Sub-Pixel Samples
Vince Scheib
Antialiasing
•  Una tecnica usata è considerare più campioni
distribuiti in modo non uniforme (random sampling o
jittering)
•  In pratica si evita il problema dei pattern, ma si
aggiunge rumore
Riflessione glossy
•  Potrei sparare molti raggi nelle riflessioni speculari
per simulare la riflessione glossy
n
r
l
Motion blur
Cook, Porter, Carpenter - 1984
Profondità di campo
Implementazione
Posso fare ray tracing con le GPU?
•  General-Purpose computation on GPUs
www.gpgpu.org/
http://
•  OpenRT: The OpenRT Real-Time Ray-Tracing Project
http://www.openrt.de
Ray tracers
•  Yafray (Yet Another Free RAYtracer)
(www.yafray.org)
•  POVray (Persistence of Vision Raytracer)
(www.povray.org)
Vantaggi
•  Realizzazione naturale delle ombre; non ho parametri
oscuri da settare (tipo il bias delle shadow maps)
•  Parallelizzabile
Cosa manca?
•  Non considera la luce che proviene per riflessione/
trasmissione diffusa da altri oggetti (questa
componente viene approssimata con un termine
costante di luce ambientale)
•  Se considerassimo anche i raggi di riflessione diffusa
avremmo una quantità improponibile di raggi.....
•  Si fa precedere il ray tracing da una valutazione della
radiosity
Scarica

20-modellli-globali - Università degli Studi di Milano