Ray-Tracing Ray-tracing Transporte de energia luminosa Ecuación

Anuncio
Ray-tracing
•
•
•
•
•
•
•
Ray-Tracing
Soluciones dependientes del observador
Algoritmo básico
Ray tracing recursivo
Optimizaciones
Ray tracing distribuído
Introducción a Monte Carlo
Path-tracing
Bi-directional path tracing
IIiA - GGG
Transporte de energia luminosa
Ecuación de rendering
L( p,ω ) = Le ( p,ω ) + ∫ f r ( p, ωi ,ω )Li (ω i ) cosθ idω i
Ω
• Consideramos BDRFs especulares (reflexión y
transmisión)
• La ecuación queda simplificada
L(p, ω) = Le (p, ω)+ kr Lin (p, ω r ) + kt Lin(p, ω t) +
Σ Ll (p, ω l) cos θl fr(p,ω l, ω)
IIiA - GGG
Pseudo-codigo
Algoritmo básico
• Sigue el sentido inverso de propagación de la luz
• Extensión de Ray Casting para calcular la
iluminación global
rayo refractado
rayo reflejado
L(p, ω) = Le (p, ω)+ ka L a(p, ω) +
kr Lin (p, ω r) + kt L in(p, ω t) +
Σ Ll (p, ω l) cos θl fr(p, ω l, ω)
IIiA - GGG
IIiA - GGG
Para cada pixel de la proyección ...
Color RayTrace(Point p, Vector D, int depth) {
Point pd /* Intersection point */
Boolean intersection
if (depth > MAX) return Black
intersect(p,direction, &pd, &intersection)
if (!intersection) return Background
Ilocal = { Calcula iluminación local}
return Ilocal + {Cálculo de iluminación global}
}
IIiA - GGG
1
Cuestiones prácticas
Iluminación local
• Derivar rayos primarios (observador-imagen)
• Intersección de objetos geométricos
– rayo-plano
– rayo-cuádricas
– rayo-superfícies libres
– rayo-geometría procedural
• Derivar rayos reflejado y refractado
– Leyes de Snell
(
Ir = ∑j =1 I j ka + kd (N ⋅ Lj ) + k s (Rj ⋅ Lj )n
M
• Descomposición en componentes:
– ambiente
– difusa
– especular
• Suma para cada componente espectral (r,g,b) de
forma independiente
IIiA - GGG
Ray Casting con Iluminación local
)
IIiA - GGG
Tratamiento de sombras
• Calcular oclusión mediante shadow feelers
• Si son fuentes extensas se puede lanzar varios rayos
e integrar
(
I r = ka I + ∑j =1 S j I j kd (N ⋅ L j )+ ks (R ⋅ Lj )n
M
)
N
E
R
L
IIiA - GGG
Resultado con cálculo de sombras
IIiA - GGG
Psuedo-codigo
Color RayTrace(Point p, Vector D, int depth) {
Point pd /* Intersection point */
Boolean intersection
if (depth > MAX) return Black
intersect(p,direction, &pd, &intersection)
if (!intersection) return Background
Ilocal = ka Ia + Ip .v.(kd(n.l) + ks.(r.n) m)
return Ilocal + kr*RayTrace(pd, R, depth+1) +
kt*RayTrace(pd, T, depth+1)
}
IIiA - GGG
IIiA - GGG
2
Resultados con recursividad
Resúmen
• Ray-tracing recursivo modela correctamente el
transporte especular y transparente
• Problemas:
– Aliasing
• Solución: Lanzar más rayos por pixel
– Lento para imagenes grandes y escenas
complejas
• Incomplable para interactividad
– No modela fenomenos de interreflexión difusa
IIiA - GGG
IIiA - GGG
Optimizaciones
Utilización de coherencia
• Coste del algoritmo:
– O(Nrays x Nobj)
– El “cuello de botella” es la operación de
intersección
• Limitar el número de rayos
• Acelerar test de intersección
– para rayos a fuentes
– rayos primarios
– rayos de ordenes superiores
• Técnicas más utilizadas
– volúmenes englobantes
– jerarquía de volúmenes englobantes
– subdivisión espacial
• regular
• adaptativa
– Coherencia de rayos
IIiA - GGG
Volúmenes englobantes
• Definir un volúmen
englobante del
objeto para test de
intersección rápido
• Si el test es falso el
objeto se descarta
IIiA - GGG
Jerarquía de volúmenes englobantes
Cajas alineadas
con los ejes
r2
r1
root
C
A+B
A
A
Polihédros
genéricos
D
C
B
D+E
D
F
E
E
B
F
Esferas
IIiA - GGG
IIiA - GGG
3
Subdivisión regular del espacio
• Cada voxel guarda id de objetos que lo ocupan
• Algorítmo Bresenham 3D para recorrer el grid
Subdivisión espacial adaptativa
• La misma idea con almacenamiento en un octree
(ilustrado como quadtree)
• Estructura auxiliar es más compacta
A
B
C
IIiA - GGG
kd-tree
IIiA - GGG
Extensiones de Ray-tracing
• Similar al octree
• Subdivide balanceando en número de hijos en cada
nodo
• Optimiza búsquedas
• Ray-tracing distribuído
• Path tracing
• Bi-directional path tracing
• Todas están basadas en técnicas de Monte Carlo
IIiA - GGG
IIiA - GGG
Métodos de Monte Carlo
• Fundamento
– Tratar el problema de simulación como un
proceso estocástico en vez de determinístico
– Formula la solution como parámetro de una
variable randómica
– Utilizado para resolver ecuaciones integrales
complejas
• Iluminación global
– Primeras aplicaciones
• ray-tracing distribuído (Cook 84)
• path tracing (Kajiya 86)
• Otras aplicaciones:
– simulaciones nucleares, tansferencia de calor, ...
•
Referencia: Simulation and the Monte Carlo Method , Rubinstein 81
IIiA - GGG
Ejemplo: Cálculo estimado de integrales
• Queremos calcular la integral
∫
y∈Ω
h ( y ) dy
• Expresamos h=gf, donde f está convenientemente
escogida
• Si elegimos muestras xi de acuerdo con la distribuición
de f:
1 n
∑ g( xi )
n i= 1
1 n h ( xi )
por lo tanto ∫ h ( y)dy ≈ ∑i=1
y∈Ω
n
f ( xi )
E[g (x )] = ∫
y∈Ω
g ( y) f ( y)dy ≈
IIiA - GGG
4
Ray-tracing distribuído (Cook 84)
Aplicaciones a Iluminación
• Lanza varios rayos por pixel distribuídos de forma
estocástica
• Integra la iluminación en cada pixel
• Ventajas:
– Mejoría de aliasing
– Incorpora efectos:
• penumbras
• Iluminación local
∫f
r
( p, ωi ,ω r )Li (ω i ) cosθ i dω i
A
– distribuye muestras en fuentes extensas
• Ecuación de redering
• profundidad de campo
L( p, ω ) = Le ( p ,ω ) + ∫ f r ( p, ω i , ω )Li (ω i ) cos θ i dω i
Ω
– distribuye muestras en el area de una lente objetiva
• glossy
– distribuye muestras segun reflectacia especular noideal
• motion blur
– distribuye muestras en el tiempo
IIiA - GGG
Imagenes
IIiA - GGG
Imagenes
Penumbras
Motion blur
Transparencia
Profundidad
de campo
IIiA - GGG
IIiA - GGG
IIiA - GGG
IIiA - GGG
Glossy
5
Path Tracing (Kajiya 86)
Resultados
• Trata la simulación como un proceso de random walk
• Sigue cada rayo lanzado con probabilidad de transición la
función de reflectancia
• También lanza rayos a fuentes por motivos de eficiencia
• Puede tratar interreflexión difusa
• Necesita 40 caminos por pixel (o más, segun la escena)
IIiA - GGG
Bi-directional path tracing
IIiA - GGG
Resúmen
• Lanza rayos desde fuentes
– Deposita energía en supefícies
difusas
– LS*D
– Proceso independent del
observador
• Lanza rayos desde el observador
– Colecta energía en las
superfícies
– DS*E
– Proceso dependiente del
observador
• Ray tracing estocástico permite tratar todo tipo
superfícies y entornos
• Especialmente costoso para sup. Difusas
• Soluciones dependientes del observador
• Mejoras:
– Importance sampling
• muestreo segun direcciones de importancia
– Progresividad
IIiA - GGG
IIiA - GGG
6
Descargar