Upload
abiba
View
67
Download
1
Embed Size (px)
DESCRIPTION
Estrategias de Optimización. Visualización II – 2009 Ing. Juan P.D’Amato. Navegación interactiva?. Simulación en tiempo Real ?. Principio general. 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. - PowerPoint PPT Presentation
Citation preview
Estrategias de Optimización
Visualización II – 2009Ing. Juan P.D’Amato
Visualización de Datos II
Visualización de Datos II
Visualización de Datos II
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
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
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
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
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
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
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
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)
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
Visualización de Datos II
Número de bloques en un nivel:n(nivel) = 4nivel
Número total de bloques:N(nivel) = 40 + 41 + 42 + … + 4nivel = (4 (nivel+1) – 1) / 3
El overhead final en comparación a una grilla regular:◦ 33% de bloqueas extras
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
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
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
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
Visualización de Datos II
Requiere dos datos únicamente: ◦ Posiciones con respecto al centro del objeto y radio de la esfera
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
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
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
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
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;
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
Visualización de Datos II
Crear levels of detail (LODs) de los objetos:
69,451 polígonos 2,502 p 251 p 76 p
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)
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)
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
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)
Visualización de Datos II
Texturas (mippmaps)
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
Visualización de Datos II
1683 k Triangulos 10 k Triangulos10 k Triangulos + Shading
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
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
Visualización de Datos II
Técnicas Pros ConsLOD 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/Octree
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
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
Visualización de Datos II
Render :
// Cada cara es un triangulowhile (i<numFaces) glBegin(GL_TRIANGLES) glVertex3fv( Vertexes[ Faces[i] ]) glVertex3fv( Vertexes[ Faces[i+1] ]) glVertex3fv( Vertexes[ Faces[i+2] ]) i+=3 glEnd()
Visualización de Datos II
OffLinegenLists(listID); //offlinewhile (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.exe
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);
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
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ígonos2),
◦ Calcular el tiempo en que se producirá una colisión
◦ Encontrar el punto de intersección entre ambos
Visualización de Datos II
Detección de colisiones con Bounding Spheres. Eficiente para calcular si un punto p es interno
|p – Scentre| < Sradius
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
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.
Visualización de Datos II
Se debe calcular un tiempo correcto Una colisión errónea puede producir efectos
diferentes a los esperadosObjeto en Frame K
Objeto en Frame K+1
Objeto en Frame K+2
Objeto en Frame K+0.85
(incorrecto)
(correcto)
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
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
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’
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
Visualización de Datos II
Visualización de Datos II
Tutorial Frustum◦ http://www.lighthouse3d.com/opengl/tutorials/
http://graphics.cs.cmu.edu/projects/