Simplificación de mallas de triángulos Autor: Miguel Pasenau Director: Carlos Andújar Departament...
-
Upload
inigo-santiesteban -
Category
Documents
-
view
219 -
download
0
Transcript of Simplificación de mallas de triángulos Autor: Miguel Pasenau Director: Carlos Andújar Departament...
Simplificación de mallas de triángulos
Autor: Miguel PasenauDirector: Carlos Andújar
Departament de Llenguatges i Sistemes InformàticsFacultat d’Informàtica de Barcelona
22 Junio 2011 / 2
Índice• Introducción• Aplicación– Plataforma– Algoritmos
• Resultados– Modelos– Tiempos, escalabilidad
• Conclusiones
22 Junio 2011 / 3
Índice• Introducción• Aplicación– Plataforma– Algoritmos
• Resultados– Modelos– Tiempos, escalabilidad
• Conclusiones
22 Junio 2011 / 4
Motivación• Modelos escaneados de alta resolución• Simulaciones con 10^9 elementos• Interacción en tiempo real• Plataformas comunes
22 Junio 2011 / 5
Objetivos• Desarrollar algoritmo de simplificación• Nivel de detalle seleccionable• Rápido• Eficiente en memoria• Multiplataforma• Robusto
22 Junio 2011 / 6
Etapas• Estudio del arte• Desarrollo aplicación de ensayo• Implementación primera versión• Ampliación y mejoras• Análisis de resultados
22 Junio 2011 / 7
Índice• Introducción• Aplicación– Plataforma– Algoritmos
• Resultados– Modelos– Tiempos, escalabilidad
• Conclusiones
22 Junio 2011 / 8
Plataforma• Desarrollado en C ++, OpenMP y OpenGL• Usando FLTK 1.3.x ( incluye GLUT)
22 Junio 2011 / 9
Algoritmo de DeCoro y Tatarchuk 2007
• Full grid, simplificación uniforme de grupos vértices
• Algoritmo de tres pasos:– Paso 1: crear mapa de QEF a partir de la malla– Paso 2: encontrar el representante óptimo para
cada celda– Paso 3: simplificación de malla, colapsando vértices
de cada celda en su representante• Utiliza el error cuadrático de Garland y
Heckbert 1997
22 Junio 2011 / 10
Algoritmo de DeCoro 2007• Paso 1: para cada nodo de cada triángulo, acumular
sus coordenadas y la QEF del triángulo en su celda
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
Grid de 8 x 8 x 8 para acumular: QEF y vértices de la celda
22 Junio 2011 / 11
Algoritmo de DeCoro 2007• Paso 2: representante óptimo de la celda:– Invertir QEF– Verificar si está en la celda– Si no, usar el centroide de los vértices
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
QEFacc
Representante óptimo
22 Junio 2011 / 12
Algoritmo de DeCoro 2007• Paso 3: para cada triángulo– Obtener las celdas ( cluster_id) de sus vértices– Si no colapsa:
• Sustituir vértices por representante óptimo• Guardar triángulo Mapa Qef + Acc
Grid de 9 x 9 x 9
22 Junio 2011 / 13
Algoritmo de DeCoro 2007• Paso 3: para cada triángulo– Obtener las celdas de sus vértices– Si colapsa en línea:
• Sustituir vértices por representante óptimo• Guardar línea Mapa Qef + Acc
Grid de 9 x 9 x 9
22 Junio 2011 / 14
Mejoras introducidas• Recuperación de líneas
Grid de 19 x 19 x 19
22 Junio 2011 / 15
Mejoras introducidas• Restricción del representante a la celda• Recuperación de líneas• Triángulos y líneas únicas• Corrección de normales
22 Junio 2011 / 16
Calidad y resolución• Full grid hasta 2563 = 1,1 GB
22 Junio 2011 / 17
Calidad y resolución• Ocupación según resolución de la malla
poligonal del modelo Lucy
Celdas ocupadas y memoria ( 72 bytes = qef + acc + opt)
grid # celdas % / total MBytes1283 23 k 1 % 1,52563 91 k 0,5 % 65123 351 k 0,3 % 24
1.0243 1,3 M 0,1 % 902.0483 4,6 M 0,05 % 3134.0963 10 M 0,02 % 706
22 Junio 2011 / 18
Hash espacial Alcántara et al. 2009
Buckets = # celdas / 409
Max 512 items
Media de 409 items
Espacio extra
h( k) = k mod #_buckets
• Primer nivel: repartir en buckets de <= 512 items
22 Junio 2011 / 19
Hash de cuco Pagh y Rodler 2001• Hash de cuco: guardar todos los elementos usando g1
Max 512 items
Media de 409 items Espacio extra
g1( k)
Tabla T1
g2( k)
Tabla T2
g3( k)
Tabla T3
22 Junio 2011 / 20
Hash espacial Alcántara 2009• Hash de cuco: guardar resto de elementos usando g2
Max 512 items
Media de 409 items Espacio extra
g1( k)
Tabla T1
g2( k)
Tabla T2
g3( k)
Tabla T3
22 Junio 2011 / 21
Hash espacial Alcántara 2009• Hash de cuco: guardar resto de elementos usando g3
Max 512 items
Media de 409 items Espacio extra
g1( k)
Tabla T1
g2( k)
Tabla T2
g3( k)
Tabla T3
22 Junio 2011 / 22
Hash espacial Alcántara 2009• Guardar elementos usando g1 sacando los ya guardados
Max 512 items
Media de 409 items Espacio extra
g1( k)
Tabla T1
g2( k)
Tabla T2
g3( k)
Tabla T3
22 Junio 2011 / 23
Hash espacial Alcántara 2009• Guardar elementos usando g2 sacando los ya guardados
Max 512 items
Media de 409 items Espacio extra
g1( k)
Tabla T1
g2( k)
Tabla T2
g3( k)
Tabla T3
22 Junio 2011 / 24
Hash espacial Alcántara 2009• Guardar elementos usando g3 sacando los ya guardados
Max 512 items
Media de 409 items Espacio extra
g1( k)
Tabla T1
g2( k)
Tabla T2
g3( k)
Tabla T3
22 Junio 2011 / 25
Hash espacial Alcántara 2009• Copiar las tablas y seed de vuelta al bucket
g1( k)
Tabla T1
g2( k)
Tabla T2
g3( k)
Tabla T3
Tabla T1 – g1( k) Tabla T2 – g2( k) Tabla T3 – g3( k)
Max 512 items
Media de 409 items Espacio extra
seed
22 Junio 2011 / 26
Hash espacial Alcántara 2009• Lista de claves = celdas ocupadas• Hash híbrido de dos niveles:– Primer nivel: hash tradicional y global• Buckets de <= 512 elementos• Media de ocupación de 409 elementos:
– #_buckets = ( #_celdas + 408) / 409
• Función hash:– h( k) = k mod #_buckets– Alternativa:
» h( k) = ( ( c0 + c1 · k ) mod 1900813) mod #_buckets
» c0, c1 = primos
22 Junio 2011 / 27
Hash espacial Alcántara 2009• Segundo nivel: hash de cuco en cada bucket– Max 512 items + Espacio extra = 573 items
– Dividido en tres sub-tablas de 191 items
– Buscar _seed para construir• gi( k) = ( ci0 + ci1 · k ) mod 191
• cij = _seed ^ cteij // cteij constantes predefinidas
Max 512 items
Media de 409 items Espacio extra
Tabla T1 – g1( k) Tabla T2 – g2( k) Tabla T3 – g3( k)
22 Junio 2011 / 28
Hash espacial Alcántara 2009• Acceso constante:– 1r nivel: h( k) = k mod #_buckets - 1 acceso– 2o nivel: g1( k) sino g2( k) sino g3( k) - 2..4 accesos
• Nivel ocupación: 409 / 573 = 71,38 %
• Necesita calcular lista de celdas ocupadas• Elemento:– Clave = cluster_id– Valor = función error cuádrica + acumulación coords
22 Junio 2011 / 29
Aplicación: DeCoro 2007 + Alcántara 2009
• Algoritmo de cuatro pasos:– Paso 1: • crear lista celdas ocupadas• crear hash híbrido, elemento = ( cluster_id, qef( 0))
– Paso 2: crear mapa de QEF a partir de la malla– Paso 3: encontrar el representante óptimo para cada
celda– Paso 4: simplificación de malla, colapsando vértices
de cada celda en su representante
22 Junio 2011 / 30
Índice• Introducción• Aplicación– Plataforma– Algoritmos
• Resultados– Modelos– Tiempos, escalabilidad
• Conclusiones
22 Junio 2011 / 31
Modelo LucyOriginal
14 M puntos28 M triángulos0 líneas
Grid 40963
10,3 M puntos20,6 M triángulos7 líneas73,3 %72 s. con HashUC
Grid 20483
4,6 M puntos9,1 M triángulos6 líneas32,5 %31 s. con HashUC
Grid 10243
1,3 M puntos2,6 M triángulos23 líneas9,4 %11 s. con HashUC
Grid 5123
351 K puntos705 K triángulos17 líneas2,5 %5 s. con HashUC
Grid 2563
91 K puntos183 K triángulos11 líneas0,65 %4 s. con HashUC6 s. con FullUC
Grid 1283
23 K puntos47 K triángulos12 líneas0,16 %4 s. con HashUC5 s. con FullUC
Grid 643
5 K puntos12 K triángulos8 líneas0,04 %8 s. con HashUC4 s. con FullUC
Grid 323
1.212 puntos2.800 triángulos4 líneas0,01 %23 s. con HashUC4 s. con FullUC
Grid 163
284 puntos660 triángulos6 líneas0,002 %60 s. con HashUC5 s. con FullUC
Grid 83
68 puntos138 triángulos6 líneas0,0005 %59 s. con HashUC7 s. con FullUC
Grid 43
18 puntos32 triángulos2 líneas ~ 0,0001 %61 s. con HashUC13 s. con FullUC
Grid 23
8 puntos14 triángulos0 líneas < 0,0001 %62 s. con HashUC62 s. con FullUC
22 Junio 2011 / 32
Modelo ciudadOriginal: 6,1 M puntos y 15,6 M triángulosGrid 1283 : 0,21 % del original, 13 K puntos, 34 K triángulos, 380 líneasGrid 2563 : 0,73 % del original, 44 K puntos, 113 K triángulos, 548 líneasGrid 5123 : 2,2 % del original, 138 K puntos, 332 K triángulos, 1 K líneasGrid 1.0243 : 6 % del original, 386 K puntos, 881 K triángulos, 1,5 K líneasGrid 2.0483 : 12 % del original, 780 K puntos, 1,7 M triángulos, 1,8 K líneasGrid 4.0963 : 19 % del original, 1,3 M puntos, 2,7 M triángulos, 2 K líneasGrid 8.1923 : 28 % del original, 1,9 M puntos, 3,8 M triángulos, 1,5 K líneasGrid 16.3843 : 37 % del original, 2,6 M puntos, 5,2 M triángulos, 739 líneasOriginal: 6,1 M puntos y 15,6 M triángulos
22 Junio 2011 / 33
Resultados
Grid 1283
0,16 % del original23 K puntos47 K triángulos12 líneas
• Error:
Grid 2563
0,65 % del original91 K puntos183 K triángulos11 líneas
Grid 5123
2,5 % del original351 K puntos705 K triángulos17 líneas
22 Junio 2011 / 34
Resultados: escalabilidad• Algoritmo de DeCoro con full grid
Distribución tiempoprocesos 1 core 2 cores 4 cores
Inicialización 5 % 7 % 10 %Crear mapa QEF 62 % 58 % 51 %
Buscar óptimo 1 % 1 % 2 %Simplificar malla 32 % 34 % 37 %
6 cores10 %47 %2 %
41 %Total 13 s. 7 s. 4 s. 3 s.
Cronometrado en nodo 2 cpu Intel Xeon E5410Simplificando el modelo lucy con un grid de 2563
22 Junio 2011 / 35
Resultados: escalabilidad• Algoritmo DeCoro + Alcántara: hash espacial
Cronometrado en pc i7-920Simplificando el modelo lucy con un grid de 2563
Distribución tiempoprocesos 1 core 2 cores 4 cores
Crear hashes 7 % 7 % 7 %Crear mapa QEF 60 % 58 % 59 %
Buscar óptimo 1 % 2 % 3 %Simplificar malla 30 % 32 % 28 %
4 c. + HT5 %
59 %3 %
29 %Total 9 s. 5 s. 3 s. 2,5 s.
Cronometrado en pc i7-920Simplificando el modelo lucy con un grid de 2.0483
Distribución tiempoprocesos 1 core 2 cores 4 cores
Crear hashes 23 % 27 % 32 %Crear mapa QEF 22 % 20 % 17 %
Buscar óptimo 3 % 3 % 3 %Simplificar malla 51 % 49 % 46 %
4 c. + HT36 %15 %3 %
44 %Total 34 s. 20 s. 13 s. 10 s.
22 Junio 2011 / 36
Índice• Introducción• Aplicación– Plataforma– Algoritmos
• Resultados– Modelos– Tiempos, escalabilidad
• Conclusiones
22 Junio 2011 / 37
Conclusiones• Aplicación gMeshSim– Algoritmo de simplificación DeCoro 2007 +
Alcántara 2009– 270 bytes / nodo malla original– Coste temporal lineal:• Recorrido por los nodos de la malla: crear hash• Recorrido por los elementos: acumular qef y coords• Recorrido por los elementos: simplificación de malla• Recorrido por la lista de celdas ocupadas
– Simplifica una malla de 28.000.000 triángulos en 4 segundos ( Intel QuadCore Q9550)
22 Junio 2011 / 38
Conclusiones• Mejoras DeCoro 2007:– Recuperación de líneas únicas– Recuperación de triángulos únicos– Representante óptimo restringido a la celda– Corrección de normales
• Hash espacial híbrido de Alcántara 2009:– Se ha usado para simplificar mallas– Se ha aumentado el tamaño de la clave a 64 bits– Se ha experimentado con la ocupación media de
buckets– Se pueden simplificar mallas con un error < 1e-5
22 Junio 2011 / 41
Bibliografía• "Adaptive Vertex Clustering Using Octrees" by Scott Schaefer and Joe Warren,
proceedings of SIAM Geometric Design and Computation 2003, SIAM, New York, NY, USA, vol. 2, p. 491-500, 2003.
• "Real-time Mesh Simplification Using the GPU" by Christopher DeCoro and Natalya Tatarchuk, Proceedings of the 2007 symposium on Interactive 3D graphics and games, ACM New York, NY, USA, 2007.
• "Perfect Spatial Hashing" by Sylvain Lefebvre and Hugues Hoppe, ACM Transactions on Graphics 25, 3 (July), 579–588, 2006.
• "Real-Time Parallel Hashing on the GPU" by Dan A. Alcantara, Andrei Sharf, Fatemeh Abbasinejad, Shubhabrata Sengupta, Michael Mitzenmacher, John D. Owens and Nina Amenta, ACM Transactions on Graphics - Proceedings of ACM SIGGRAPH Asia 2009
• "Surface simplification using quadric error metrics" by Michael Garland and Paul S. Heckbert, ACM Siggraph Conference, 209-216, 1997.
Simplificación de mallas de triángulos