Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porGuillermo Rendon Modificado hace 9 años
1
Estrategias de Optimización Visualización II – 2009 Ing. Juan P.D’Amato
2
Visualización de Datos II
4
Los datos en 3D pueden ser muy complejos para representar en tiempo real Se necesita reducir la cantidad de triángulos a renderizar en la escena Una solución, elegir los datos a representar Otra solución, simplificar el modelo Como evaluar la fidelidad de los modelos simplificados ? >200,000 Triángulos
5
Visualización de Datos II Frustum División del espacio ◦ N-Trees, Grillas, Planos LODS ◦ Discreto, Continuo, View-Dependent Otros métodos ◦ Clonado ◦ Reemplazo por textura Detección de colisiones
6
Visualización de Datos II Relación Eficiencia del método con respecto a Eficiencia ganada Espacio utilizado por las estructuras intermedias Reacción ante cambios
7
Visualización de Datos II La posicion y dirección de la vista genera un volumen -> El Frustum de Vista Los elementos que nos interesan se deben encontrar dentro de este volumen
8
Visualización de Datos II Estrategias de clasificación de los elementos para accederlos eficientemente ◦ Grillas Regulares ◦ N-Trees (Quadtrees / Octrees /Kd-Trees / BSP Trees ) ◦ Bounding volumes
9
Visualización de Datos II Los BSP(Binary Space Partition) son una generalización de los kD-trees: los planos no necesariamente deben estar alineados a los ejes Los elementos se clasifican por planos El motor del Half Life 2 se basa en BSP
10
Visualización de Datos II Para todos los triángulos T del Objeto ◦ Hang(root, T) ◦ Hang (node, triangle) ◦ If (node.isLeaf) Node.add(triangle) ◦ else Pos = classify ( node.plane, triangle) If (pos = Front) Hang(node.front,triangle) Else Hang(node.back, triangle) Los elementos que nos interesan se deben encontrar dentro de este volumen
11
Visualización de Datos II Render(node, eyePos) Pos = classify (node.plane, eyePos) //estoy frente al plano If (pos = Front) ◦ Render(node.front, eyePos) ◦ renderElements() <- chequea que son visibles ◦ Render(node.back, eyePos) Else ◦ Render(node. back, eyePos) ◦ renderElements() ◦ Render(node. front, eyePos)
12
Visualización de Datos II Es una grilla regular, organizada jerárquicamente Se divide la escena en cuatro bloques, con dos planos alineados, y en forma recursiva Se crea un árbol con cuatro nodos hijos
13
Visualización de Datos II Número de bloques en un nivel: n(nivel) = 4 nivel Número total de bloques: N(nivel) = 4 0 + 4 1 + 4 2 + … + 4 nivel = (4 (nivel+1) – 1) / 3 El overhead final en comparación a una grilla regular: ◦ 33% de bloqueas extras
14
Visualización de Datos II Ventajas ◦ Genera una buena distribución de los elementos ◦ El costo de búsquedas es de ( log #Elementos) Desventajas ◦ Mayor complejidad para visualizar ◦ Las modificaciones tienen un costo elevado
15
Visualización de Datos II Idea : solo procesar los bloques cercanos al observador. Los bloques lejanos pueden eliminarse La carga/descarga de los bloques varía de acuerdo a la posición de la cámara El uso de memoria es constante
16
Visualización de Datos II Ventajas: ◦ Es simple implementarlo con arreglos 2D, y también para llevarlo a 3D Desventajas: ◦ Sirve cuando la distribución en el espacio es homogénea Ideal para organizar objetos en escenas
17
Visualización de Datos II El espacio se divide por volúmenes ◦ Se usan representaciones matemáticas simples(Esferas, cubos, prismas (boxes)) ◦ Los volúmenes pueden subdivirse en secciones más pequeñas ◦ Usado generalmente con objetos completos ◦ El bounding volume óptimo se calcula durante el pre- procesamiento Lo más común es utilizarse en colisiones de objetos
18
Visualización de Datos II Requiere dos datos únicamente: ◦ Posiciones con respecto al centro del objeto y radio de la esfera
19
Visualización de Datos II AABB (Axis Aligned Bounded Box): ◦ Rápido para calcular las colisiones, pero no se adecuan perfectamente al objeto ◦ AABB se re calcula cuando el objeto rota o se mueve
20
Visualización de Datos II Los “convex hull” pueden utizarse Es más costoso su manejo: ◦ Rotación ◦ Cálculo de intersección ◦ Punto interno al volumen
21
Visualización de Datos II Bounding boxes orientados (OBB) son más adecuados al objeto pero más costosos para hacer los cálculos: ◦ Los OBBs para objetos estáticos pueden calcularse previamente ◦ Alternativa : aplicar las mismas transformaciones que el objeto antes de aplicar los cálculos Conclusión: balancear las diversas técnicas de BV
22
Visualización de Datos II Ventajas: ◦ Cálculos simples ◦ Requieren poco espacio en memoria (para la esfera es una posicion y un radio) Desventajas ◦ No tienen buena precisión ◦ No reducen la cantidad de polígonos a representar
23
Visualización de Datos II Para todos los objetos3D O de la escena ◦ //Método abstracto de la clase Bound ◦ If (O.bounding.insideFrustum() O.Render ◦ Else Continue;
24
Visualización de Datos II El problema: ◦ Conjuntos de datos pueden ser muy complejos para representar en tiempo real Una solución: ◦ Usar geometría mas simples de modelos pequeños o distantes. ◦ Eso es lo conocido como Level of Detail or LOD
25
Visualización de Datos II Crear levels of detail (LODs) de los objetos: 69,451 polígonos 2,502 p 251 p76 p
26
Visualización de Datos II Level of detail (LOD) es una herramienta para mantener la interacción ◦ Balancea la relación perfomance/fidelidad de las mallas ◦ Puede usarse junto con otras técnicas: Parallel rendering Occlusion culling Image-based rendering Tipos principales de LOD ◦ Discreto/sustitución (1976) ◦ Continuo (1996)
27
Visualización de Datos II LOD tradicional: ◦ Los LODs de cada objeto se crean previamente con una resolución determinada ◦ En tiempo de ejecución se elije el LOD adecuado de acuerdo a la distancia (o por otro criterio)
28
Visualización de Datos II Ventajas ◦ Granularidad adecuada: Utiliza los polígonos más representativos La fidelidad es la más elevada ◦ La mejor aproximación para objetos muy detallados Permite simplificarlos drásticamente Desventajas ◦ Es costoso en tiempo real
29
Visualización de Datos II Combinar con otras técnicas (BSP, Octree) Cuando usar esta técnica en la escena, y con qué objetos? ◦ LOD discretos : objetos muy replicados y con un número razonable de polígonos ◦ LOD continuo : Mapas, grillas de agua (espacios navegables y uniformes)
30
Visualización de Datos II Texturas (mippmaps)
31
Visualización de Datos II Utilizar texturas en lugar de triángulos Se aplican mapas de normales (bumpmaps) calculados para recrear las “sombras” del elemento Se puede automatizar el cálculo de los mapas de normales si la topología de la malla es relativamente simple
32
Visualización de Datos II 1683 k Triangulos10 k Triangulos 10 k Triangulos + Shading
33
Visualización de Datos II Se tienen varias instancias del mismo objeto, del que solo cambian las transformaciones o atributos mínimos, como el color Por cada nuevo objeto ◦ Se hace referencia a la misma estructura de la geometría (vértices, triángulos, texturas ) ◦ Se crean las transformaciones propias a cada objeto
34
Visualización de Datos II Renderizar el objeto a textura En el momento del render, se dibuja un polígono con la textura mapeada Útil para objetos estáticos, como árboles o edificios
35
Visualización de Datos II TécnicasProsCons LOD Discreto Continuo Jerárquico En general, la visualización no depende de la técnica No existe una técnica general No es viable cuando los objetos se deforman SP Grillas Quadtree/Oct ree BSP Genera una buena distribución de los elementos El costo de búsquedas es de ln #Elementos Mayor complejidad para visualizar Las modificaciones tienen un costo elevado Bound Esferas AABB OBB Sencilla Conveniente para objetos deformables Eficiente No son dependientes de la visualización Son malas aproximaciones
36
Visualización de Datos II No provee estructuras tipo Octrees o BSP pero provee mecanismos para el manejo de datos ◦ Estructuras + eficientes ◦ LODs de Textura (Mippmaps) ◦ Culling Queries ◦ Splines variables en GPU (sólo en placas nuevas) ◦ Planos de corte
37
Visualización de Datos II Render : // Cada cara es un triangulo while (i<numFaces) glBegin(GL_TRIANGLES) glVertex3fv( Vertexes[ Faces[i] ]) glVertex3fv( Vertexes[ Faces[i+1] ]) glVertex3fv( Vertexes[ Faces[i+2] ]) i+=3 glEnd()
38
Visualización de Datos II OffLine genLists(listID); //offline while (i<numFaces) glBegin(GL_TRIANGLES) glVertex3fv( Vertexes[ Faces[i] ]) glVertex3fv( Vertexes[ Faces[i+1] ]) glVertex3fv( Vertexes[ Faces[i+2] ]) i+=3 glEnd() Render glCallList(listID); -> transfer\Transfer.exetransfer\Transfer.exe
39
Visualización de Datos II La idea : Verificar que un objeto será dibujado en pantalla ◦ 1ro.- Se renderizan objetos simples, tipo esferas o cajas ◦ 2do.- Se leen cuantos píxeles afectaron del Buffer ◦ Si la cantidad de pixeles > cota 3ro.- Se renderiza la escena final Código OpenGL : // Deshabilito la profundidad glDepthMask(GL_FALSE); // Habilito el test de Occlusion glEnable(GL_OCCLUSION_TEST_HP); // Dibujo el Bounded glutSolidCube(S_SIZE*2); glDisable(GL_OCCLUSION_TEST_HP); // Obtengo el resultado glGetBooleanv(GL_OCCLUSION_TEST_RESULT_HP, @isVisible);
40
Visualización de Datos II Detección de colisiones comprende encontrar donde dos (o más) primitivas se intersecan Las colisiones pueden ser muy complejas
41
Visualización de Datos II Los problemas principales: ◦ Una detección correcta requiere chequear cada polígono de un objeto con todos los del otro : O(#polígonos 2 ), ◦ Calcular el tiempo en que se producirá una colisión ◦ Encontrar el punto de intersección entre ambos
42
Visualización de Datos II Detección de colisiones con Bounding Spheres. Eficiente para calcular si un punto p es interno |p – S centre | < S radius Detección de colisiones con bounding boxes alineados a los ejes (eng: AABB) ◦ Intersección muy simple AABBs ◦ Dados dos AABBs A & B, no existe intersección si: (AXmax < BXmin) || // A totalmente a la izquierda B (AXmin > BXmax) || // A totalmente a la derecha B (AYmax < BYmin) || // A totalmente por debajoB (AYmin > BYmax) || // A totalmente por arriba B (AZmax < BZmin) || // A totalmente al frente B (AZmin > BZmax) // A totalmente por detrás B
43
Visualización de Datos II El problema del time stamp fijo: ◦ Si la intersección se calcula en cada frame => Ciertas colisiones pueden perderse. ◦ Un objeto a gran velocidad puede atravesar totalmente a otro objeto en ese plazo de tiempo.
44
Visualización de Datos II Se debe calcular un tiempo correcto Una colisión errónea puede producir efectos diferentes a los esperados
45
Visualización de Datos II Soluciones al problema del timestamp ◦ Cálculo de colisiones no dependientes del Frame Rate ◦ Estimar el tiempo posible de la colisión ◦ Usar un volumen mayor para las colisiones ◦ Clasificar los objetos de acuerdo a la velocidad
46
Visualización de Datos II Remover pares de objetos que nunca colisionarán Realizar pruebas con BOs simples No testear objetos que se encuentran muy separados Obviar objetos no-visibles
47
Visualización de Datos II Se distribuyen los objetos utilizando grillas regulares. Se comparan los objetos con no más de una celda de distancia: ◦ for all objects O for y = O.grid_y-1 to O.grid_y+1 for x = O.grid_x-1 to O.grid_x+1 for all objects O’ in grid(x,y) check collision O O’
48
Visualización de Datos II Árboles de Bounding volumes: BSP u Octrees ◦ Chequear objetos/polígonos contra el contenido del nodo del árbol ◦ Si hay intersección, seguir con los hijos del nodo Chequear entre dos árboles A y B: ◦ Chequear intersección entre los nodos de A y B ◦ Si no hay intersección Exit ◦ Si A o B son hojas Retornar intersección más cercana ◦ Sino 1. Para cada par de hijos de A, B chquear Intersección
49
Visualización de Datos II
50
Tutorial Frustum ◦ http://www.lighthouse3d.com/opengl/tutorials/ http://graphics.cs.cmu.edu/projects/
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.