estruturas de dados espaciais mc-930 mo-603. ray-casting fontes de luz enviam fótons em todas as...
TRANSCRIPT
Estruturas de Dados Espaciais
MC-930
MO-603
Ray-casting
• Fontes de luz enviam fótons em todas as direções• Modelar fótons como partículas que saem dos
objetos para a cena• Cada fóton tem comprimento de onda e energia
(cor e intensidade)• Quando fótons batem num objeto, alguma energia
é absorvida, alguma é refletida e alguma é transmitida (refratada)
Ray Casting
• Se modelarmos as “batidas e reflexões” dos raios nos objetos, podemos gerar imagens para cada raio
• Técnica: seguir cada fóton da fonte de luz até que:– toda sua energia seja absorvida;
– ele saia do universo conhecido;
– ele bata na imagem (plano de projeção) e sua contribuição é adicionada ao píxel apropriado
Forward Ray-tracing
• Raios são caminhos percorridos pelos fótons (ray-tracing)
• Forward Ray-tracing segue o fóton na mesma direção em que a luz viaja (da fonte de luz)
• Grande problema:– Apenas uma pequena fração de raios chegam na
imagem (jogar fora maioria)
• Cenário ideal:– Gostaria de saber magicamente quais raios contribuem
eventualmente para a imagem e traçar apenas esses
Backward Ray-tracing
• Solução é iniciar da imagem e traçar raio para trás (ao contrário)
• Backward Ray-tracing:– Começa da imagem e segue raio até que ele
encontre a fonte de luz ou saia do universo
• Algumas pessoas acreditavam que a visão humana funcionava desta maneira
Idéias Básicas
• Cada pixel recebe luz de apenas uma direção (definida pelo ponto focal/observador e pelo ponto no plano imagem)
• Cada fóton contribuindo para a cor desse pixel deve vir dessa direção (observador-centro de cada pixel)
• Siga o raio saindo da imagem– Se encontrou fonte de luz – done!– Se encontrou nada – done!– Se bateu numa superfície – veja de onde vem a iluminação naquela
superfície e calcule a contribuição (ou pode ser recursivo)
• Ao final, resultado igual ao forward ray-tracing, mas calcula apenas raios que contribuem para a imagem
Backward Ray-tracing
Ray casting• This version of ray tracing is often called ray casting:• loop y
• loop x
• shoot ray from eye point through pixel (x,y) into scene
• intersect with all surfaces, find first one the ray hits
• shade that point to compute pixel (x,y)’s color
• (perhaps simulating shadows)
• A ray is p+td: p is ray origin, d the direction– t=0 at origin of ray, t>0 in positive direction of ray
– typically assume ||d||=1
– p and d are typically computed in world space
• This is easily generalized to give recursive ray tracing...
Ray-tracing recursivo
• Quatro tipos de raios:– Eye rays: orgina-se no olho (ponto focal)– Shadow rays: da superfície apontando na
direção da fonte de luz– Reflection rays: do ponto na superfície
apontando na direção do raio refletido– Transmission rays: do ponto na superfície na
direção do raio refratado
• Trace todos esses recursivamente
Ray-tracing recursivo
N
Otimizando Ray-tracing
• Traçar poucos raios– Mais relevante para ray-tracing recursivo
• Otimizar cada teste de interseção– otimizar código raio-triângulo, raio-esfera– compilar com otimizador
• Melhor estratégia:– fazer menos testes de interseção
Comparativo: deteção de obstáculos
• Progredir envolve não bater nos obstáculos da cena
• Complexidade: a cada passo da câmera, fazer um teste de interseção com todos os objetos da cena
• Um objeto representado com 10.000 triângulos = 10.000 testes de interseção raio-plano.
Estruturas de Dados Espaciais
• Estruturas de dados para armazenar informação geométrica de forma eficiente– Detecção de colisão (vai bater?)– Busca de localizações (correio mais próximo?)– Simulações químicas– Renderização (ray-casting, ray-tracing)
• Principais: bounding-volume hierarquico, grids, Octrees, BSP-trees
Bounding Volumes• Noção simples: embrulhe coisas complexas com
uma envoltória mais simples– Exemplo: caixa envolvendo objeto complexo– Raio não bate no objeto complexo sem bater na caixa– Adiciona algum cálculo, mas compensa– Mais comuns: caixa e esfera
Hierarquical Bounding Volume
• Estrutura em forma de árvore– Lista de bounding-volumes (esferas, caixas etc), onde
cada BV contém uma lista de sub-volumes
– Exemplo, corpo humano, caixa principal com listas• Cabeça com sub-listas Nariz, Orelhas, Face, Cabelo
• Corpo com sub-listas:– Braço direito com sublistas Braço, Antebraço, mão, 5 dedos
– Braço esquerdo com sublistas Braço, Antebraço, mão, 5 dedos
– Perna direita com sublistas Coxa, Canela, Pé, 5 dedos
– Perna esquerda com sublistas Coxa, Canela, Pé, 5 dedos
Teste de interseção
Grids
• Array 3-D de células (voxels) particiona o espaço– Cada célula aponta para uma lista de todas as
superfícies que intersectam aquela célula
Teste de interseção
Mais sobre Grids
• Grids are a poor choice when the world is nonhomogeneous (clumpy)– e.g. a teapot in a stadium: many polygons clustered in a small space
• How many cells to use?– too few Þ many objects per cell Þ slow
– too many Þ many empty cells to step through Þ slow
• Grids work well when you can arrange that each cell lists a few (ten, say) objects
• Better strategy for some scenes: nested grids
Octrees
K-d Trees and BSP Trees
Building a BSP Tree
the subdivisionof space it implies
a BSP treeusing 2 as root
2
3 1
1
2
3a b c d
a
b
cd
viewpoint
Building the Tree 2
1
2a
2b3
3
2a 2b
1
viewpoint
Using line 3 for the root requires a split
Which Structure is Best for Ray Tracing?
Fim Estruturas de Dados Espaciais
Building a Good Tree - the tricky part
Uses for Binary Space Partitioning (BSP) Trees
Painter’s Algorithm with BSP trees
Drawing a BSP Tree
front_to_back(tree, viewpt) { if (tree == null) return; if (positive_side_of(root(tree), viewpt)) { front_to_back(positive_branch(tree, viewpt); display_polygon(root(tree)); front_to_back(negative_branch(tree, viewpt); } else { …draw negative branch first…} }
Drawing Back to Front
1
2a
2b3
3
2a 2b
1
viewpoint
Hidden surface removal
Clipping BSP Trees
Clipping BSP Trees
Clipping Using Spatial Data Structures