93
Rendering em Tempo Real Técnicas de Aceleração Waldemar Celes Departamento de Informática Tecgraf/PUC-Rio

Rendering em Tempo Real

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Rendering em Tempo Real

Rendering em Tempo Real

Técnicas de Aceleração

Waldemar Celes Departamento de Informática

Tecgraf/PUC-Rio

Page 2: Rendering em Tempo Real

Técnicas de Aceleração

w  Objetivo n  Aliviar esforço na GPU

l  Usando CPU l  Usando a própria GPU

w  Exemplos n  Técnicas de culling

l  Descartar objetos que não contribuem para imagem final

n  Técnicas de multi-resolução (LOD) l  Representar objetos distantes

em baixa resolução

Page 3: Rendering em Tempo Real

Técnicas de Culling

w Frustum culling n  Descarta objetos fora do volume de visão

w Back face culling n  Descarta faces “voltadas para trás”

w Occlusion culling n  Descarta objetos totalmente oclusos

Page 4: Rendering em Tempo Real

Frustum Culling

w Hierarquia de volumes envolventes n  Para cada nó

l VE fora do frustum w  Descarta sub-nós

l VE intercepta o frustum w  Repete teste para todos os filhos

l VE dentro do frustum w  Desliga teste e desenha sub-nós

Page 5: Rendering em Tempo Real

Frustum Culling

w Hierarquia de volumes envolventes n  Volumes envolventes candidatos

l Caixa alinhada (AABB) l Caixa orientada (OBB) l Esfera

n  Avaliação l  Fácil computação (pré-processamento?) l Eficiente teste de interseção l Bom ajuste à geometria representada

Page 6: Rendering em Tempo Real

Frustum Culling

n  Cálculo do volume envolvente l Caixa alinhada (AABB)

w  Determinação de mínimos e máximos: O(n)

l Caixa orientada (OBB) w  Baseado na distribuição Gaussiana anisotrópica

§  Centro geométrico: C = 1/n Σ Vj §  Avalia: Wj = Vj – C e

M3x3 = Wj WjT §  Eixos ui: autovetores de M §  Semi-eixos: hi = maxj [ui . (Vj - C)] §  Reposiciona centro C

Obs: não é a OBB ótima (mínima)

Page 7: Rendering em Tempo Real

Frustum Culling

l Esfera w  Ache três pares de vértices:

§  {xmin, xmax}, {ymin, ymax}, {zmin, zmax} §  Esolha o par mais distantes

w  Inicie C como centro deste par §  E raio r como semi-distância

w  Para cada vértice: §  Calcule d = dist(Vj, C) §  Se d > r:

§  C = C + (d-r)/2 |d| §  r = (d+r)/2

Obs: não é a esfera ótima (mínima)

Page 8: Rendering em Tempo Real

Frustum Culling

w  Frustum x VE n  Onde fazer o teste?

l  Espaço do objeto n  Frustum

l  Definido por seis planos: ni.x + di = 0 n  Testa VE contra cada plano

l  Fora w  “Fora” de pelo menos um plano

l  Dentro w  “Dentro” de todos os planos

l  Intercepta w  Nem dentro nem fora

l  Teste conservativo w  Pode errar, mas é rápido

Intercepta planos, mas está fora do frustum

Page 9: Rendering em Tempo Real

Frustum Culling

w Teste de interseção: VE x plano n  Esfera n  Caixa alinhada (AABB) n  Caixa orientada (OBB)

Page 10: Rendering em Tempo Real

Frustum Culling

w Teste de interseção: esfera x plano n  Plano: [n d] n  Esfera: c, r n  Teste: n.c + d > r

Page 11: Rendering em Tempo Real

Frustum Culling

w Teste de interseção: AABB x plano n  Caixa alinhada: bmin, bmax

n  Das 4 diagonais, escolhe-se a mais alinhada com a normal do plano l Testa apenas dois pontos: vmin, vmax

w Determinação de vmin, vmax n  Acessa LUT com sinal da normal

l Por exemplo: n = [-1 0.5 2] w  vmax = LUT[011] = LUT[3] = {bxmin, bymax, bzmax} w  vmin = LUT[100] = LUT[4] = {bxmax, bymin, bzmin}

Page 12: Rendering em Tempo Real

Frustum Culling

w Teste de interseção: OBB x plano n  Caixa orientada: ui, hi com i = 0, 1, 2

n  Projeta semi-eixos na direção normal e obtém raio da esfera virtual equivalente

l  r = Σi hi |n.ui|

Page 13: Rendering em Tempo Real

Frustum Culling

w Coerência temporal n  Guardar testemunho junto ao VE

l Se fora, guarda plano usado na classificação l Próximo teste, começa por este plano

w  Alta probabilidade de VE continuar “fora” deste plano

w Máscara na descida da hierarquia n  Se dentro, passa adiante plano

l  Filhos não precisam ser testados com este plano

Page 14: Rendering em Tempo Real

Back Face Culling

w Back face culling do pipeline n  Face a face

l Efetuado no espaço da tela w  Evita imprecisão numérica

w Cone de normais n  Cria cluster de normais n  Aplicações

l Determinação de back faces w  Culling w  Iluminação

l Acelera detecção de silhuetas

Page 15: Rendering em Tempo Real

Back Face Culling

w Determinação do cone de normais n  “The cone of normals techinique for

fast processing of curved patches” l  L. A. Shirman and S. S. Abi-Ezzi

w Dada uma “clusterização” do modelo, determina o cone de normais de cada sub-superfície

Page 16: Rendering em Tempo Real

Back Face Culling

w Passo 1 n  Cone de normal flutuante

l  “Envolve” todas as normais w  Sem ancoragem geométrica

C-264 L.A. Shirman et al. / Cone of Normals Technique Curved Patches

Figure 2: Construction of the floating cone.

2.2. Construction of the Floating Cone Once the normal patch has been computed, the floating cone is constructed. The floating cone

contains all the normal directions of the original patch, and it is floating since it has no position, only an orientation.

For the construction of the floating cone, we assume that all the control vectors are anchored at the origin. By the convex hull property, the tips of all the normals to the original patch when anchored at the origin, are contained in the convex hull of the tips of the control vectors of the normal patch. Assume that these control vectors (or their extensions) intersect the unit sphere, also centered at the origin, at points Then the smallest enclosing sphere of all the intersection points is constructed. The floating cone, when anchored at the origin, is defined to pass through the intersection circle of the two spheres, which is shown in Fig. 2a.

Finding the smallest enclosing sphere of a given set of points in space is a computational geometry problem. There are exact and iterative algorithms for its computation [Lawson65], but they are rather slow. Instead, we use a bounding box approach, which is very fast and in practical situations it produces a fairly close approximation to the enclosing sphere.

The idea of the method is very simple. A bounding box of all the points is constructed. The center of the enclosing sphere is defined to be the center of the bounding box. The radius is then defined by the largest distance from the center to one of the points (Fig. 2b).

In practice we construct the cone without finding the enclosing sphere explicitly. We determine the cone axis to pass through the origin and the center of the enclosing sphere, C, where

Page 17: Rendering em Tempo Real

Back Face Culling

w Passo 2 n  Ancora e trunca cone

l Deve envolver todos os vértices w  Acha ponto mínimo no eixo: B como apex inicial w  Projeta pontos fora do cone no plano de B w  Círculo envolvente dos pontos projetados define

seção do cone no plano, deslocando apex. C-266 L.A. Shirman et al. / Cone of Normals Technique Curved Patches

Figure 3: Construction of the anchored truncated cone.

Clearly, for any point S above the bottom plane and outside of the translated cone, a ray from S parallel to any cone side does not intersect the smallest enclosing circle. Therefore, since every projected point inside the circle was obtained by projecting parallel to one of the cone sides, then and hence the whole patch, must lie inside the translated cone.

Finally, the top plane is determined in a similar fashion to obtaining the bottom plane. Both the bottom and the top planes are used to truncate the anchored cone as shown in Fig. 3b. Therefore, by construction the anchored truncated cone contains all the points of the patch and al l the normals at these points.

2.4. Construction of Frontfacing and Backfacing Regions

After the above operations, we partition the space into a frontfacing region, a backfacing region, and a neutral region in relation to the given patch; see Fig. 4. We show the construction of these regions in a 2D slice of the cone through its axis, which then gets generalized to 3D in a straightforward fashion.

The truncated cone ABCD contains a l l the points of the patch and the normal directions at these points. The frontfacing region EFG and the backfacing region KLM are constructed by drawing perpendiculars BG and DK to side AB, and CE and AM to side CD as shown in Fig. 4. Point F is the intersection of rays BG and CE, while point L is the intersection of rays DK and AM.

For any point P and any direction n inside the truncated cone the following relationships hold:

For any point N in the frontfacing region, the angle between PN and n is less than For any point in the backfacing region, the angle between and n is greater than For any point S which lies in the neutral region (neither in the frontfacing nor in the backfacing regions), the angle between PS and n can generally range from 0 to

Page 18: Rendering em Tempo Real

Back Face Culling

w Passo 3 n  Define regiões back & front facing

l Construção geométrica L.A. Shirman et al. / Cone of Normals Technique Curved Patches C-267

Figure 4: A cross-section of the cone through its axis to show the Frontfacing and backfacing regions.

As we will see in the next section, these relationships are crucial for fast patch level tests. An imperative reasoning for the first of the above relationships is as follows: for a given fixed

point P in the truncated cone, consider the set S(P) of all points N such that the angle between PN and any direction n inside the truncated cone is less than This set is a cone centered at P with the axis parallel to the truncated cone axis and with the semiangle of a, where a is the truncated cone semiangle. Since the above relationsip must hold for all points P in the truncated cone ABCD, the frontfacing region can be defined as an intersection of a l l sets S(P) as P spans ABCD, which results exactly in EFG. Similar reasoning holds for the backfacing region.

By construction, the frontfacing and backfacing regions are actually full cones with apexes at F and L respectively. These apexes lie on the axis of the truncated cone. The semiangles of both cones are equal to The distance from the bottom plane to L is equal to tan (a), where is the radius of the bottom circle as determined in the previous section. Analogously, the distance from the top plane to F is equal to tan (a), where is the radius of the top circle, T h i s radius can be expressed in terms of the radius of the bottom circle and the vertical length l of the truncated cone:

As pointed out earlier, this construction only makes sense when a is less than since when the floating cone spans more than a halfspace, then obviously there will be no value in using this technique.

Page 19: Rendering em Tempo Real

Culling por Oclusão

w  Consulta de oclusão (occlusion query) n  Assistido pela GPU n  Retorna número de pixels desenhados

w  Técnica de aceleração n  Desenha objetos na ordem “front-to-back”

l  Ou desenha os principais oclusores n  Testa oclusão cada objeto n  Desenha objeto se no de pixels visíveis for considerável

w  Adequado para cenas com grandes oclusores n  Modelos de arquitetura

Hardware Occlusion Queries Made Useful, Wimmer and Bittner, GPU Gems 2, 2005

Page 20: Rendering em Tempo Real

Funcionamento

w  Inicia consulta w  Desliga escrita nos buffers (color & Z) w  Desliga estados supérfluos (lighting, etc.) w  Desenha uma aproximação simples do objeto

n  E.g. caixa envolvente n  GPU computa no de pixels que seriam visíveis

w  Termina consulta w  Requisita resultado da consulta

n  Modal w  Avalia necessidade de desenhar objeto

n  Se no de pixels > threshold

Page 21: Rendering em Tempo Real

Algoritmo Simplista

w Ordena objetos em “front-to-back” n  Ordenação pode ser aproximada n  Ou desenha oclusores potenciais

w Para cada objeto n  Requisita uma consulta n  Espera pela resposta da consulta n  Avalia necessidade de renderizar

l Pode usar renderização condicional da API gráfica

Page 22: Rendering em Tempo Real

Problemas

w Custo da consulta n  Renderização das caixas envolventes

l Geometria, rasterização e teste em Z

w Latência da resposta n  Espera do resultado é modal

Page 23: Rendering em Tempo Real

Minimizar número de consultas

w Uso de hierarquias n  Mas consultas de grandes caixas é caro

l Alto custo de rasterização n  Pode ter efeito reverso se não há oclusão

Page 24: Rendering em Tempo Real

Evitar latência

w Minimizar ociosidade dos processadores n  CPU ociosa para GPU terminar consulta n  GPU ociosa pois CPU não enviou primitivas

w Resposta é modal, mas... n  Consulta não é modal n  Pode-se requisitar várias

Page 25: Rendering em Tempo Real

Solução Aproximada 1

w Explorar coerência entre frames w Usar z-buffer do quadro anterior

n  Requisita as consultas n  Limpa buffer n  Renderiza objetos cujas VE são “visíveis”

w  Imagem final com erro

Page 26: Rendering em Tempo Real

Solução Aproximada 2

w Explorar coerência entre frames w Processar objetos em “front-to-back”

n  Renderizar objetos, requisitando consulta l Resultado usado no quadro seguinte

w  Imagem final com erro

Page 27: Rendering em Tempo Real

Explorando hierarquia e coerência

w Evitar latência n  Intercala consulta com renderização

l Requisita consulta, mas não espera resposta

n  Prever o resultado da consulta l Visível x Não-visível l Explorar coerência temporal l Usa classificação do quadro anterior

Page 28: Rendering em Tempo Real

w Possíveis erros de previsão n  Antes visível, agora não visível

l Processamento de renderização desnecessário w  OK, não gera erro

l Classificação corrigida para próximo quadro n  Antes não-visível, agora visível

l Deve ser corrigido l Re-processamento do nó é necessário

w  Quando resposta estiver disponível

Explorando hierarquia e coerência

Page 29: Rendering em Tempo Real

w  Minimizar número de consultas n  Consultas para nós internos

l  Se era visível, não requisita consulta w  Re-classifica como não-visível w  Corrigido pela propagação da classificação dos filhos aos pais

l  Se era não visível, consulta é necessária w  Depois, verifica se previsão estava correta

n  Consultas necessárias para alguns nós apenas l  Folhas antes visíveis

w  Para atualizar e propagar visibilidade aos pais l  Nós antes não visíveis

w  Muitos continuarão não-visíveis §  Filhos não processados

Explorando hierarquia e coerência

Page 30: Rendering em Tempo Real

Algoritmo

w  Estrutura hierárquica n  Percorrida em ordem “front-to-back” n  Pilha para gerenciar nós visitados

l  Ainda por ser processados w  Gerenciamento das consultas

n  Fila de consultas pendentes n  Verifica existência de resposta

l  Após processamento de cada nó n  Verifica previsão

l  Se OK: nada a fazer l  Se errada:

w  Se era visível: atualiza classificação, propagando aos pais w  Se era não-visível: processa nó imediatamente

Page 31: Rendering em Tempo Real

Pseudo-código

Stack.Push (root) while (not Stack.Empty() or not Queue.Empty()) do // process query queue while (not Queue.Empty() and ResultAvailable(Queue.Front()) or Stack.Empty()) do node = Queue.Remove( visiblePixels = GetOcclusionQueryResult(node) if (visiblePixels > VisibilityThreshold) then PullUpVisibility(node) TraverseNode(node) end end

Page 32: Rendering em Tempo Real

Pseudo-código

// process hierarchy if (not Stack.Empty()) do node = Stack.Pop() if (InsideFrustum(node)) then wasVisible = (node.classification == VISIBLE) or IsLeaf(node) node.classification = NOT_VISIBLE if (not wasVisible) then IssueOcclusionQuery(node) Queue.Insert(node) end if (wasVisible) then TraverseNode(node) end end end end

Page 33: Rendering em Tempo Real

Pseudo-código

function TraverseNode (root) if (IsLeaf(node)) Render(node) // may be called more than once else Stack.PushChildren(root) // in front-to-back order end end function PullUpVisibility (node) while (node.classification == NOT_VISIBLE) do node.classification = VISIBLE node = node.parent end end

Page 34: Rendering em Tempo Real

Otimizações

w  Consulta com geometria renderizada n  Para nós visíveis

l  Desenha de qualquer forma w  Desacoplar consulta de renderização

n  Consulta: z-only rendering pass l  HW pode oferecer aceleração para esta passada

n  Duplica transformações n  Pode renderizar objetos ordenados por estado

w  Teste de visibilidade conservativo n  Fazer o estado visível válido por alguns quadros

w  Visibilidade aproximada n  Aumentar o threshold para considerar visível n  Pode ter efeito reverso!

Page 35: Rendering em Tempo Real

Otimizações

w  Usar lista de prioridade para processar nós n  Ordenada pela distância ao observador n  Vantagens

l  Generaliza o uso de hierarquias l  Evita dependência de visitação dos nós

w  O algoritmo não garante ordem devido às consultas

Page 36: Rendering em Tempo Real

15/12/2006 Projeto Final - Paulo Ivson 36

Teste de desempenho (Ivson, 2006)

w  Navegação ao longo de caminho aleatório n  Variando número de objetos visíves

w  Base de comparação n  Renderização simples, sem otimizações

w  Avaliar n  Impacto de diferentes hierarquias n  Algoritmo de descarte contra volume de visão n  Algoritmo de descarte por oclusão n  AABB, OBB Clássica e Aproximada Mínima

Page 37: Rendering em Tempo Real

15/12/2006 Projeto Final - Paulo Ivson 37

Teapots(500,30)

w  Pouca complexidade geométrica w  Muita oclusão w  “Cenas que já possuem bom desempenho”

Page 38: Rendering em Tempo Real

15/12/2006 Projeto Final - Paulo Ivson 38

Teapots(500,30)

w AABB

n  Hierarquia: Sem diferença significativa n  Descarte contra volume de visão: 5% n  Descarte por oclusão: 40%

tempo area simples vfc chcMed_Obj 1,31 570.884,5 3,134 2,982 1,892Med_Esp 1,36 548.270,2 3,165 2,984 1,917Med_Cent 1,35 564.459,2 3,168 2,980 1,890Avg_Cent 1,31 561.398,3 3,169 3,010 1,888Eq_Comp 1,30 573.621,8 3,185 2,982 1,892SAH 216,28 515.468,2 3,133 2,983 1,924

Hierarquia Visualização

Page 39: Rendering em Tempo Real

15/12/2006 Projeto Final - Paulo Ivson 39

Teapots(500,30)

w OBB Clássica

n  Minimizar SAH obtém o pior resultado n  Demais são similares

tempo area simples vfc chcMed_Obj 1,42 588.440,0 3,162 2,979 1,919Med_Esp 1,47 565.394,9 3,131 2,980 1,928Med_Cent 1,48 577.345,2 3,132 2,978 1,924Avg_Cent 1,44 579.327,5 3,138 2,978 1,919Eq_Comp 1,42 589.520,4 3,160 2,977 1,923SAH 260,31 517.034,2 4,855 4,633 2,867

Hierarquia Visualização

Page 40: Rendering em Tempo Real

15/12/2006 Projeto Final - Paulo Ivson 40

Teapots(500,30)

w OBB Aproximada Mínima

n  Tempo elevado de construção n  Resultados semelhantes

l  Ligeiramente melhores (0,04 s) n  Não vale a pena!

tempo area simples vfc chcMed_Obj 113,54 493.661,1 3,138 2,965 1,831Med_Esp 127,56 471.301,7 3,182 2,985 1,874Med_Cent 131,51 480.400,8 3,180 2,987 1,880Avg_Cent 125,92 483.034,3 3,186 2,991 1,869Eq_Comp 126,10 494.672,8 3,179 2,988 1,870SAH - - - - -

Hierarquia Visualização

Page 41: Rendering em Tempo Real

15/12/2006 Projeto Final - Paulo Ivson 41

Teapots(5000,3)

w  Elevada complexidade geométrica w  Pouca oclusão w  “Medir overhead dos testes de visibilidade”

Page 42: Rendering em Tempo Real

15/12/2006 Projeto Final - Paulo Ivson 42

Teapots(5000,3)

w AABB

n  Mediana espacial ligeiramente pior (0,4 s) n  Descarte contra volume de visão: 8% n  Descarte por oclusão: 12%

tempo area simples vfc chcMed_Obj 20,38 388.791,0 27,211 25,331 24,072Med_Esp 20,45 372.349,8 27,668 25,787 24,489Med_Cent 20,14 372.693,0 27,212 25,330 24,069Avg_Cent 20,20 372.912,5 27,491 25,330 24,063Eq_Comp 22,64 398.813,9 27,480 25,331 24,081SAH - - - - -

Hierarquia Visualização

Page 43: Rendering em Tempo Real

15/12/2006 Projeto Final - Paulo Ivson 43

Teapots(5000,3)

w OBB Clássica

n  Resultados similares l Tempos ligeramente maiores (0,3 s)

tempo area simples vfc chcMed_Obj 21,84 454.606,7 27,167 25,327 24,368Med_Esp 21,98 449.312,4 27,173 25,359 24,365Med_Cent 21,70 454.704,2 27,190 25,330 24,366Avg_Cent 21,58 448.239,2 27,497 25,639 24,656Eq_Comp 21,94 457.389,4 27,175 25,330 24,374SAH - - - - -

Hierarquia Visualização

Page 44: Rendering em Tempo Real

15/12/2006 Projeto Final - Paulo Ivson 44

Teapots(5000,3)

w OBB Aproximada Mínima

n  Tempo muito elevado de construção n  Resultado semelhante n  Não vale a pena!

tempo area simples vfc chcMed_Obj 3.208,92 335.796,3 27,422 25,334 24,021Med_Esp - - - - -Med_Cent - - - - -Avg_Cent - - - - -Eq_Comp - - - - -SAH - - - - -

Hierarquia Visualização

Page 45: Rendering em Tempo Real

15/12/2006 Projeto Final - Paulo Ivson 45

Teapots(5000,20)

w  Elevada complexidade geométrica w  Muita oclusão w  “Melhor cenário para descarte por oclusão”

Page 46: Rendering em Tempo Real

15/12/2006 Projeto Final - Paulo Ivson 46

Teapots(5000,20)

w AABB

n  Mediana espacial ligeiramente pior (0,2 s) n  Descarte contra volume de visão: 6% n  Descarte por oclusão: 81% (5x fps)

tempo area simples vfc chcMed_Obj - - 27,962 26,176 5,371Med_Esp - - 27,896 26,204 5,550Med_Cent - - 27,951 26,172 5,354Avg_Cent - - 27,973 26,185 5,360Eq_Comp - - 27,951 26,178 5,382SAH - - - - -

Hierarquia Visualização

Page 47: Rendering em Tempo Real

15/12/2006 Projeto Final - Paulo Ivson 47

Teapots(5000,20)

w OBB Clássica

n  Resultados similares l Tempos ligeramente maiores (0,4 s)

tempo area simples vfc chcMed_Obj - - 28,191 26,582 5,820Med_Esp - - 27,941 26,172 5,847Med_Cent - - 27,914 26,151 5,767Avg_Cent - - 28,206 26,464 5,774Eq_Comp - - 27,892 26,155 6,167SAH - - - - -

Hierarquia Visualização

Page 48: Rendering em Tempo Real

15/12/2006 Projeto Final - Paulo Ivson 48

Teapots(5000,20)

w OBB Aproximada Mínima

n  Tempo muito elevado de construção n  Resultado semelhante n  Não vale a pena!

tempo area simples vfc chcMed_Obj - - 29,341 26,897 5,818Med_Esp - - - - -Med_Cent - - - - -Avg_Cent - - - - -Eq_Comp - - - - -SAH - - - - -

Hierarquia Visualização

Page 49: Rendering em Tempo Real

LOD: Level of Detail

w Tipos

n  LOD discreto

n  LOD contínuo

n  LOD dependente de observador

Level of Detail for 3D Graphics, Luebke et al., 2003

Page 50: Rendering em Tempo Real

LOD Discreto

w  Enumeração de modelos

w  Diferentes representações de um mesmo objeto n  Feita em pré-processamento n  Independente da posição do observador n  Em geral, agrupados num nó switch

Sw

Page 51: Rendering em Tempo Real

LOD Discreto

w  Desacoplamento

n  Simplificação x Rendering n  Estrutura apropriada para rendering

l  Strip of triangles

w  Efeito de “pops” acentuados n  Minimizados com transição suave de níveis n  Vários vértices migram para um único

resultante

Page 52: Rendering em Tempo Real

LOD Contínuo

w  Lista conceitual de modelos

w  Estrutura de dados n  Espectro contínuo de LOD n  Lista de operadores

l  Ex. colapso de aresta & split de vértices l  Permite mudar de resolução l  Nível apropriado extraído na renderização

w  Melhor granularidade n  Transição local para evitar “pops”

w  Suporte a renderização progressiva n  Envio de operadores via rede, por exemplo

colapso

split

modelo

Page 53: Rendering em Tempo Real

LOD Dependente do Observador

w  Hierarquia conceitual de modelos n  Vários níveis de resolução (anisotrópico)

w  Estrutura de dados n  Árvore de operadores

w  Melhor granularidade

w  Apropriado para modelos grandes n  Terrenos

split

modelo

GDC 2003 Course Materials

Page 54: Rendering em Tempo Real

Transição entre Níveis

w Alpha blending n  Desenha as duas versões

l Problema: podemos estar migrando para a versão de menor resolução por questão de desempenho

w  Geomorph n  Vértices re-posicionados gradualmente

l  Interpolação linear l  Pode ser feita na placa gráfica (vertex program)

Page 55: Rendering em Tempo Real

Características dos Algoritmos

w  Topologia n  Genus n  2D manifold

l  Pode ter fronteira

w  Características dos algoritmos n  Preserva topologia

l  Maior fidelidade

n  Não preserva topologia l  Maior agressividade na simplificação

n  Em geral, precisa de uma estrutura topológica

Page 56: Rendering em Tempo Real

Escolha do Nível de Detalhe

w Estratégias n  Baseado em fidelidade

l Busca minimizar erros visuais

n  Baseado em recursos l Busca manter desempenho

Page 57: Rendering em Tempo Real

Operadores de Simplificação

w Colapso de aresta

va

vb

vnew

vnew= f (va,vb)

e colapse

v split

Page 58: Rendering em Tempo Real

Outros Operadores

w  Colapso de par de vértices n  Não necessariamente ligados por aresta

l  Candidatos potenciais (O2) l  Heurística: arestas + vértices próximos

w  Colapso de triângulos n  Triângulo dá lugar a um vértice

w  Colapso de células n  Subdivide modelo em células n  Todos os vértices de uma célula

colapsa num novo vértice w  Remoção de vértices

n  Remove vértice e arestas adjacentes n  Retriangula “buraco”

Page 59: Rendering em Tempo Real

Construção do LOD

w  Método guloso for each possible operation op ComputeCost(op) Q->Insert(op) end while Q->NotEmpty() do op = Q->ExtractMin() ApplyOp(op) for each neighbor operation i ComputeCost(i) Q->Update(i) end end

Page 60: Rendering em Tempo Real

Critério de Avaliação de Custo

w  Critério simples n  Objetivo

l  Eliminar pequenos detalhes l  Eliminar arestas entre triângulos planares

n  Custo l  Combinação entre comprimento e curvatura l  Precisa de informações de adjacência topológica

),(),(:2

1minmax*),(

uvcvucOBS

gfvuvuc normalnormal

TgTf uvu

≠"#$

%&'

"#$

%&' ⋅−

−=∈∈

Se todos os triângulos adjacentes a u tiverem normais parecidas com um dos triângulos a serem removidos, o custo é pequeno.

Page 61: Rendering em Tempo Real

Métrica Quadrática

w  Erro como a soma das distâncias do vértice aos planos adjacentes

w  Vantagem n  Se u colapse com v, criando w

l  Qw = Qu + Qv

n  Não precisa de informação topológica

( ) ( )( )

( ) vQvvQvvppv

vppvvp

vp

pp

pvp

TTTT

TT

)(

2

=!"#

$%&=!"

#$%&=

=⋅⋅=⋅=

∑∑

∑∑∈planes

ve

Page 62: Rendering em Tempo Real

Visualização de Terrenos

Multi-resolução de terrenos armazenados em memória

secundária

Luiz Gustavo Magalhães Waldemar Celes

Page 63: Rendering em Tempo Real

Lindstrom et al. (2002)

w  Baseado em refinamento

w  Não é necessário manter informações de estado

w  Constrói uma malha nova a cada frame

w  Pré-processamento

w  Culling hierárquico & Geomorphing

w  Existe uma solução out-of-core para o algoritmo

Page 64: Rendering em Tempo Real

Partição da maior aresta

w  i é pai de j

w  Cada vértice é considerado ativo segundo um critério de refinamento

w  Para cada vértice ativo: n  Garantir que o seu pai e

seus ancestrais estão também ativos Imagens Retiradas de Lindstrom et al. [3]

Page 65: Rendering em Tempo Real

Partição da maior aresta

w  Manter ponteiros de filhos para pai n  Ocupa mais espaço n  Ineficiente

w  Soluçao n  garantir que o erro usado no

critério de refinamento para o pai seja sempre maior ou igual ao do filho

Imagem Retirada de Lindstrom et al. [3]

Page 66: Rendering em Tempo Real

Critério de Refinamento

w  Erro no Espaço da Tela (ρi) > Tolerância ⇒ Ativa i. w  Primeiro temos que ter:

n  Erro(objeto) do Pai ≥ Erro(objeto) do Filho l  Pré-processamento

Imagem retirada dos slides de Edinalda

Page 67: Rendering em Tempo Real

Critério de Refinamento 2

w Erro no espaço do objeto está “encadeado” de pai para filho, mas e o erro no espaço de tela?

w Solução – esferas envolventes

Page 68: Rendering em Tempo Real

Esferas envolventes

( )!"#

+−=

,max,0

jjii

rppr

se i é folha.

p/ j descendente de i.

ii

ii

rop −−=

λδρErro Esp. Tela:

Imagem retirada dos slides de Edinalda

Page 69: Rendering em Tempo Real

Acesso aos dados out-of-core

w Mapeamento de arquivo em disco para endereço de memória (mmap) n  As páginas são carregadas pelo sistema

operacional n  Facilita implementacão mas impede o uso

de um mecanismo mais sofisticado como pre-fetching, etc

Page 70: Rendering em Tempo Real

Acesso aos dados out-of-core

w  Reindexação dos dados n  Acesso em disco fica seqüencial n  Minimiza eventos de “paginação”

Page 71: Rendering em Tempo Real

Implementação

w Estrutura de Dados: n  Carregamento e salvamento de terrenos. n  Pré-processamento e reindexação. n  Determinação de vértice visível e ativo. n  Indexação (BinTree).

w Estratégia de Renderização: n  Estratégia Strip. n  Estratégia Triangles.

Page 72: Rendering em Tempo Real

Estratégia Strip

Imagens Retiradas de Lindstrom et al. [3]

Page 73: Rendering em Tempo Real

Estratégia Triangles

subMeshRefine(V, Triangle(i, j, k), level) { IF (level > 0) AND VerticeAtivo(SPLIT(i, j, k)) subMeshRefine(V, CHILD_LEFT(i, j, k) , level-1) subMeshRefine(V, CHILD_RIGHT(i, j, k), level-1) ELSE desenha Triangle(i, j, k) } MeshRefine(V, levels) { subMeshRefine(V, SOUTH_TRIANGLE, levels-1) subMeshRefine(V, EAST_TRIANGLE , levels-1) subMeshRefine(V, NORTH_TRIANGLE, levels-1) subMeshRefine(V, WEST_TRIANGLE , levels-1) }

i

jk

Split

Child Left Child Right

Page 74: Rendering em Tempo Real

Comparação entre as estratégias

w  A estratégia strip de Lindstrom et al. necessita de menos vértices (triangle strip) n  Mas gera muitos triangulos de área zero (36%)

w  A estratégia triangles é mais simples e envia mais vértices para a GPU, mas sempre gera o número exato de triângulos necessários. n  Permite uma estratégia de limitação do número de

triângulos (Budget Triangle Count)

Page 75: Rendering em Tempo Real

Estratégias de rendering

w Modo Imediato n  glVertex(x,y,z)

w Arrays de Elementos n  glArrayElement(i)

w Vertex Arrays n  glDrawArray

Page 76: Rendering em Tempo Real

Resultados

w  Configuração de teste: n  P4 Mobile 2.8 GHz com 512 Megabytes de RAM. n  GeForce Fx Go com 64 Megas de VRAM. n  Windows XP.

w  Casos de teste: n  Terreno: 4097x4097. n  Textura: 4096x4096. n  Tolerância de erro de 1 e 2 pixels.

w  Caminho Pré-definido: n  800 quadros

Page 77: Rendering em Tempo Real

Resultados (cont.) Tolerância de erro de 1 pixel

Page 78: Rendering em Tempo Real

Resultados (cont.) Tolerância de erro de 1 pixel

Estratégia Média de Tempo por quadro (ms)

Triangles Immediate 26,34473659 Triangles Array Element 27,82930232 Triangles Vertex Array 28,29788861 Strip Immediate 26,09624868 Strip Array Element 26,02400417 Strip Vertex Array 27,04737972 Strip Morph 30,26849671 Strip Morph Vertex Array 32,18535482

Page 79: Rendering em Tempo Real

Resultados (cont.) Tolerância de erro de 2 pixels

Page 80: Rendering em Tempo Real

Resultados (cont.) Tolerância de erro de 2 pixels

Estratégia Média de Tempo por quadro (ms)

Triangles Immediate 81,27651766 Triangles Array Element 90,14626693 Triangles Vertex Array 97,92097383 Strip Immediate 88,09698185 Strip Array Element 88,89202355 Strip Vertex Array 91,79737589 Strip Morph 107,0168068 Strip Morph Vertex Array 111,2844997

Page 81: Rendering em Tempo Real

Problema

w Não é escalável

Page 82: Rendering em Tempo Real

Mudança de foco

w Vértices x Conjunto de vértices w Hierarquia

n  Torna escalável n  Quadtrees

l  Implementação simples

Page 83: Rendering em Tempo Real

Quadtrees

w  Divisão em Tiles w  Tiles de igual

tamanho e resolução

Page 84: Rendering em Tempo Real

Quadtrees

w  Divisão em Tiles w  Tiles de igual

tamanho e resolução w  Cada 4 tiles compõe

um nó pai n  Reamostragem

Page 85: Rendering em Tempo Real

Quadtrees

w  Divisão em Tiles w  Tiles de igual

tamanho e resolução w  Cada 4 tiles compõe

um nó pai n  Reamostragem

w  Quadtree n  Erro n  Eliminação de falhas

Page 86: Rendering em Tempo Real

Cálculo do Erro

w Erro no espaço do objeto, 3 casos: n  Horizontais n  Verticais n  Diagonais

w Erro zero em nó folha.

Page 87: Rendering em Tempo Real

Cálculo do Erro Projetado

w Erro de nós pai >= erro de nós filhos w BBox do pai envolve BBox dos filhos w Projeção do Erro

n  Forma de Lindstrom n  BBox do nó

ii

ii

rop −−=

λδρErro Esp. Tela:

Page 88: Rendering em Tempo Real

Eliminação de falhas / vértices T

w  Tile dividido em 4 triângulos: n  2 possíveis indexações

l  Não geram cracks entre si l  Podem ser reutilizadas em

todos os tiles n  Cada triângulo adapta-se

ao seu vizinho, caso este seja de resolução inferior.

w  Ainda não é suficiente…

i

jk

Split

Page 89: Rendering em Tempo Real

Eliminação de falhas / vértices T

w  Deve ser garantido que vizinhos tem diferença de apenas 1 nível

w  Balanceamento da Quadtree

Page 90: Rendering em Tempo Real

Gerência de Tiles em disco

w Terreno em disco n  2 arquivos:

l  Metadados (erro, bbox, offset, etc) l  Dados

w  Compactação w  Possibilidade de mais de 1 arquivo de dados

w Execução n  2 Threads

l  Rendering l  IO de Tiles / Predição

n  Executam de forma independente

Page 91: Rendering em Tempo Real

Thread de rendering

w Percorrer a árvore (quadtree)

w Critérios de refinamento n  Visibilidade n  Atividade n  Balanceamento da árvore n  Presença em memória

w Desenhar nós folhas

Page 92: Rendering em Tempo Real

Thread de IO

w Percorre a árvore n  Mesmo critério de erro n  Carrega nós conforme desce na árvore

w Fila de prioridade de Tiles (heap) n  Ordenado por frame em que foi inserido

w  Inserção e remoção na fila

Page 93: Rendering em Tempo Real

Video