Marching Quads: un poligonizador de superficies impl´ıcitas

Transcripción

Marching Quads: un poligonizador de superficies impl´ıcitas
PROYECTO FIN DE MÁSTER
Marching Quads: un poligonizador
de superficies implı́citas orientado
a modelos para animación.
AUTOR: José Javier Macı́as Sánchez
TUTORA: Caroline Larboulette
Junio 2010
Agradecimientos
En primer lugar, agradezco la gran ayuda prestada por mi tutora Caroline, quién
me ha orientado perfectamente a lo largo de este trabajo para alcanzar la meta que
nos propusimos, y poder mostrar el resultado de nuestro esfuerzo en este documento.
También agradezco a Olivier su ayuda por todos los modelos que ha diseñado, y
aportado, para utilizar en este trabajo de investigación.
Por su ayuda en la resolución de problemas matemáticos, agradezco la ayuda al
departamento de matemáticas de la Universidad Rey Juan Carlos, y en especial a
Esther por su interés y dedicación.
Finalmente, hago extenso este agradecimiento a todos los familiares, y amigos,
que me han dado ánimos y me han ayudado en diversos aspectos de la investigación,
permitiéndome solventar todos los baches que se han cruzado por mi camino, y
ası́ poder llegar con éxito a esta tan ansiada meta.
i
ii
Agradecimientos
Resumen
Existen multitud de algoritmos enfocados a obtener mallas de polı́gonos que
permitan aproximar modelos definidos implı́citamente. Sin embargo, ninguno de
ellos está encaminado a la obtención de mallas adecuadas para ser utilizadas en
sistemas de animación.
Como parte de un sistema de generación automática de personajes 3D para animación desde imágenes bidimensionales, proponemos un algoritmo de poligonización
de superficies implı́citas que permite obtener mallas de quads para deformación en
animaciones, utilizando una restricción de Delaunay para superficies 3D que hemos
adaptado para quads. Además, los polı́gonos de las mallas son ajustados a la simetrı́a
y a la curvatura del modelo.
There is a large variety of algorithms that focus on obtaining polygonal meshes
from implicit surfaces. However, none of them generates suitable meshes for use in
animation systems.
As part of an automatic 3D character generation system from bidimensional images, we propose an implicit surfaces poligonalization algorithm aimed at generating
quad meshes suitable for animations. To this end, we propose an adapted 3D Delaunay surface constraint for quads. In addition, the polygons of the obtained mesh
follow the symmetry plane as well as the curvature of the surface.
iii
iv
Resumen
Índice general
Agradecimientos
I
Resumen
III
1. Introducción
1.1. Descripción del Problema
1
. . . . . . . . . . . . . . . . . . . . . . . .
1
1.1.1. Mallas de quads de personajes para animación. . . . . . . . .
1
1.1.2. Generación automática de personajes. . . . . . . . . . . . . . .
2
1.1.3. Trabajos relacionados. . . . . . . . . . . . . . . . . . . . . . .
3
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.3. Desarrollo del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.3.1. Etapas de desarrollo . . . . . . . . . . . . . . . . . . . . . . .
6
1.3.2. Herramientas utilizadas . . . . . . . . . . . . . . . . . . . . . .
7
1.4. Estructura del documento . . . . . . . . . . . . . . . . . . . . . . . .
8
2. Estado del arte
9
2.1. Superficies implı́citas . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.1.1. Definición matemática . . . . . . . . . . . . . . . . . . . . . . 10
2.1.2. Vectores Normales . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.3. Animación de superficies implı́citas . . . . . . . . . . . . . . . 11
2.1.4. Visualización de superficies implı́citas . . . . . . . . . . . . . . 12
v
ÍNDICE GENERAL
vi
2.2. Poligonización de superficies implı́citas . . . . . . . . . . . . . . . . . 12
2.2.1. Marching Cubes . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.2. Técnicas de simulación de partı́culas . . . . . . . . . . . . . . 15
2.2.3. Técnicas de rastreo de superficie . . . . . . . . . . . . . . . . . 17
2.3. Marching Triangles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3.1. Marching Triangles adaptativo . . . . . . . . . . . . . . . . . . 22
2.3.2. Marching Triangles con restricción para aristas . . . . . . . . . 24
2.3.3. Marching Triangles evitando generación de cracks . . . . . . . 25
2.4. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3. Algoritmo de Marching Quads
29
3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.1. Estructura del algoritmo . . . . . . . . . . . . . . . . . . . . . 29
3.1.2. Problemas a resolver . . . . . . . . . . . . . . . . . . . . . . . 31
3.2. Poligonización de la superficie implı́cita: Marching Quads . . . . . . . 32
3.2.1. 3D Delaunay Surface Constraint aplicado a quads . . . . . . . 32
3.2.2. Creación del nuevo quad candidato . . . . . . . . . . . . . . . 36
3.2.3. Alternativas de nuevos quads . . . . . . . . . . . . . . . . . . 39
3.2.4. Cracks debido a vértices escogidos erróneamente . . . . . . . . 43
3.3. Búsqueda del punto más cercano sobre la superficie implı́cita . . . . . 45
3.3.1. Algoritmo de búsqueda de punto cercano a la superficie . . . . 46
3.3.2. Formulación matemática de intersección circunferencia-esfera . 47
3.4. Búsqueda del quad inicial . . . . . . . . . . . . . . . . . . . . . . . . 48
3.4.1. Algoritmo de búsqueda de quad inicial . . . . . . . . . . . . . 49
3.4.2. Detalle de los pasos del algoritmo . . . . . . . . . . . . . . . . 49
3.4.3. Cálculo de la distancia de proyección . . . . . . . . . . . . . . 50
ÍNDICE GENERAL
vii
3.5. Cierre de cracks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.5.1. Introducción al algoritmo de cierre de cracks . . . . . . . . . . 52
3.5.2. Aislamiento de un crack . . . . . . . . . . . . . . . . . . . . . 53
3.5.3. Cerramiento de un crack . . . . . . . . . . . . . . . . . . . . . 54
4. Mejoras en Marching Quads
61
4.1. Aceleración del algoritmo Marching Quads . . . . . . . . . . . . . . . 61
4.1.1. Análisis del problema . . . . . . . . . . . . . . . . . . . . . . . 61
4.1.2. Solución al problema . . . . . . . . . . . . . . . . . . . . . . . 62
4.2. Crecimiento del algoritmo en base a la simetrı́a del modelo . . . . . . 62
4.3. Marching Quads adaptativo a la curvatura del modelo . . . . . . . . . 63
4.3.1. Análisis del problema . . . . . . . . . . . . . . . . . . . . . . . 63
4.3.2. Algoritmo adaptativo . . . . . . . . . . . . . . . . . . . . . . . 64
5. Resultados experimentales
67
5.1. Caracterı́sticas de Marching Quads . . . . . . . . . . . . . . . . . . . 68
5.1.1. Algoritmo básico . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.1.2. Mejora acelerativa del algoritmo . . . . . . . . . . . . . . . . . 70
5.1.3. Mejora de quads ajustados a la simetrı́a del modelo . . . . . . 72
5.1.4. Mejora de quads adaptados a la curvatura de la superficie . . 74
5.2. Resultados en modelos implı́citos complejos . . . . . . . . . . . . . . 77
6. Conclusiones y trabajos futuros
83
6.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.1.1. Caracterı́sticas de Marching Quads . . . . . . . . . . . . . . . 83
6.1.2. Limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.1.3. Comparación con otros algoritmos . . . . . . . . . . . . . . . . 87
ÍNDICE GENERAL
viii
6.1.4. Otras aplicaciones del algoritmo . . . . . . . . . . . . . . . . . 90
6.2. Trabajos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.2.1. Mejora adaptativa . . . . . . . . . . . . . . . . . . . . . . . . 90
6.2.2. Aceleración por simetrı́a . . . . . . . . . . . . . . . . . . . . . 92
6.2.3. Mejora de orientación de quads por simetrı́a . . . . . . . . . . 93
6.2.4. Mejora en la búsqueda del punto cercano a la superficie . . . . 93
6.2.5. Remallado en zonas de mallas enfrentadas . . . . . . . . . . . 93
6.2.6. Remallado en zonas de cracks . . . . . . . . . . . . . . . . . . 94
Bibliografı́a
98
Índice de figuras
1.1. Animación de mallas mediante esqueleto . . . . . . . . . . . . . . . .
2
1.2. Sistema de generación automática de modelos . . . . . . . . . . . . .
3
1.3. Boceto 2D y modelo de malla poligonal . . . . . . . . . . . . . . . . .
4
2.1. Definición matemática de una esfera. . . . . . . . . . . . . . . . . . . 11
2.2. Superficie implı́cita basada en esqueleto. . . . . . . . . . . . . . . . . 11
2.3. Patrones de Marching Cubes . . . . . . . . . . . . . . . . . . . . . . . 16
2.4. Mejoras a Marching Cubes . . . . . . . . . . . . . . . . . . . . . . . . 16
2.5. Algoritmo de Hartmann . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.6. Algoritmo edge-spinning . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.7. Restricción de superficie 3D de Delaunay. . . . . . . . . . . . . . . . . 20
2.8. Pasos del algoritmo Marching Triangles . . . . . . . . . . . . . . . . . 20
2.9. Buen triángulo que generará crack . . . . . . . . . . . . . . . . . . . . 23
2.10. Problemas que presenta el algoritmo de Marching Triangles . . . . . . 23
2.11. Algoritmo de Edge-Constrained Marching Triangles . . . . . . . . . . 25
2.12. Mejora de Fournier al algoritmo Marching Triangles . . . . . . . . . . 25
2.13. Comparación entre algoritmos de poligonización . . . . . . . . . . . . 28
3.1. Restricción de Delaunay aplicable a quads . . . . . . . . . . . . . . . 34
3.2. Restricciones para evitar malos quads. . . . . . . . . . . . . . . . . . 35
ix
x
ÍNDICE DE FIGURAS
3.3. Proyección de puntos para quads. . . . . . . . . . . . . . . . . . . . . 37
3.4. Detección de vértices cercanos . . . . . . . . . . . . . . . . . . . . . . 38
3.5. Fallo en la proyección de un nuevo vértice . . . . . . . . . . . . . . . 39
3.6. Creación de quad utilizando arista enfrentada . . . . . . . . . . . . . 40
3.7. Alternativas de construcción de quads en Marching Quads . . . . . . 42
3.8. Problema: quad que provoca fallo de restricción en existente . . . . . 44
3.9. Problema: quad deformado en superficie muy curva . . . . . . . . . . 46
3.10. Generación del quad inicial . . . . . . . . . . . . . . . . . . . . . . . . 51
3.11. Alternativas para cerrar un crack. . . . . . . . . . . . . . . . . . . . . 55
3.12. Solapamiento de quad con crack . . . . . . . . . . . . . . . . . . . . . 57
5.1. Marching Quads básico sobre esfera . . . . . . . . . . . . . . . . . . . 69
5.2. Comparativa de variación del factor de tamaño de quad . . . . . . . . 69
5.3. Cierre de Cracks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.4. Poligonización del modelo de 5 esferas. . . . . . . . . . . . . . . . . . 72
5.5. Crecimiento de la malla ajustado a la simetrı́a . . . . . . . . . . . . . 73
5.6. Resultado de mejora de simetrı́a . . . . . . . . . . . . . . . . . . . . . 75
5.7. Comparación para mejora adaptativa . . . . . . . . . . . . . . . . . . 76
5.8. P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.9. Poligonización del modelo de humanoide. . . . . . . . . . . . . . . . . 79
5.10. Poligonización del modelo de humanoide sentado. . . . . . . . . . . . 80
5.11. Poligonización del modelo de perro. . . . . . . . . . . . . . . . . . . . 81
6.1. Problema de poligonización no adaptativa en modelos complejos . . . 85
6.2. Recorte del algoritmo adaptativo debido a estrechez del modelo. . . . 88
6.3. Modelo de perro recortado por el algoritmo adaptativo. . . . . . . . . 89
6.4. Solución a la limitación del algoritmo adaptativo. . . . . . . . . . . . 92
Capı́tulo 1
Introducción
1.1.
1.1.1.
Descripción del Problema
Mallas de quads de personajes para animación.
En el mundo de la animación por computadora, se encuentra ampliamente extendido el uso de modelos de mallas poligonales, las cuales están formadas por un
conjunto de polı́gonos en el espacio 3D. La unión de todos estos polı́gonos por medio
de sus aristas, permite representar la superficie del modelo.
En animación de personajes, a la malla poligonal se la denomina piel, ya que se
corresponde con la parte exterior y visible del modelo al que representa. Sin embargo,
para poder animar fácilmente el personaje, se utiliza un conjunto de elementos
estructurales internos a la piel del modelo el cual, por analogı́a con los elementos
estructurales de animales y humanos, se denomina esqueleto del modelo.
Un modelo de malla poligonal con esqueleto utiliza técnicas de skinning para
hacer coincidir los huesos del esqueleto con las zonas de la piel respectivas. De este
modo, el animador solo tiene que centrarse en mover el esqueleto y, la herramienta
de animación, automáticamente se encarga de deformar la malla poligonal acorde
a las poses que define el artista. La figura 1.1 muestra tres poses distintas de un
esqueleto formado por tres huesos, y la deformación de la piel correspondiente.
En sistemas de visualización en tiempo real como los videojuegos, los elementos
de las mallas suelen ser polı́gonos triangulares. Dada la caracterı́stica coplanar del
triángulo, y por ser el polı́gono más simple, el renderizado de estas mallas es muy
1
2
Capı́tulo 1. Introducción
Figura 1.1: (a) Malla poligonal de un modelo de cilindro con esqueleto de dos huesos
(b) Malla unida totalmente al hueso derecho. El movimiento de éste provoca que
toda la malla se mueva conjuntamente. (c) Malla unida a ambos huesos de forma
ponderada. El movimiento del esqueleto provoca una deformación suave en la malla.
(d) Malla unida totalmente al hueso izquierdo. El movimiento del hueso derecho
provoca que la malla no sea alterada.
rápido. Sin embargo, las mallas de quads obtienen mejores resultados cuando se desea
subdividir o deformar una malla. Debido a que la animación se basa en continuas
deformaciones del modelo, estos polı́gonos de cuatro vértices son más adecuados
para mallas orientadas a este propósito.
Para obtener modelos poligonales, existen multitud de herramientas CAD (Diseño Asistido por Computador), tales como Autodesk Maya [May10], Autodesk 3D
Max Studio [3Ds10] o Autodesk Softimage [Sof10], las cuales permiten modelar mallas en 3D. Sin embargo, el modelado de mallas es una tarea muy compleja, lenta
y tediosa. Esta complejidad aumenta cuando el diseñador del modelo es un artista
tradicional de dibujo en 2D, requiriendo o bien un aprendizaje de la herramienta
CAD, o bien la necesidad de un modelador para que traduzca el boceto 2D a un
modelo poligonal 3D.
1.1.2.
Generación automática de personajes.
Debido a que un dibujante tradicional de personajes suele no tener conocimientos
sobre herramientas CAD, serı́a ideal un proceso automático que obtuviera modelos
3D orientados a su uso para animación, a partir de bocetos del personaje diseñados
en 2D por el artista. Adicionalmente, para poder utilizar la malla obtenida en animaciones, el sistema deberı́a generar automáticamente una estructura esquelética
adaptada al modelo.
1.2. OBJETIVOS
3
Otra caracterı́stica interesante para el artista 2D serı́a la de permitirle generar
poses del modelo 3D, dibujando éstas en 2D. Un proceso automático serı́a el encargado de detectar el posicionamiento de la estructura esquelética para mover el
esqueleto de la malla de manera acorde al dibujo.
La motivación para la investigación de este trabajo, es la de crear una herramienta que permita automatizar la obtención de un modelo poligonal con estructura
esquelética, y para su uso en animación, a partir de imágenes bidimensionales que
defina el modelo 3D por medio de varias vistas ortogonales.
1.1.3.
Trabajos relacionados.
Actualmente, se está desarrollando un sistema similar que permite generar modelos 3D desde siluetas dibujadas en diferentes vistas 2D utilizando geometrı́a solida
constructiva [RDI10a, RDI10b]. La figura 1.2 muestra un modelo de avión dibujado
en vista frontal y lateral que es convertido en un modelo tridimensional.
El sistema que nosotros deseamos está orientado no a objetos estáticos, sino en
modelos de caracteres que permitan ser animados.
Figura 1.2: Sistema de generación automática de modelos a partir de siluetas dibujadas en 2D desarrollado en [RDI10a, RDI10b]. Un modelo de avión dibujado en
vista frontal y lateral (izquierda) es convertido en un modelo 3D (derecha).
1.2.
Objetivos
Se desea desarrollar un sistema que permita obtener mallas poligonales orientadas
a la animación de personajes, a partir de una definición del modelo dada por varias
imágenes bidimensionales correspondientes a vistas ortogonales (superior, lateral,
frontal, . . . ).
4
Capı́tulo 1. Introducción
El resultado final del sistema que se desea diseñar ha de ser una malla de polı́gonos cuadrangulares, conteniendo un sistema esquelético asociado para poder animar
el modelo. Además, cualquier caracterı́stica que pueda ser añadida al modelo resultante para mejorar su uso para animaciones, deberá ser contemplada en la investigación.
La figura 1.3 muestra un modelo definido en 2D en sus vistas frontal y superior.
La parte derecha de la imagen muestra el mismo modelo definido tridimensionalmente como una malla poligonal de quads, la cual ha sido diseñada ’a mano’ con
la herramienta Autodesk Maya [May10]. Lo que se pretende es conseguir que este
proceso de generación de la malla poligonal se realice de manera automática, sin
necesidad de recurrir a herramientas CAD.
Figura 1.3: Boceto 2D y su modelo de malla poligonal correspondiente realizado ’a
mano’ mediante la herramienta Autodesk Maya.
Otro objetivo que se desea alcanzar es el de diseñar una herramienta que permita
mover la estructura esquelética del modelo 3D obtenido en el sistema anteriormente
descrito, a partir de poses representadas en dibujos bidimensionales.
El sistema que se desea desarrollar, dada su complejidad, está dividido en cuatro
bloques más simples:
Obtención de un modelo implı́cito: Desarrollar una técnica que permita
detectar las siluetas de las imágenes bidimensionales, fusionarlas y obtener un
volumen tridimensional definido de forma implı́cita.
1.2. OBJETIVOS
5
Poligonización del modelo implı́cito: Debido a que el modelo resultante es
deseable que esté definido de forma explı́cita mediante una superficie poligonal,
se necesita desarrollar un algoritmo que permita pasar del volumen especificado
de forma implı́cita a una superficie de polı́gonos, preferiblemente quads.
Esqueletización de la malla: De las imágenes 2D se pueden obtener lı́neas
centrales en el modelo como lı́neas esqueléticas del mismo. Fusionando estos
esqueletos de cada imagen, se puede obtener un elemento estructural para el
modelo de malla obtenido en el bloque anterior. Para que este esqueleto estructural esté dividido en huesos, es necesario una técnica que permita detectar las
uniones entre huesos, observando aquellas zonas del volumen implı́cito donde
hay cambios.
Definición de poses: Se pretende hacer una coincidencia entre las estructuras esqueléticas de bocetos 2D con el esqueleto tridimensional. De esta forma,
se podrı́a hacer una traducción automática de una pose en el modelo bidimensional a la pose correspondiente en el modelo 3D.
Este documento presenta una técnica diseñada para resolver el problema planteado en el segundo bloque. Se propone un algoritmo que permite obtener una malla
poligonal de quads que aproxime la superficie del modelo definido de forma implı́cita
mediante un conjunto de esferas.
Los objetivos iniciales a alcanzar en esta investigación sobre poligonización de
superficies implı́citas eran:
Investigación, estudio y análisis sobre superficies implı́citas y algoritmos de
poligonización de las mismas. Esta tarea inicial permitirı́a conocer como se
encuentra el estado del arte en esta área de conocimiento y, mediante un
análisis, poder recopilar la información necesaria que permita el diseño del
poligonizador que mejor se adapte al sistema donde se desea implementar.
Porque las mallas de quads son muy utilizadas en animaciones de modelos con
esqueletos, se hace necesaria que la malla resultante estuviera compuesta por
este tipo de polı́gonos.
6
Capı́tulo 1. Introducción
Basándose en que los personajes suelen tener una cierta simetrı́a, se deseaba
investigar alternativas del poligonizador que obtenga mallas adaptadas a la
simetrı́a del modelo.
Serı́a útil un equilibrado de los parámetros del programa que permita obtener,
en tiempo razonable, mallas con un número de polı́gonos adecuado. Cualquier
parámetro que influya en la calidad final de la malla también deberı́a de ser
analizado.
Al igual que en los modelos generados mediante herramientas CAD, el tamaño
de los polı́gonos deberı́a ser variable en función de la curvatura del modelo.
1.3.
1.3.1.
Desarrollo del proyecto
Etapas de desarrollo
La investigación desarrollada, la cual se presenta en este documento, ha consistido de varias etapas:
1. En primer lugar se ha realizado una recopilación de información en el campo
de los modelos implı́citos, y de poligonizaciones de éstos. El estudio y análisis
de esta información, permitió escoger el algoritmo de poligonización más conveniente para el sistema general de creación automática de personajes 3D. En
concreto, el algoritmo escogido como punto de partida de este trabajo, ha sido
el de Marching Triangles.
2. A continuación se pasó a una fase en la que se implementó Marching Triangles para poder analizar su funcionamiento, e investigar cómo adaptarlo para
alcanzar los objetivos marcados.
3. El siguiente paso fue el de diseñar las estructuras de datos del programa. Para
poder comunicar la fase de detección de imágenes 2D con el poligonizador,
se diseñó un formato de fichero para definir las superficies implı́citas que son
entrada de datos del poligonizador. Luego, se diseñó una estructura de datos
para las superficies implı́citas y otra para mallas de Quads, estructuras que
1.3. DESARROLLO DEL PROYECTO
7
durante el desarrollo del proyecto han ido evolucionando para adaptarse a
nuevos requerimientos y modificaciones.
4. La siguiente etapa, el grueso de este proyecto de investigación, ha consistido en
la implementación del poligonizador Marching Quads. Primero se ha diseñado
un algoritmo básico, y a continuación se le han añadido varias mejoras que se
presentarán en este documento.
5. Una baterı́a de pruebas finales ha permitido validar el algoritmo y obtener
unas conclusiones de la investigación. También ha posibilitado la detección
de problemas y excepciones que abren una vı́a de posibles mejoras futuras,
documentadas en el capı́tulo 6.
La metodologı́a que se ha seguido, en concreto para los pasos 3 y 4 de las fases
anteriores, ha sido evolutiva e incremental. Se partió de un diseño del algoritmo
básico y, en base al análisis de resultados y a los nuevos requerimientos a añadir,
el algoritmo ha evolucionado hasta alcanzar la versión final que se presenta en este
documento.
Debido al carácter investigativo del proyecto, se ha utilizado un método de prueba
y error. Éste método consiste en formular hipótesis para resolver una tarea, probar la
idea y, en función del análisis de los resultados, validar la hipótesis. Como resultado
del análisis, nuevas ideas pueden surgir que permiten evolucionar el sistema.
1.3.2.
Herramientas utilizadas
Los algoritmos propuestos en este proyecto han sido implementados en lenguaje C++, utilizando el compilador gcc bajo el sistema operativo Ubuntu Linux en
su versión 9.10 Karmic Koala [Ubu10]. El código hace uso de la librerı́a QGLViewer versión 2.3.5 [QGL10] para el manejo de puntos, vectores y cuaterniones, éstos
últimos usados para rotaciones de vectores.
Con la finalidad de visualizar los modelos implı́citos iniciales y las mallas poligonales resultantes, se ha desarrollado un visor basado en las librerı́as gráficas OpenGL
versión 4 [Ope10]. Este visor ofrece además un entorno de pruebas y desarrollo del
algoritmo. También se ha manejado el visor interactivo de escenarios 3D GeomView
8
Capı́tulo 1. Introducción
en su versión 1.9.4 [Geo10].
Esta documentación del proyecto ha sido redactada y compilada con la herramienta para procesado de textos LATEX, utilizando el conjunto de herramientas MikTex versión 2.8 [Mik10] para el sistema operativo Windows XP SP 3. Se ha utilizado
el entorno de desarrollo eclipse versión Galileo [ecl10] utilizando el plugin Texlipse
versión 1.4 [tex10].
1.4.
Estructura del documento
En el siguiente capı́tulo, se abordará el estado del arte relacionado a este trabajo
de investigación. Dicho capı́tulo se encuentra dividido en tres partes: superficies
implı́citas, algoritmos de poligonización de superficies implı́citas, y una última parte
donde se detallarán los trabajos enfocados al algoritmo de poligonización Marching
Triangles, el cual ha sido elegido como base para el algoritmo que se presenta en
este documento.
El capı́tulo 3 detalla el algoritmo de Marching Quads que se ha desarrollado en
este proyecto de investigación. Este algoritmo está seccionado en cuatro partes que
serán analizadas por separado.
A continuación, el capı́tulo 4 muestra tres mejoras que se han diseñado e implementado para el algoritmo básico. Primero se comentará una mejora de aceleración
computacional del algoritmo, a continuación se hablará sobre una técnica que permite obtener una malla basada en la simetrı́a del modelo implı́cito, y finalmente se
detallará una mejora para adaptar el tamaño de los polı́gonos a la curvatura del
modelo.
El capı́tulo 5, exhibe los resultados obtenidos por esta nueva técnica que se
presenta. Y un último capı́tulo 6 expone las conclusiones que se han analizado de
los resultados generados. Además, este último capı́tulo ofrecerá una serie de lineas de
investigación futuras para mejorar el algoritmo, basadas en las carencias observadas
durante la interpretación de los resultados.
Capı́tulo 2
Estado del arte
El trabajo que se propone en este documento se trata de un algoritmo de poligonización de superficies implı́citas. Por ello, en este capı́tulo se hará un recorrido por
varios trabajos enfocados en este campo. En primer lugar se verá una introducción a
las superficies implı́citas. En una segunda sección, se abordarán varias técnicas existentes para convertir superficies implı́citas en mallas poligonales, y se terminará el
capı́tulo detallando el algoritmo de poligonización de superficies implı́citas Marching
Triangles, en el cual está basada la técnica que proponemos.
2.1.
Superficies implı́citas
Bloomenthal et al. realizaron un estudio bastante detallado y amplio sobre superficies implı́citas [BcBB+ 97]. Para ellos, una superficie implı́cita es una superficie
definida en el espacio 3D de forma matemática, mediante una función denominada
función implı́cita o potencial.
El volumen del modelo implı́cito se da para puntos cutos valores de función
potencial son inferiores a un valor umbral d. Valores de función que igualan al valor
umbral se corresponden con puntos de la superficie del modelo, y valores superiores
se corresponden con puntos externos al modelo. Generalmente se suele utilizar d = 0
como valor umbral.
9
10
Capı́tulo 2. Estado del arte
2.1.1.
Definición matemática
El punto P (x, y, z) pertenece a la superficie implı́cita si f (x, y, z) = 0, siendo f
la función implı́cita.
La forma más simple de superficie implı́cita en 3D es la esfera, cuya función
matemática es f (x, y, z) = (x − a)2 + (y − b)2 + (z − c)2 − r 2 , donde C(a, b, c) es
el punto espacial del centro de la esfera, y r es el radio de la misma. Los puntos
P (x, y, z) que generan valores 0 en la ecuación anterior, pertenecen a puntos de la
superficie de la esfera. Si el valor de la función fuera positivo, entonces el punto se
localizarı́a fuera de la esfera, y en el caso contrario, que resulte un valor negativo, el
punto pertenecerı́a al espacio interior de la misma. Normalmente, como es en el caso
anterior, el valor de la función implı́cita se corresponde con una medida de distancia
entre el punto y la superficie implı́cita.
2.1.2.
Vectores Normales
Condición necesaria para poder definir vectores normales a la superficie, la función implı́cita ha de ser continua y derivable. La forma de calcular este vector normal, para un punto cualquiera del espacio,es mediante el vector gradiente ∇f =
( ∂f
, ∂f , ∂f ) sobre las coordenadas del punto.
∂x ∂y ∂z
Por ejemplo, supongamos el caso de una esfera de radio unidad y centrada en el
origen, cuya función es f (x, y, z) = x2 + y 2 + z 2 − 1. El vector normal de la esfera,
, ∂f , ∂f ) = (2x, 2y, 2z). La figura 2.1 muestra puntos
se corresponde con ∇f = ( ∂f
∂x ∂y ∂z
localizados en el plano XY (z = 0), y sobre la superficie implı́cita de esta esfera de
ejemplo, y los vectores normales asociados a cada punto.
Para funciones no derivables, una aproximación puede ser calculada utilizando
métodos de cálculo numérico. Sin embargo, para un punto cuyo vector normal no
puede ser calculado, su gradiente puede ser calculado ponderando el de los puntos
vecinos. Estos puntos, como por ejemplo el de la cúspide e un cono, se denominan
puntos singulares.
2.1. SUPERFICIES IMPLÍCITAS
N (- 2 , 2 , 0)
n (- 2 /2, 2 /2, 0)
11
N (0, 2, 0)
n (0, 1, 0)
P (0, 1, 0)
P (- 2 /2,
2 /2, 0)
N (-2, 0, 0)
n (-1, 0, 0)
P (-1, 0, 0)
X
Y
Figura 2.1: (P) Puntos sobre la superficie
implı́cita x2 + y 2 + z 2 = 1, (N) normal y
(n) vector normal unitario.
2.1.3.
Figura 2.2: (a) Esqueleto implı́cito. (b) Superficie implı́cita que genera el esqueleto.
(c) Prototipo para obtener una rápida visualización (imagen obtenida de [BW90]).
Animación de superficies implı́citas
Una superficie implı́cita puede definirse mediante esqueletos. Los esqueletos pueden estar formados por puntos, segmentos, o incluso poliedros. Una distancia definida para cada elemento del esqueleto, permite obtener los puntos pertenecientes a la
superficie implı́cita. El ejemplo (a) de la figura 2.2 muestra un esqueleto formado por
segmentos, y el caso (b) muestra la superficie implı́cita que genera dicho esqueleto.
El esqueleto más básico es el punto, el cual define una esfera centrada en dicho
punto, y con un radio igual a la distancia definida. Una colección de puntos, con una
distancia asociada a cada uno, genera una superficie implı́cita como unión de todas
estas esferas. Este trabajo utiliza este tipo de definición de superficies implı́citas
basado en un conjunto de primitivas esféricas.
El movimiento de los esqueletos implı́citos implica cambios en la superficie implı́cita. De esta manera, se pueden fácilmente animar modelos implı́citos al deformarse
la superficie por medio de elementos estructurales. [Par02] contiene un apartado
donde se habla sobre la animación de superficies implı́citas, métodos de detección
de colisiones mediante aproximaciones a mallas poligonales, e incluso de un método
para deformar la superficie como respuesta a colisiones.
12
Capı́tulo 2. Estado del arte
Aun ası́, las mallas poligonales siguen siendo el tipo de modelos más extendido
en animaciones. Es por ello que se necesitan algoritmos, como el que se presenta en
este trabajo, que permitan convertir una superficie implı́cita en un modelo poligonal
que aproxime al modelo.
2.1.4.
Visualización de superficies implı́citas
La visualización de superficies implı́citas puede realizarse fácilmente utilizando
traza de rayos, mediante la búsqueda de puntos del espacio donde los rayos colisionan con la superficie implı́cita del modelo, resolviendo de forma matemática.
Sin embargo, este método es lento, dificultando tareas que necesitan un tiempo de
visualizado interactivo como el modelado de superficies implı́citas.
Existen otros métodos enfocados a obtener prototipos de la superficie implı́cita
rápidamente, tales como la rasterización, detección de contornos o muestreos [BW90,
DTG96, WH94]. Sin embargo, estos métodos no obtienen buenas visualizaciones ya
que están enfocados a obtener una visualización muy rápida. El ejemplo (c) de la
figura 2.2 muestra una visualización por prototipo mediante muestras discretas sobre
la superficie implı́cita.
Una alternativa más rápida que la traza de rayos para el visualizado es la de
obtener una aproximación del modelo mediante una malla poligonal. En la siguiente
sección se mostraran varias técnicas enfocadas a obtener mallas de polı́gonos que
aproximen una superficie de un modelo definido implı́citamente.
2.2.
Poligonización de superficies implı́citas
Tal y como se ha visto en la sección anterior, los modelos definidos implı́citamente
tienen muchas ventajas pero, en algunas ocasiones, es necesaria una versión del modelo definida mediante una malla poligonal. Algunos motivos de porqué poligonizar
una superficie implı́cita son:
Para generar una buena visualización del modelo implı́cito, suele utilizarse
un trazador de rayos, el cual obtiene buenos resultados a costa de un gasto
computacional muy pesado. Por otra parte, existen herramientas de modelado
2.2. POLIGONIZACIÓN DE SUPERFICIES IMPLÍCITAS
13
implı́cito basados en técnicas de escultura [DC04, FCG01], las cuales necesitan
obtener buenas visualizaciones en tiempos interactivos. Para estos casos, es
posible visualizar el modelo mediante una aproximación de malla poligonal.
En ocasiones, es necesario trabajar con métodos que necesiten discretizar una
superficie implı́cita (métodos finitos, detección de colisiones, . . . ). En estos casos, la poligonización del modelo permite obtener un conjunto finito de puntos
sobre la superficie correspondiéndose a los vértices de la malla.
Es muy común el uso de modelos poligonales en el mundo de la computación
gráfica, incluso algunos autores lo consideran como el estándar para representar superficies geométricas, y la mayorı́a de sistemas gráficos (videojuegos,
aplicaciones médicas, sistemas de simulación, . . . ) tratan con este tipo de modelos. Sin embargo, existen ocasiones en los que los modelos adquiridos de de
forma implı́cita, bien directamente por un modelador o bien por un sistema
automático que genera este tipo de superficies. En estos casos, se requiere una
poligonización del modelo.
En nuestro sistema de creación automática de personajes 3D, la técnica que
permite obtener un modelo tridimensional a partir de la definición bidimensional
obtiene una definición del mismo de forma implı́cita, mediante una colección de
primitivas esféricas. Por ello, se hace necesaria una fase que permita poligonizar la
superficie para su uso en sistemas de animación.
En general, las técnicas de poligonización de superficies implı́citas se pueden
dividir en tres grupos distintos.
Muestreo espacial: Son técnicas que dividen el espacio para localizar puntos
sobre la superficie implı́cita en cada muestra, y a la vez unir dichos puntos de
cada muestra para generar los polı́gonos de la malla.
Ajustes a la superficie: Estas técnicas parten de una malla poligonal inicial o
muestras iniciales, y tratan posteriormente de ajustar los vértices o muestras a
la superficie. Este ajuste suele realizarse mediante una simulación de partı́culas
que permite a las muestras converger hacia la superficie hasta llegar a un
14
Capı́tulo 2. Estado del arte
equilibrio entre partı́culas. En el caso de partir de un set de muestras inicial,
se requiere un paso posterior que permita poligonizar las mismas.
Recorrido de la superficie: Estas técnicas comienzan a partir de polı́gonos
semilla que forman una malla inicial y, a partir de ellos, se van generando nuevos polı́gonos que se anexan a las aristas que bordean la malla. Iterativamente
el modelo poligonal va añadiendo polı́gonos mientras se recorre la superficie
implı́cita, hasta que se consigue cerrar la malla.
2.2.1.
Marching Cubes
Una de las técnicas de poligonización de superficies implı́citas más influyentes ha
sido la de Marching Cubes [LC87]. La técnica surgió por la necesidad de visualizar
modelos 3D definidos mediante una colección de imágenes médicas obtenidas por
escáneres (resonancias magnéticas, tomografı́as, . . . ). Esta visualización permitirı́a
analizar más fácilmente a un especialista médico las imágenes que se obtienen de los
escáneres.
El sistema se compone de dos fases: una primera técnica permite la fusión de
imágenes en un modelo definido implı́citamente, y una segunda donde se utiliza el
algoritmo de Marching Cubes para generar la malla de triángulos que un sistema
de visualización puede manejar para permitir al médico interactuar con el modelo.
Este sistema, en esencia es similar al de creación de personajes 3D, pues consta de
una fase que permite fusionar imágenes 2D y de otra que permite obtener la malla
de polı́gonos.
El algoritmo de poligonización Marching Cubes descompone el espacio en cubos
de igual tamaño, evaluándose en los vértices de los mismos la función implı́cita.
A continuación se detectan aquellos cubos que han evaluado con signo contrario
alguno de los vértices. Cómo los puntos que evalúan a cero pertenecen a la superficie
implı́cita, estos cubos son los que cortan a la superficie implı́cita.
Un cubo tiene 8 vértices que pueden tener dos estados diferentes, dentro o fuera
de la superficie, por lo que existen 28 = 256 maneras distintas en las que la superficie
implı́cita puede cortar un cubo. Por simetrı́a, este conjunto de patrones puede ser
reducido a 14 (ver figura 2.3). Utilizando estos patrones, la superficie poligonal se
2.2. POLIGONIZACIÓN DE SUPERFICIES IMPLÍCITAS
15
obtiene interpolando en las aristas de todos los cubos del espacio.
Para finalizar el modelo se generan las normales mediante interpolación de las
normales de los vértices de los cubos, y se realiza un mapeo de texturas a partir de
las imágenes médicas.
Esta técnica sufre de varios inconvenientes. Uno de ellos es la ambigüedad que
surge en algunos casos, debido a que un cubo puede corresponderse con varios patrones. Enfocados a este problema existen diversas técnicas que lo resuelven, y una
de ellas utiliza como poliedro de división espacial el tetraedro [MW97], el cual no
provoca ambigüedades.
Otro inconveniente de Marching Cubes es la generación de multitud de triángulos
deformados (triángulos de forma alargada) debido al tamaño constante de la partición espacial, y los cuales deben de ser evitados. Para resolver este problema, en
[Blo88] Bloomenthal presenta una mejora adaptativa a la partición espacial utilizando Octrees (ver ejemplo (a) de la figura 2.4). Esta técnica descompone el espacio en
8 cubos, y gradualmente va descomponiendo aquellos cubos que cortan la superficie
implı́cita hasta alcanzar un cierto tamaño mı́nimo para los cubos.
Aunque todas estas técnicas reproducen una buena aproximación del modelo,
son computacionalmente costosas. Además, porque estas técnicas no se centran en
mantener buena topologı́a de la malla resultante, se obtienen multitud de triángulos
algo deformados.
2.2.2.
Técnicas de simulación de partı́culas
Ya se vio en la sección 2.1.4 cómo una superficie implı́cita puede ser muestreada
usando métodos basados en fı́sicas para su visualización. La misma idea se puede
utilizar para obtener una malla poligonal, tal y como se presenta en [dFdMGTV92].
Este trabajo muestra dos formas de realizar la simulación fı́sica. La primera es
utilizar un sistema de partı́culas dinámico, simulado mediante el campo de fuerza
que genera el gradiente del modelo. Cuando la simulación llega a un equilibrio,
debido a que las partı́culas buscan minimizar la energı́a potencial, éstas se localizan
sobre la superficie implı́cita. Además, las partı́culas se encuentran distanciadas de
forma uniforme y adaptadas a la curvatura de la superficie. Para obtener la malla
16
Capı́tulo 2. Estado del arte
Figura 2.3: Diferentes patrones en los
que un cubo puede cortar a la superficie
implı́cita (imagen extraı́da de [LC87]).
Figura 2.4: (a) Mejora adaptativa a Marching Cubes utilizando un Octree. (b)
Técnica de rastreo de superficie mediante cubos (imágenes extraı́das de [Blo88]).
poligonal, la nube de partı́culas resultantes se triangula mediante el algoritmo de
Delaunay [Del34].
La otra simulación fı́sica que presentan, se realiza mediante un sistema de masamuelle. Este sistema comienza con una triangulación espacial, cuyos polı́gonos se
encuentran conectados por muelles. Utilizando el gradiente como fuerza de deformación, la malla inicial tiende hacia la superficie, a la vez que los muelles permiten
distanciar a los vértices de forma uniforme.
Aunque estas técnicas obtienen buenos resultados, es necesario que la superficie
implı́cita requiera de un campo de fuerzas para poder realizar la simulación. Debido
a que el cálculo del gradiente es una tarea compleja en los modelos implı́citos que
se utilizan en este trabajo, ya que es complicado calcular el campo de fuerza en
un punto interno a varias primitivas implı́citas, estos sistemas de simulación fueron
descartados en esta investigación.
2.2. POLIGONIZACIÓN DE SUPERFICIES IMPLÍCITAS
2.2.3.
17
Técnicas de rastreo de superficie
Estas técnicas comienzan desde un polı́gono inicial, localizado sobre la superficie
implı́cita, e iterativamente van añadiendo polı́gonos a la frontera de la malla hasta
lograr cerrarla. La construcción de los nuevos polı́gonos son obligados a ajustarse a
la superficie implı́cita para ir recorriendo la superficie del modelo.
Bloomenthal presentó una técnica de poligonización basado en rastreo de superficie [Blo88] (ver ejemplo (b) de la figura 2.4). Su propuesta parte de un cubo semilla
sobre la superficie implı́cita, e iterativamente va recorriendo la superficie mediante
la construcción de más cubos. Utilizando los patrones de Marching Cubes en cada
cubo, se va generando la malla poligonal. Sin embargo, esta técnica genera triángulos
algo deformados al igual que Marching Cubes.
Otra técnica de rastreo de superficies es la propuesta por Hartmann [Har98], la
cual se descompone de varios pasos. En el primero de ellos, se localiza un punto
sobre la superficie y se crea un hexágono centrado en dicho punto, y se localizan los
puntos más cercanos sobre la superficie para cada uno de los vértices del hexágono.
De este modo se obtienen los seis primeros triángulos de la malla.
De forma iterativa, el algoritmo intenta crear nuevos hexágonos desde los vértices
que bordean de la malla, priorizando el orden de procesamiento en base al ángulo
de los vértices en la zona exterior de la malla. A partir del vértice escogido se genera
un nuevo hexágono detectando aquellos vértices cercanos (ver figura 2.5).
Otra técnica de recorrido de superficie es Edge Spinning [CS04]. Al igual que las
anteriores, se parte de un triángulo inicial localizado sobre la superficie implı́cita, y
de forma iterativa se anexan nuevos triángulos para completar la malla. Para ello, se
buscan nuevos vértices sobre la superficie implı́cita que permitan formar un nuevo
polı́gono desde una arista del borde de la malla.
La búsqueda del nuevo vértice se realiza proyectando un punto a una cierta
distancia desde la arista frontera en el plano de su triángulo, y sobre un cı́rculo
centrado en la arista que permita garantizar que el nuevo polı́gono no es deformado.
Computando la función implı́cita y el gradiente, se rota el punto proyectado de
manera iterativa hasta encontrar un punto que descanse sobre la superficie implı́cita
(ver figura 2.6).
18
Capı́tulo 2. Estado del arte
Este algoritmo permite validar los triángulos que se crean computando el ángulo
que forman con las aristas vecinas. Los tres casos posibles de construcción del nuevo
triángulo son: construcción directa, construcción utilizando alguna de las aristas
vecinas o, en caso de arista vecina corta, proceder a una reparación de la malla.
La técnica, controla que los nuevos vértices que se crean no se encuentren cerca de
la frontera de la malla. En estos casos se fusionan ambas fronteras, o bien fusionando
el nuevo vértice con el cercano encontrado, o bien fusionando el vértice cercano al
nuevo.
Figura 2.5: Hexágono que permite poligonizar parte de la superficie implı́cita en el
algoritmo de Hartmann (imagen extraı́da
de [Har98]).
Figura 2.6: Principio de construcción
de un nuevo triángulo por el algoritmo de edge-spinning (imagen extraı́da de
[CS04]).
Otra técnica de poligonización de superficies por rastreo de superficie es la denominada Marching Triangles [HSIW96a, HSIW96b], muy similar a al algoritmo
anterior aunque restringiendo la creación de los nuevos triángulos a un test de topologı́a basado en la triangulación de Delaunay [Del34].
En nuestro sistema de creación automática de personajes 3D, la calidad de la
malla poligonal es más prioritaria que la rapidez de computación de la misma. El
motivo es la finalidad del modelo para su uso en animaciones que requieren una
buena estructura topológica de la malla, sin necesidad de obtención de la ella en
tiempos interactivos.
De los algoritmos anteriores, el algoritmo de Marching Triangles es quizás el
que mejor calidad de malla obtiene, ya que basa la construcción de los polı́gonos
en una restricción topológica. Además, este algoritmo es uno de los más aceptados
actualmente para poligonizar superficies implı́citas, existiendo una amplia variedad
2.3. MARCHING TRIANGLES
19
de trabajos encaminados a mejorarlo [HIIT97, AG01, MF02, Fou09].
Por los motivos anteriores, Marching Triangles ha sido el algoritmo escogido
como base para el trabajo que aquı́ se presenta. Por ello, en la siguiente sección se
detallará este algoritmo junto a los trabajos relacionados.
2.3.
Marching Triangles
El algoritmo de Marching Triangles, presentado por Hilton et ál. [HSIW96a],
es una técnica de poligonización de superficies implı́citas basado en el rastreo de
superficie, la cual fue diseñada para poligonizar superficies extraı́das como fusión de
un rango de imágenes [HSIW96b].
Es algoritmo parte de un triángulo semilla localizado sobre la superficie implı́cita,
e iterativamente añade nuevos triángulos desde las aristas que bordean la malla
hasta que se completa la malla. Para preservar una correcta topologı́a de la malla,
un nuevo triángulo solamente puede ser anexado a la malla si pasa la restricción
de superficie 3D de Delaunay, la cual permite validar que el polı́gono mantiene una
buena estructura de malla.
La restricción de Delaunay para superficies 3D aprueba la anexión de un nuevo triángulo Tnew a la frontera de la malla, si alguna parte de ésta con la misma
orientación que Tnew , no se encuentra dentro de la circumesfera del triángulo Tnew ,
siendo ésta la esfera que pasa por los tres vértices de dicho triángulo. Esta restricción
está basada en el algoritmo de Delaunay para triangular una nube de puntos, pero
extendida para superficies triangulares en el espacio 3D.
En la figura 2.7 se muestra un ejemplo de triángulo, y su esfera circunscrita que
hace de restricción. Esta esfera está situada en el circumcentro Ct del triángulo y pasa
por los tres vértices del mismo. En caso de que alguna parte de la malla estuviese
dentro de la esfera, entonces el algoritmo descarta la construcción del triángulo.
Marching Triangles es un proceso iterativo que escoge una arista frontera de
una lista de aristas que quedan por computar, e intenta crear un nuevo triángulo a
partir de ella. Por cada iteración del algoritmo, donde se computa una de las aristas
frontera de la lista ebound = e(xi , xj ), los pasos que realiza el algoritmo son:
20
Capı́tulo 2. Estado del arte
Figura 2.7: Restricción de superficie
3D de Delaunay (imagen extraı́da de
[HSIW96a]).
Figura 2.8: Ejemplos 2D de los pasos (a)1; (b)-4; (c)-6 del algoritmo de Marching
Triangles. El caso (d) se corresponde con
el paso añadido en el reporte técnico posterior (Imagen extraı́da de [HIIT97]).
1. Estimación del nuevo vértice del triángulo localizando un punto aproximado
xproj al proyectar una distancia constante lproj desde el punto medio de la
arista, y en el plano del triángulo frontera Tbound (xj , xi , xk ).
2. Se busca el punto xnew sobre la superficie implı́cita más cercano a xproj .
3. Se descarta esta arista (termina este paso de iteración) si la orientación de
la superficie implı́cita en xnew , dada por su normal nnew , es opuesta a la del
modelo nT (normal del nuevo triángulo Tnew (xi , xj , xnew )): nT · nnew < 0. Este
paso asegura que el nuevo vértice no se corresponde con una zona errónea del
modelo, sino a la geometrı́a local del objeto.
4. Se aplica la restricción de Delaunay en 3D al nuevo triángulo Tnew = T (xi , xj , xnew ).
5. Si Tnew pasa la restricción, entonces se añade Tnew , xnew y las aristas e(xj , xnew )
y e(xnew , xi ) a la malla actual. Estas aristas nuevas además son añadidas a la
lista de aristas frontera para ser computadas en una iteración del algoritmo
posterior, y ası́ permitir a la malla crecer.
6. En el caso de que la restricción falle, se repiten los dos pasos anteriores 4 y 5 utilizando los vértices frontera adyacentes: el vértice vecino previo Tprev (xi , xj , xprev )
2.3. MARCHING TRIANGLES
21
y el vértice vecino siguiente Tnext (xi , xj , xnext ). Este paso intenta crear triángulos que conecten vértices de la malla que permitan cerrar zonas de la malla.
7. Si en los tres intentos de creación de un triángulo falla la restricción (de forma
directa, usando arista anterior y usando arista posterior), entonces la arista
ebound es descartada sin producir un nuevo triángulo para la malla.
El algoritmo de Marching Triangles, por estar basado en triangulaciones de Delaunay, genera mallas topológicamente correctas (triángulos que tienden a la equilateralidad), y es computacionalmente más rápido que el anterior algoritmo de referencia más extendido, el de Marching Cubes.
Sin embargo, este nuevo algoritmo genera cracks en zonas de la malla donde
las fronteras se encuentran enfrentadas, ya que la restricción impide cerrar la zona.
Por este motivo, los mismos autores proponen una solución a este problema en un
reporte técnico posterior [HIIT97].
La solución que aportan es la de añadir un paso más al algoritmo de intento de
construcción del nuevo triángulo. Este paso trata de crear el nuevo triángulo utilizando un vértice solapado. Para ello, se busca si hay algún triángulo Toverlap de la malla
que se encuentre dentro de la esfera de Delaunay del triángulo Tnew (xi , xj , xnew ),
ambos con misma orientación. En este caso, se aplican los pasos 4 y 5 del algoritmo
para testear la restricción de Delaunay al triángulo T (xi , xj , xoverlap ) donde xoverlap
es el vértice más cercano del triángulo solapado Toverlap .
En la figura 2.8 se muestran ejemplos de cuatro de los pasos más importantes del
algoritmo de Marching Triangles, donde la arista que se está computando se corresponde con ebound = e(xi , xj ), que pertenece al triángulo frontera Tbound (xj , xi , xk ).
El ejemplo (a) está asociado al paso 1 del algoritmo, el cual estima el nuevo vértice
del triángulo a través de una distancia constante de proyección. El ejemplo (b) se
corresponde con el paso 4 del algoritmo donde se testea la restricción de Delaunay
para el triángulo que usa el nuevo vértice proyectado. En (c), correspondiente al paso
6, se muestra un triángulo creado usando la arista vecina siguiente, y la esfera para
chequear la restricción. En el ejemplo (d) se muestra el paso añadido en el reporte
técnico para cerrar la malla. Nótese como el vértice solapado es utilizado para crear
un triángulo que permite unir la parte superior e inferior de la malla, evitando una
22
Capı́tulo 2. Estado del arte
brecha en la zona.
2.3.1.
Marching Triangles adaptativo
En un trabajo posterior de Akkouche y Galin [AG01], se analizan varios problemas que sufre el algoritmo de Marching Triangles original, y se proponen varias
alternativas de mejoras.
Uno de los inconvenientes que sufre el algoritmo es la aparición de cracks en la
malla, incluso utilizando la alternativa de solapamiento del reporte técnico. Esto es
debido a que la restricción de Delaunay solamente tiene en cuenta la topologı́a del
nuevo triángulo con respecto a la malla actual, sin tener en cuenta futuros triángulos
que podrı́an haber tenido una mejor esfera de restricción.
En la figura 2.9 se está computando la arista e probando la restricción de Delaunay para el triángulo T usando la esfera S. Esta restricción valida la construcción del
nuevo triángulo, ya que no hay parte de la malla dentro de la esfera. Sin embargo,
el nuevo punto xp no satisface la restricción para una existente arista frontera en el
triángulo T’, ya que se encuentra dentro de su esfera de restricción S’. Por contra,
nótese que si se hubiese procesado antes la arista de T’ en vez de la de T, el punto
xp podrı́a haber quedado más intermedio a ambas aristas evitando el crack.
Conscientes de que cracks se producen en la malla, y de que éstos son difı́cilmente
evitables, Akkouche y Galin proponen un algoritmo para cerrar los resultantes cracks
en una segunda pasada del algoritmo. Este procedimiento para rellenar los agujeros
simplemente conecta los vértices del crack sin crear nuevos, en base a que el tamaño
del crack no excede el tamaño de un triángulo porque en caso contrario la restricción
de Delaunay habrı́a permitido la construcción de alguno. Este algoritmo tiene dos
fases:
Partición del contorno: de forma iterativa se busca una arista del crack que
pueda ser unida a un vértice del mismo, de forma que el triángulo resultante
divida al crack en dos más pequeños. Esta división se realiza iterativamente en
cada uno de los cracks resultantes hasta que un mı́nimo de tamaño de crack
es alcanzado, o el crack no puede ser partido en más mitades.
2.3. MARCHING TRIANGLES
Figura 2.9: Ejemplo de triángulo T que
pasa la restricción de Delaunay, pero que
posiblemente generará un crack por no tenerse en cuenta un triángulo T’ de la malla
existente (imagen extraı́da de [AG01]).
23
Figura 2.10: Tres problemas que presenta el algoritmo de Marching Triangles. (a)
Triángulo que cruza otro existente debido a una arista corta. (b) Triángulo que
no localiza la existencia de un vértice cercano. (c) Triángulo que solapa otro existente (imagen extraı́da de [MF02]).
Mallado del contorno: se finaliza rellenando los huecos existentes mediante
triángulos. En este paso hay que diferenciar entre dos casos distintos: el de
huecos simples y el de emparejamiento de contornos enfrentados, el cual es más
complejo. La dificultad de este último caso reside en distinguir las situaciones
en las que hay que unir contornos, o cuando no es necesario ya que pertenecen
a distintas partes de la malla.
Otra importante mejora que añaden al algoritmo original es la de construir los
triángulos de forma que su tamaño se adapte la curvatura del modelo. Para ello se
varı́a la distancia de proyección en función a la curvatura de la superficie implı́cita
donde el nuevo triángulo va a ser creado. Aunque se puede evaluar las hessianas de
la función campo para anticipar la curvatura de la arista a computar, ellos proponen
una alternativa más rápida en tres pasos:
Corrección geométrica: se proyecta el punto medio xm de la arista a computar e sobre la superficie implı́cita para obtener el punto xs .
Computación del punto de partida: siguiendo la dirección tangencial a
√
la superficie ~t, se proyecta xs una distancia d = 3 ||~e|| para aproximar un
2
24
Capı́tulo 2. Estado del arte
triángulo equilátero. La distancia e es la media entre las longitudes de la
arista a computar y sus vecinas para mantener un tamaño medio de triángulo.
Además se utiliza un lı́mite mı́nimo de distancia para que, en regiones planas,
no se creen triángulos demasiado pequeños después de haber atravesado una
región de alta curvatura.
Computación del vértice sobre la superficie: mediante bisección entre un
punto fuera de la superficie implı́cita y otro interior, y utilizando el gradiente
de la función implı́cita, se aproxima el punto obtenido en el paso anterior a la
superficie implı́cita.
En este mismo trabajo, ambos autores también proponen el uso de su algoritmo
como parte de una herramienta de modelado implı́cito interactiva basado en esqueletos. Para ello, utilizan una técnica incremental que permite eliminar triángulos de
una zona de la malla donde la superficie implı́cita ha sido modificada, generando un
conjunto de aristas fronteras debido al agujero que se forma. Invocando el algoritmo
de Marching Triangles posteriormente sobre esta lista de aristas, la malla se vuelve
a cerrar, ajustándose los nuevos triángulos a la nueva superficie modelada.
2.3.2.
Marching Triangles con restricción para aristas
McCormick y Fisher desarrollaron una técnica [MF02] orientada a mejorar las
mallas que se obtienen en Marching Triangles para modelos con aristas que unen
polı́gonos en un ángulo bastante abrupto (por ejemplo aristas que unen el techo con
la pared de un edificio), ya que estas aristas suelen ser recortadas por el algoritmo
de Marching Triangles (ver ejemplo (a) de la figura 2.11).
La técnica que proponen los autores permite preservar las aristas que se encuentran en zonas angulosas. Primeramente se localizan dobleces mediante un chequeo de
discontinuidades en el modelo, generando aristas en las lineas que forman la discontinuidad. A continuación, utilizan el algoritmo de Marching Triangles para generar
los polı́gonos del modelo, restringiendo estos a las aristas de discontinuidades antes
creadas (ver ejemplo (b) de la figura 2.11).
2.3. MARCHING TRIANGLES
Figura 2.11: (a) Detalle de esquina en
un modelo recortada por Marching Triangles. (b) Detección de lı́neas de dobleces
por algoritmo Edge-Constrained Marching
Triangles y aristas de polı́gonos restringidas a la lı́nea de doblez (imágenes extraı́das de [MF02]).
2.3.3.
25
Figura 2.12: (a) Modificación de la esfera
de restricción en el algoritmo de Fournier.
(b1 ) Malla resultante de computar la arista A antes que B y (b2 ) comparación de
la malla al computar primero la arista B
(imágenes extraı́das de [Fou09]).
Marching Triangles evitando generación de cracks
Existe un proyecto más reciente de mejora del algoritmo Marching Triangles
desarrollado por Fournier [Fou09]. Este trabajo se enfoca en realizar la poligonización en una única pasada, sin la necesidad de un proceso para cerrar cracks. Además,
introducen una adaptación del algoritmo a un reciente modelo de definición de superficies implı́citas basado en vectores (Vector Field Distance Transform) [FDB07].
En este trabajo, Fournier detecta varios problemas en el algoritmo original de
Marching Triangles. El caso (a) de la figura 2.10 muestra uno de estos problemas,
donde un triángulo muy estrecho es creado desde una arista muy corta. Además,
aunque este nuevo triángulo solapa otro ya existente en el modelo, el polı́gono no
es descartado debido a que su esfera de restricción de Delaunay no contiene algún
vértice de la malla.
El caso (b) destapa otra deficiencia del algoritmo original. En el ejemplo se crea
un nuevo triángulo que aparentemente es bueno, pero que no tiene en cuenta que
tiene un vértice cercano dejando un espacio libre muy estrecho. Esto provocará que
en iteraciones más avanzadas, o bien se cree un triángulo muy estrecho (deformado),
26
Capı́tulo 2. Estado del arte
o bien se genere un crack en la zona.
El último caso de la figura 2.10 presenta otro problema en la construcción de
triángulos. En esta ocasión, el vértice proyectado intersecta un triángulo existente,y
sin embargo la esfera de restricción permite su construcción. Este caso es muy similar
al visto en la figura 2.9, ya que se tiene solo en cuenta que el nuevo triángulo sea
topológicamente bueno con respecto al resto de la malla, pero no tiene en cuenta
que el resto de la malla lo sea con el nuevo vértice.
Las diferentes mejoras que plantean para el algoritmo, en su versión para campos
escalares, se resumen en:
Mejora para la estimación del nuevo vértice: para adaptar el triángulo
a la curvatura, se proyecta un punto cierta distancia dependiente de la arista
frontera, al igual que se propuso en [AG01]. A continuación, localizando el
vóxel más cercano sobre la superficie implı́cita, e interpolando a entre éste y
su vóxel de signo opuesto (al otro lado de la superficie implı́cita), se obtiene
el punto más cercano sobre la superficie.
Mejora al test de Delaunay: debido a que la esfera de Delaunay es propensa
a producir cracks en la malla, una nueva esfera es propuesta en este trabajo
que relaja la restricción, y que permite que más triángulos sean aceptados.
Se utiliza una esfera más pequeña que pasa por el nuevo vértice y el punto
medio de la arista a procesar, y por tanto centrada en el punto medio de
ambos (ver ejemplo (a) de la figura 2.12). Porque esta nueva esfera no engloba
todo el triángulo, es necesario un test adicional para comprobar que no hay
intersección entre el nuevo triángulo y los existentes en la malla.
Mejora a la construcción de triángulos por alternativas: como adición
a las alternativas que el algoritmo original realiza en caso de fallo (usando
la arista vecina previa, usando la arista vecina siguiente y usando un vértice
solapado), se propone cambio en el caso de encontrarse vértices solapados. Si
el vértice solapado produce un fallo en la restricción de Delaunay, es posible
que algún otro vértice solapado en la esfera pueda ser construido satisfactoriamente. Por ello se hace necesaria la comprobación no solamente del vértice
solapado más cercano, sino de todos los vértices solapados que se localicen.
2.4. CONCLUSIONES
27
Mejora al orden de procesamiento de aristas: según el orden de procesado de las aristas frontera en el proceso iterativo del algoritmo de Marching
Triangles, se obtienen diferentes triangulaciones en la malla resultante (ver
ejemplo (b) de la figura 2.12). El algoritmo original no contempla un orden
especifico, sino que utiliza una cola. Fournier probó diferentes alternativas y
llegó a la conclusión de que se obtiene mejores resultados, en cuanto a minimizar el número de cracks en la malla se refiere, utilizando un orden de
procesado siguiendo el contorno de la malla. Para ello se escogen las aristas
siguiendo una dirección, por ejemplo hacia la arista vecina siguiente desde la
arista procesada.
2.4.
Conclusiones
La primera fase del sistema de creación automática de personajes 3D a partir
de imágenes 2D es la encargada de traducir el modelo definido por las imágenes
en un modelo volumétrico definido implı́citamente mediante un conjunto de esferas.
Por este motivo, el poligonizador que se presenta en este trabajo ha tenido que ser
adaptado a esta representación del modelo implı́cito inicial.
Aunque es sencillo detectar si un punto se encuentra interior, exterior o sobre la
superficie implı́cita definida por un conjunto de esferas, es más complejo obtener el
campo de fuerzas interno al modelo mediante el cálculo del gradiente. Es por este
motivo que algoritmos de poligonización basados en simulación fueron descartados
para este trabajo.
El algoritmo de Marching Triangles, en base a la información recopilada, parece
ser el algoritmo de poligonización más aceptado en la actualidad. El motivo de esta
aceptación es porque la técnica, por estar basada en la restricción de Delaunay,
está orientada a la obtención de mallas topológicamente buenas. Los casos (a) y (b)
de la figura 2.13 demuestran que la malla obtenida con Marching Triangles tiene una
estructura de polı́gonos bastante homogénea con respecto a la malla que se obtiene
con el anterior algoritmo de poligonización de referencia de Marching Cubes, el cual
no atiende a la forma de los polı́gonos que genera.
Porque Marching Triangles es el algoritmo de referencia actual, y además existen
28
Capı́tulo 2. Estado del arte
Figura 2.13: Malla obtenida con diferentes algoritmos de poligonización para una
superficie implı́cita de esfera: (a) Marching Cubes; (b) Marching Triangles; (c) Marching Quads (imágenes (a) y (b) obtenidas de [HIIT97]).
multitud de trabajos que permiten mejorar este algoritmo (sección 2.3), en esta
investigación se decidió utilizar una técnica similar para ser usada como segunda
fase del sistema de generación automática de personajes 3D.
Sin embargo, el algoritmo de Marching Triangles, éste no está enfocado a obtener
mallas para su uso en sistemas de animación. Las mallas deformables de personajes suelen estar construidas con polı́gonos cuadrangulares, situados y orientados en
base a la simetrı́a del modelo, ya que estas caracterı́sticas facilitan la animación de
personaje.
En un principio, para obtener mallas de quads, se podrı́a haber realizado una
poligonización mediante Marching Triangles y un paso posterior de conversión a
malla de quads. Sin embargo, se ha optado por una adaptación de Marching Triangles para generar directamente una malla de quads. Esta adaptación es el algoritmo
deMarching Quads que se presenta en este documento, y el cual permite además
adaptar los quads a la simetrı́a y a la curvatura del modelo.
El ejemplo (c) de la figura 2.13 permite comparar la malla poligonal de un modelo
esférico con respecto a la malla que se obtiene con los algoritmos de referencia anteriores. Se puede observar que Marching Quads genera una malla mayoritariamente
compuesta por polı́gonos cuadrangulares.
Capı́tulo 3
Algoritmo de Marching Quads
3.1.
3.1.1.
Introducción
Estructura del algoritmo
El algoritmo de Marching Quads que se presenta a continuación es una adaptación de los pasos del algoritmo de Marching Triangles (sección 2.3) para generar
polı́gonos cuadrangulares. Al igual que en Marching Triangles se parte de un polı́gono
inicial, que en este caso es un quad, e iterativamente se añaden nuevos a la frontera
de la malla hasta completar la superficie del modelo.
El algoritmo de Marching Quads consta de los siguientes pasos:
1. Se localiza un quad sobre la superficie implı́cita, se añaden todos los elementos
del quad semilla al modelo poligonal M y se introducen las cuatro aristas en
la cola de aristas a computar Ce , ya que son frontera de la malla.
2. Algoritmo deMarching Quads.
a) Se obtiene una arista eb del frente de la cola Ce . Si la cola se encuentra
vacı́a, se finaliza el algoritmo de poligonización accediendo al paso 3.
b) Dos puntos P1 y P2 son proyectados desde cada uno de los vértices V1
y V2 de la arista eb una distancia constante lproj en el plano del quad
frontera Qb (V1 , V2 , V3 , V4 ), y perpendiculares a la arista eb .
c) Para cada uno de los dos puntos proyectados P1 y P2 , se localizan los
puntos más cercanos a la superficie implı́cita Vnew1 y Vnew2.
29
30
Capı́tulo 3. Algoritmo de Marching Quads
d ) Si la malla M contiene un vértice Vnear1 cercano a Vnew1, entonces Vnew1 =
Vnear1 . Análogamente, se localiza el vértice más cercano a Vnew2 si existiese.
e) Utilizando la arista eb , y los dos nuevos vértices Vnew1 y Vnew2, se crea
un nuevo quad Qnew (V1 , Vnew1, Vnew2, V2 ). Si el modelo tiene orientación
opuesta a Qnew en alguno de los dos nuevos vértices (normales de la superficie implı́cita en Vnew1 y Vnew2 opuestas a la normal de Qnew ), entonces
se descarta la creación de un quad desde la arista eb añadiendo ésta arista
a la lista de aristas candidatas a producir cracks Cc , y se vuelve al paso
2a.
f ) Si se detectaron vértices cercanos para los nuevos vértices Vnew1 y Vnew2 en
el paso 2d, y estos se encuentran unidos por una arista, se crea un nuevo
quad Qop = (V1 , Vnew1, Vnew2, V2 ) y se prueba la restricción de Delaunay
en él.
Si pasa la restricción Qop , entonces se añade a M junto a las dos
nuevas aristas que se crean, las cuales también son añadidas a Ce . Si
la arista eop (Vnew1, Vnew2) se encuentra en la lista de aristas de crack
Cc , entonces se elimina de la lista ya que no producirá crack por dejar
de ser frontera de malla. Finalmente se continúa procesando aristas
volviendo al paso 2a.
Si no pasa la restricción, o no se detectó una arista opuesta, se continúan probando otras alternativas.
g) Se comprueba que Qnew pasa la restricción de Delaunay.
Si pasa la restricción se añade Qnew a M, ası́ como Vnew1 , Vnew2 y las
tres nuevas aristas que se forman en el quad. Además, por ser estas
nuevas aristas frontera de malla, se añaden a Ce . Además, por haber
producido un quad eb , se vuelve al paso 2a.
Si no pasa la restricción se continúa probando otras alternativas.
h) Se prueban tres alternativas de construcción de un nuevo quad utilizando
la arista previa ep (V1 , Vp ), la arista frontera siguiente es (V2 , Vs ) o ambas
aristas. Se comprueba la restricción de Delaunay para cada uno de los
3.1. INTRODUCCIÓN
31
quads Qps (V1 , Vp , Vs , V2 ), Qp (V1 , Vp , Vnew2, V2 ) y Qs (V1 , Vnew1, V s, V2 ) de
estas alternativas.
Si alguno de los quads Qps , Qp o Qs pasa la restricción, entonces se
añade el polı́gono a M junto a los nuevos vértices y aristas que se
creen, y éstas se añaden también a la cola Ce . Además, por haberse
utilizado aristas existentes ep y es , se eliminan de la lista de aristas
de crack Cc si estuviesen contenidas en ella. Por último, por haberse
producido un quad, se vuelve al paso 2a.
Si no pasa la restricción se continúa el algoritmo.
i ) Si todas las alternativas anteriores han fallado, entonces la arista eb es
descartada sin producir un nuevo quad para la malla M. Es por ello que
la arista eb se introduce en la lista de aristas candidatas a producir cracks
Cc . Se vuelve al paso 2a para continuar procesando otras aristas.
3. Cuando no hay más aristas que procesar, el algoritmo de Marching Quads
acaba. Si la malla resultante M contiene cracks, se procede a su cierre mediante
el algoritmo detallado en la sección 3.5.
3.1.2.
Problemas a resolver
Este algoritmo que se propone se compone de cuatro problemas complejos bien
diferenciados que han tenido que ser resueltos de forma aislada:
Marching Quads: Este problema se corresponde con el paso 2 del algoritmo
descrito anteriormente. Este problema es un proceso iterativo que pretende
anexar un nuevo quad a una arista del borde la malla mediante diversas alternativas de construcción. Este problema engloba todo lo referente a los cambios
en el algoritmo de Marching Triangles para que pueda generar polı́gonos cuadrangulares.
Búsqueda del punto más cercano sobre la superficie implı́cita: En el
paso 2c es necesario que los puntos proyectados, para que puedan ejercer como
vértices del nuevo quad, se encuentren sobre la superficie implı́cita. Es por ello
32
Capı́tulo 3. Algoritmo de Marching Quads
que se necesita una técnica que permita localizar el punto más cercano sobre
la superficie definida por el conjunto de esferas del modelo implı́cito.
Búsqueda del quad inicial: El algoritmo de Marching Quads, al igual que
los algoritmos de poligonización basados en rastreo de superficie, necesitan
de una malla inicial desde donde iniciar el proceso iterativo de anexión de
quads (correspondiente al paso 1 del algoritmo descrito). Es por ello que se
necesita una técnica que permita localizar un quad semilla que se sitúe sobre la
superficie implı́cita y además, para versiones basadas en la simetrı́a del modelo,
que este quad inicial se sitúe sobre el plano de simetrı́a.
Cierre de cracks: Porque este algoritmo que se propone, al igual que Marching Triangles, obtiene mallas con cracks (paso 3 del algoritmo), es necesario
un procedimiento final que permita cerrar los agujeros.
En la sección 3.2 se detallará el algoritmo de poligonización Marching Quads. La
sección 3.3 mostrará la solución desarrollada en este trabajo para abordar el problema de búsqueda del punto más cercano sobre la superficie implı́cita. La sección 3.4
explicará la técnica que se propone para localizar un quad inicial sobre la superficie
implı́cita, y el plano de simetrı́a. Finalmente, la sección 3.5 tratará sobre el algoritmo
que se ha desarrollado para cerrar los cracks que se obtienen al finalizar el algoritmo
de poligonización.
3.2.
3.2.1.
Poligonización de la superficie implı́cita: Marching Quads
3D Delaunay Surface Constraint aplicado a quads
El algoritmo de Marching Quads, al igual que Marching Triangles, está basado
en la creación de nuevos polı́gonos que se anexan a la frontera de la malla si logran
pasar una restricción que permite mantener una correcta estructura de malla. Esta
restricción es una extensión del algoritmo de Delaunay para triangular nubes de
puntos, aunque orientado a superficies en el espacio 3D.
En concreto, la restricción de superficie de Delaunay en 3D sostiene que un
3.2. POLIGONIZACIÓN DE LA SUPERFICIE IMPLÍCITA: MARCHING
QUADS
33
triángulo T puede añadirse a la malla, si no existe parte de la malla que se encuentre
dentro de la esfera de Delaunay circunscrita en T . Esta esfera es la tridimensionalización del circumcı́rculo del triángulo, que es el cı́rculo que pasa por los tres vértices
del polı́gono y que, por tanto, se encuentra centrado en el circumcentro del mismo,
siendo éste el punto equidistante a los tres vértices. A las zonas de la malla con
diferente orientación con respecto al nuevo triángulo, esta restricción no les afecta
ya que se corresponden con regiones diferentes del modelo, lo que sigue permitiendo
una buena triangulación.
Porque un triángulo es un simplex, o sea el polı́gono más pequeño posible en
las dos dimensiones, siempre existe un cı́rculo que pasa por todos los vértices. Sin
embargo, en un polı́gono cuadrangular esto no es siempre posible. Por este motivo
la restricción de Delaunay no puede aplicarse directamente a quads, ya que se dan
casos en los que no existe una esfera que pase por los cuatro vértices del polı́gono.
En este trabajo hemos propuesto una alternativa a la restricción aplicable a
quads. Porque un quad puede verse como una anexión de dos triángulos a través de
una arista diagonal al quad, puede definirse una esfera de Delaunay para cada uno
de los dos triángulos en los que se divide un quad, de forma que la unión de ambas
esferas genere un volumen de restricción.
Un quad puede dividirse en dos triángulos de dos formas diferentes, en base a
cual de las dos diagonales del polı́gono es la escogida para la partición. Por tanto,
hay que determinar un convenio que permita elegir cual de las dos posibles divisiones
es mejor. Esta elección es necesaria ya que los triángulos resultantes de la partición,
y por extensión sus esferas de Delaunay, difieren según la división realizada.
El polı́gono ideal es el equilátero y por tanto, aproximaciones a él, son los quads
deseables de ser generados por el algoritmo. Esta restricción para quads que se
propone genera dos esferas idénticas solapadas en polı́gonos equiláteros, permitiendo
que el volumen de restricción se ajuste bastante al quad, provocando que este tipo
de quad sea aceptado con más facilidad. El ejemplo (a) de la figura 3.1 muestra
que la restricción se ajusta mejor en un polı́gono equilátero, en comparación con los
quads deformados de (b).
Proponemos utilizar la diagonal de mayor longitud para dividir el quad. Esta
34
Capı́tulo 3. Algoritmo de Marching Quads
elección es debida a que los triángulos resultantes de dividir el quad por la diagonal
más larga produce un volumen de restricción mayor que los triángulos obtenidos
como división del quad por su diagonal menor. Es preferible un volumen de restricción mayor ya que a mayor diferencia entre diagonales más romboide es el quad,
y por tanto polı́gono que deseamos evitar. El ejemplo (b) de la figura 3.1 muestra
gráficamente que la división de un quad mediante su diagonal más larga genera un
volumen de restricción mayor.
(a)
(b1)
(b2)
Figura 3.1: Restricción de Delaunay aplicada a quads. (a) Un quad equilátero produce dos esferas solapadas que minimizan el volumen de restricción. (b) Un quad
deforme donde la división mediante su diagonal mayor (b1) genera un volumen de
restricción mayor que la división del quad mediante la diagonal menor (b2).
Ampliación a la restricción de Delaunay para quads
La restricción de Delaunay aplicable a quads que se ha presentado no es suficiente
para definir la bondad de un quad, ya que solamente controla que el polı́gono no
afecte a la estructura de la malla. El hecho de que un quad no sea un polı́gono
simplex genera una serie de situaciones que no se presentaban en la restricción para
triángulos, las cuales generan quads deformados. En este trabajo se proponen tres
restricciones añadidas que controlan estas situaciones.
Quad aplastado
Porque un quad excesivamente aplastado podrı́a dar un falso
positivo al testear la restricción de Delaunay, es necesario limitar la delgadez del
polı́gono. Simplemente se comprueba que la longitud de una de las diagonales no
supere el doble de la longitud de la otra. Además, se comprueba también que la
3.2. POLIGONIZACIÓN DE LA SUPERFICIE IMPLÍCITA: MARCHING
QUADS
35
longitud del segmento que une los puntos medios de dos aristas opuestas tampoco sobrepase el doble de la longitud del segmento que une las otras dos aristas.
Gráficamente pueden analizarse ambos casos en el ejemplo (a) de la figura 3.2.
Quad retorcido o doblado Otra deformación de quad a evitar es la de retorcimiento de quad, o dicho de otro modo, que dos aristas del quad se crucen. La manera
de detectar este defecto es, una vez dividido el quad en dos triángulos, comprobar
que los vectores normales de ambos son opuestos. En el caso (b) de la figura 3.2
muestra un quad retorcido cuyo triángulo v1 − v2 − v3 posee orientación opuesta a
v1 − v3 − v4 . Este mismo test también permite descartar quads que se encuentran
muy doblados través de una de las diagonales.
Quad cóncavo Otro tipo de quad que se deben evitar son los cóncavos. Para
detectarlos, se comprueba que alguno de los vértices del quad no se encuentre interior
al triángulo que forman los otros tres vértices. Debido a que el vértice no tiene
porqué estar contenido en el mismo plano que el triángulo, ha de proyectarse en
dicho plano previamente. La figura 3.2 muestra en el caso (c) un quad cóncavo.
Puede verse cómo el vértice v2 se encuentra interno al triángulo que forman los
otros tres vértices.
V4
V4
l1
d1
l2
d2
V3
V2
V2
V1
(a1)
(a2)
(b)
V1
V3
(c)
Figura 3.2: Restricciones para evitar malos quads. (a) Quad achatados detectados
porque una distancia entre lados l1 es doble que la otra l2 (a1) o una diagonal d1 es
doble que la otra d2 (a2). (b) Quad retorcido. (c) Quad cóncavo detectado localizando
un vértice V2 interior al triángulo que forman los otros tres T (V1 , V3 , V4 ).
36
Capı́tulo 3. Algoritmo de Marching Quads
3.2.2.
Creación del nuevo quad candidato
Este procedimiento comienza a partir de una arista frontera eb que se ha obtenido
de la cola de aristas que restan por procesar Ce , y crea un nuevo quad candidato
Qnew . En concreto, en este apartado se detallarán los pasos 2a, 2b, 2c, 2d y 2e
del algoritmo. El paso 2a se encuentra detallado en la sección 3.4, y el paso 2c se
encuentra detallado en la sección 3.3.
Búsqueda de los dos nuevos vértices para el nuevo quad: paso 2b
El paso 2b del algoritmo proyecta dos puntos desde la arista frontera una distancia constante lproj . Esta distancia es calculada cuando se construye el quad inicial,
procedimiento detallado en la sección 3.4, y permite que el resto de quads de la
malla se ajusten al tamaño de este primer quad para obtener una malla homogénea.
La proyección de los nuevos puntos esta distancia constante, perpendicularmente a
la arista que se está computando eb y en el plano de su polı́gono Qb , posibilita que
el quad se aproxime a la equilateralidad.
La proyección de puntos de este trabajo difiere con respecto al algoritmo de
Marching Triangles debido a la diferencia geométrica de un triángulo con respecto
a un cuadrado. La figura 3.3 muestra esta diferencia, donde se proyecta un punto
desde el medio de la arista eb en el caso de los triángulos, y dos puntos desde los
vértices de la arista en el caso de quads. En ambos ejemplos puede observarse que
el objetivo de la proyección es obtener el polı́gono con una forma equilátera.
El paso 2c permite ajustar el quad aproximado del paso anterior a la superficie
implı́cita. Para ello se ejecuta un procedimiento para localizar los puntos más cercanos sobre la superficie implı́cita desde los puntos proyectados, procedimiento que
se detalla en la sección 3.3.
Detección de vértices cercanos: paso 2d
En la imagen 23 se mostró un problema del algoritmo de Marching Triangles
detectado en [Fou09], que sucede cuando un nuevo vértice es construido en la cercanı́a de un vértice existente. Existen casos, como el mostrado en el caso (b) de la
figura 2.9, donde un triángulo válido es construido próximo a un vértice existente.
3.2. POLIGONIZACIÓN DE LA SUPERFICIE IMPLÍCITA: MARCHING
QUADS
lproj
lproj
lproj
V2
P1
P2
Pproj
37
V1
eb
(a)
eb
V2
V1
(b)
Figura 3.3: Comparación de proyección de los nuevos vértices para (a) Marching
Triangles y para (b) Marching Quads.
Aunque la malla mantiene una topologı́a correcta al añadir el nuevo triángulo, un
crack se producirá en la zona, o en su defecto se construirá un triángulo deformado
debido a la estrechez de la zona.
El algoritmo de Marching Quads también presenta este mismo problema, como
puede observarse gráficamente en la figura 3.4. Un quad puede ser construido de
forma correcta, y sin embargo generar una zona libre de la malla muy estrecha
donde un nuevo quad no puede ser creado, o en caso de permitirse su construcción
tendrı́a una geometrı́a poco deseable. Incluso, en el caso de tener que cerrar esa zona
de crack, el quad deformado tendrı́a que ser construido.
Si se hubiese detectado la existencia de un vértice cercano a uno de los nuevos
vértices que se proyectaron, y se utilizara este vértice cercano para la creación del
nuevo quad en lugar del nuevo, podrı́an evitarse estas zonas estrechas que producen cracks. La figura 3.4 muestra el resultado de haber desechado el nuevo vértice
sustituyéndolo por un vértice cercano.
Para detectar los vértices cercanos (paso 2d ), una vez localizados los dos vértices
nuevos Vnew1 y Vnew2, se centra una pequeña esfera en dichos vértices de radio 13 ·lproj
y se buscan vértices de la malla interiores a la esfera. En casó de encontrarse varios
vértices, se escoge el más cercano al punto proyectado. La figura 3.4 muestra esta
esfera que se propone, y que habrı́a detectado la existencia de un vértice cercano.
38
Capı́tulo 3. Algoritmo de Marching Quads
Near
Sphere
lproj
eb
eb
(a)
(b)
Figura 3.4: Detección de vértices cercanos. (a) Un quad es construido de forma
correcta pero deja una zona de crack debido a que un vértice se construye cerca
de otro. Si se hubiera detectado el vértice cercano utilizando la esfera de cercanı́a,
entonces (b) un quad podrı́a haberse construido evitando el crack.
Construcción del nuevo quad: paso 2e
Utilizando los dos nuevos vértices que se encuentran sobre la superficie implı́cita,
y en adición a los vértices de la arista frontera a computar eb , se construye el nuevo
quad Qnew (V1 , Vnew1, Vnew2, V2 ).
Además, en este paso también se controla que los dos vértices se correspondan
localmente con el modelo, pues alguno de los nuevos vértices podrı́a corresponderse
con una zona errónea de la malla. Para controlar esto, se comprueba que el vector
normal de la superficie implı́cita en el vértice candidato no se oponga al vector
normal de Qnew .
En la figura 3.5 se muestra un ejemplo en 2D de un vértice correspondiente a
una zona errónea debido a que la superficie implı́cita contiene una zona estrecha. La
proyección de un nuevo punto obtiene un punto sobre la superficie que es opuesto
al nuevo quad que se generarı́a, lo que provoca que se descarte la arista que se
está procesando. Se puede observar que, en caso de añadir el nuevo quad, el modelo
poligonal resultante recortarı́a la zona estrecha del modelo, perdiéndose detalles del
mismo.
3.2. POLIGONIZACIÓN DE LA SUPERFICIE IMPLÍCITA: MARCHING
QUADS
Qb
V
lproj
Qb
V
Pproj
Qnew
Vnew
Implicit
Surface
(a)
39
Pproj
Implicit
Surface
(b)
Figura 3.5: Ejemplo en 2D de (a) una proyección de un punto Pproj (b) que localiza
un punto sobre la superficie implı́cita Vnew que está en una zona errónea del modelo.
El quad Qnew que se crea recorta parte del modelo.
3.2.3.
Alternativas de nuevos quads
Este apartado detalla los pasos 2f , 2g, 2h, y 2i . Estos pasos tratan de construir
un nuevo quad para anexar a eb mediante diversas alternativas de construcción,
comprobando en todas ellas que pasen la restricción deDelaunay aplicada a quads.
Detección de arista opuesta: paso 2f
Se ha decidido omitir la alternativa de Marching Triangles que se propone en el
informe técnico [HIIT97] para construir un quad que permita cerrar zonas enfrentadas de la malla utilizando un vértice que se solape con la esfera de Delaunay de Tnew .
El motivo es que si se encuentra algún vértice que solape el volumen de restricción
de Qnew , este puede situarse erróneamente de modo que el quad quede deformado,
además de que depende del otro vértice nuevo para el nuevo quad.
Sin embargo presentamos una alternativa similar que, en vez de detectar algún
vértice que se solape, lo que se detecta es alguna arista frontera eop que se encuentre enfrentada a la arista eb una distancia cercana a lproj , utilizándola para cerrar
parte de la malla creando un quad Qop con buena estructura morfológica. Aún ası́,
para asegurarse que Qop mantiene la topologı́a de la malla, se ha de comprobar la
restricción de Delaunay.
Una arista se encuentra enfrentada a eb si en el paso 2d del algoritmo se han
encontrado vértices cercanos que sustituyen a los dos vértices proyectados Vnew1 y
40
Capı́tulo 3. Algoritmo de Marching Quads
Vnew2, y además éstos se encuentran unidos por una arista. En este caso se puede
unir esta arista eop a eb para permitir cerrar la malla, aunque para ello, los quads
frontera de ambas aristas Qop y Qb han de tener misma orientación.
En la figura 3.6 puede observarse un caso de detección de vértices cercanos en
los puntos proyectados, los cuales se encuentran unidos por una arista. Obsérvese
que ambas aristas encaradas pueden unirse para formar un quad que permita cerrar
localmente la malla.
Near
Spheres
eop
eop
lproj
eb
eb
(a)
(b)
Figura 3.6: (a) Tras proyectar los nuevos vértices, las esferas de cercanı́a detectan
dos vértices cercanos que se encuentran unidos por una arista eop . (b) Utilizando
esta arista opuesta se puede construir un quad para cerrar zonas enfrentadas de
malla.
Esta alternativa de construcción de quad es la primera en evaluarse, incluso antes
de comprobar directamente que Qnew es aceptado por la restricción de Delaunay,
debido a que es deseable unir zonas de malla existente de modo que se minimicen
los cracks resultantes.
3.2. POLIGONIZACIÓN DE LA SUPERFICIE IMPLÍCITA: MARCHING
QUADS
41
Construcción de quad directo: paso 2g
El paso 2g del algoritmo permite validar el nuevo quad Qnew que se desea construir utilizando la restricción de Delaunay. Si el quad no se solapa con la malla M,
y además tiene una topologı́a buena, el quad se añade al modelo poligonal M. Los
nuevos vértices y aristas que se crean también han de ser añadidas al modelo y, como
las nuevas aristas son frontera de malla, han de introducirse también en la cola Ce
para permitir que el algoritmo las compute posteriormente.
En el caso (a) de la figura 3.7 se observa un ejemplo en dos dimensiones de
la creación de un nuevo quad, cuya esfera de Delaunay permite que sea anexado
anexado a la malla por no solaparse con algún vértice de la malla.
Construcción de quad utilizando aristas vecinas: paso2h
En ocasiones existen aristas vecinas, que son las aristas unidas a eb que son
frontera de malla, las cuales se solapan con el quad directo Qnew provocando el
descarte de éste. Para poder cerrar estas zonas de malla, pueden utilizarse estas
aristas vecinas para poder formar el nuevo quad junto a eb .
La arista que se encuentra unida al vértice V1 de la arista eb continuando la
frontera de la malla es la que se denomina arista previa ep (V1 , Vp ), siendo Vp el
vértice de ep no común a eb . Análogamente se define la arista siguiente es (V2 , Vs )
como la arista frontera unida a eb mediante su vértice V2 .
Utilizando estas aristas, se puede probar la construcción del nuevo quad de tres
maneras distintas: utilizando ambas aristas vecinas para formar el quad Qps (V1 , Vp , Vs , V2 )
(caso (b) de la figura 3.7); utilizando solamente la arista previa para formar el quad
Qp (V1 , Vp , Vnew2, V2 ) (caso (d) de la figura 3.7); y utilizando solamente la arista siguiente formando el quad Qs (V1 , Vnew1, V s, V2 ) (caso (c) de la figura 3.7).
Para cada una de las tres alternativas que utilizan aristas vecinas se ha de comprobar la restricción de Delaunay aplicada a quads, para verificar que el quad no
solapa parte de la malla y se encuentra bien construido. Si el quad es validado,
entonces los nuevos elementos se añaden al modelo M.
Hay que tener en cuenta que estas alternativas utilizan aristas existente para
42
Capı́tulo 3. Algoritmo de Marching Quads
construir el nuevo quad, de modo que dejarı́an de ser frontera de la malla. Por este
motivo, estas aristas han de eliminarse de la lista de aristas a procesar Ce , y además
también se eliminan de la lista de aristas candidatas a crack Cc si estuviesen.
Vp
Vnew1
Vnew2
Vs
V2
eb
V1
V2
(b)
(a)
Vnew1
Vs
V2
eb
V1
eb
Vp
Vnew2
V1
(c)
V2
eb
V1
(d)
Figura 3.7: Ejemplos en 2D de diferentes alternativas de construcción de un quad
en el algoritmo de Marching Quads: (a) de forma directa, (b) utilizando la arista
vecina previa y siguiente (c), utilizando la arista vecina siguiente y (d) utilizando la
arista vecina previa.
Cracks en la malla resultante: paso 2i
El paso 2i del algoritmo viene a indicar que, si no se pudo construir el nuevo quad
con ninguna de las anteriores alternativas, entonces la arista eb será descartada sin
generar un quad. Aunque esta arista podrı́a ser cogida como arista vecina o solapada
en iteraciones posteriores, lo más probable es que la zona termine conteniendo un
crack.
Aunque existen técnicas añadidas al algoritmo para minimizar los cracks que
se obtienen tras la poligonización, éstos son inevitables. Por ello, es necesario un
procedimiento al final del algoritmo que permita cerrar estos cracks. Esta técnica de
cierre de cracks se encuentra detallada en la sección 3.5.
3.2. POLIGONIZACIÓN DE LA SUPERFICIE IMPLÍCITA: MARCHING
QUADS
43
Para que el procedimiento de cierre de cracks conozca cuales son las aristas
frontera al acabar el algoritmo de poligonización, se utiliza una lista de aristas
candidatas a crack Cc . Aquellas aristas eb que no producen un nuevo quad son
añadidas en esta lista, aunque podrı́as ser eliminadas de ella si la arista es escogida
posteriormente como arista vecina o enfrentada.
3.2.4.
Cracks debido a vértices escogidos erróneamente
En la sección 2.3 se comentó sobre otro de los problemas del algoritmo de Marching Triangles, el cual también se encuentra presente en este algoritmo que se
propone. En el trabajo [AG01], los autores detectaron que un triángulo podrı́a estar
bien construido al ser validado por la restricción de Delaunay, y sin embargo ser el
detonante de un futuro crack.
En la sección 2.3.1 se expuso un problema del algoritmo Marching Triangles
en el que triángulos, que aparentemente son buenos, generan cracks debido a que
provocan que algún polı́gono existente deje de cumplir la restricción de Delaunay.
En el algoritmo de Marching Quads esta situación también puede darse, como
es el caso (a) de la figura 3.8, donde la arista frontera del quad Q genera un nuevo
polı́gono Qnew que pasa la restricción. Sin embargo, nótese que el quad Qnew provoca
que el ya existente polı́gono Q0 no pase la restricción, debido a un solapamiento
de uno de los vértices de Qnew con la esfera de restricción de Q0 . La zona que
queda libre resultará probablemente en un crack, cuyo cierre puede generar una
mala poligonización.
Puede observarse que el problema lo provoca el nuevo vértice, el cual se encuentra
situado muy cerca de una arista existente, y además muy próxima al medio de ésta,
provocando que el nuevo vértice no pueda encontrar un vértice cercano de la arista.
El caso (b) de la figura 3.8 muestra el resultado de no haber computado la arista
frontera de Q, dejando que se compute previamente la arista de Q0 . El resultado en
este caso es la construcción de un quad más correcto. Aunque no se pueda construir
un quad en la zona libre por alguna alternativa resultando en una zona de crack,
el procedimiento de cierre de cracks puede construir un triángulo topológicamente
mejor en comparación con el primer caso.
44
Capı́tulo 3. Algoritmo de Marching Quads
Q’
Q’
Qnew
eb
Qnew
eb
Q
Q
(a)
(b)
Figura 3.8: (a) Creación de un quad Qnew que pasa la restricción, pero que provoca
que uno de los vértices de Qnew solape la esfera de Delaunay de un quad existente
Q0 . (b) Alternativa de computar previamente el quad Q0
Test de topologı́a correcta de malla con respecto a un quad
Para evitar la construcción de estos quads aparentemente buenos que perjudican
a existentes quads, y paralelamente a la restricción de Delaunay, es necesario un
método que detecte que los quads de la malla M continúen validando la restricción.
Lá técnica implementada realiza un recorrido por todos los quads que pertenecen
a la malla, comprobando que la esfera de restricción de cada quad no solape al
nuevo quad. En caso de que alguna esfera intersecte el nuevo quad, entonces debe
ser descartado para no perjudicar la malla existente.
Es necesario descartar de esta restricción que se propone a los quads vecinos de
la arista a computar, ya que por cercanı́a, sus esferas de Delaunay siempre van a
solapar al nuevo quad. Además, para no computar la esfera de Delaunay cada vez que
se realice este test, dicha esfera es calculada en la creación del quad, almacenándose
en la propia estructura de datos del polı́gono para posteriores cálculos con ella.
Los pasos del algoritmo que basan la creación del nuevo quad usando una arista
opuesta y usando las dos aristas vecinas no realizan este nuevo test. Esto es debido
3.3. BÚSQUEDA DEL PUNTO MÁS CERCANO SOBRE LA SUPERFICIE
IMPLÍCITA
45
a que ambos pasos no generan nuevos vértices, que son los elementos causantes del
problema que se ha descrito.
3.3.
Búsqueda del punto más cercano sobre la superficie implı́cita
El modelo implı́cito que utiliza este trabajo, se define por un esqueleto implı́cito
de puntos, cuya superficie viene definida por los puntos que se encuentran a una
cierta distancia de cada elemento del esqueleto. Visto de otro modo, la superficie
implı́cita es la resultante de la unión de un conjunto de esferas, correspondiéndose
cada una con un elemento esquelético. Esta forma de representación implı́cita es la
que se obtiene de la primera fase del sistema de creación de personajes 3D a partir
de modelos definidos en 2D.
La computación del punto Ps más cercano a la superficie implı́cita, desde un
punto Po exterior a la misma, es una tarea relativamente sencilla. Basta con proyectar
el punto Po sobre cada esfera del modelo implı́cito, y escoger el punto proyectado
más cercano a Po .
Sin embargo, esta búsqueda se hace mucho más compleja si se realiza desde un
punto Pi interior a la superficie implı́cita. En el caso de que el punto se encuentre
en el interior de una única esfera, el procedimiento es idéntico a buscarlo desde un
punto exterior. Sin embargo, si el punto se encuentra interior a varias primitivas
implı́citas, el punto proyectado puede no corresponderse a la superficie implı́cita,
sino uno interior a la misma. En estos casos, es muy complejo definir una dirección
donde proyectar hacia la superficie del modelo.
Por otra parte, existen situaciones en las que el punto más cercano sobre la superficie implı́cita Ps , genera malos quads que pueden ser descartados por la restricción
de Delaunay. Este caso se da en zonas de alta curvatura del modelo, donde el punto
proyectado se aleja de la superficie implı́cita provocando la obtención de un punto
Ps , cuya distancia a la arista, difiere considerablemente de la distancia de proyección lproj . El resultado es la obtención de un nuevo quad aplastado, o alargado, que
fácilmente podrı́a ser descartado por la restricción de Delaunay.
46
Capı́tulo 3. Algoritmo de Marching Quads
La figura 3.9 muestra el resultado de la construcción de un quad acortado por
el problema de alta curvatura en la zona. El punto proyectado Pproj se aleja de la
superficie implı́cita, obteniendo un punto sobre la superficie muy cerca del inicio de
la proyección, provocando un acortamiento en el quad Qnew . Puede observarse como
el tamaño de los quads se mantiene constante hasta que se alcanza la zona de alta
curvatura.
Pproj
Pproj
Qb
Qnew Vnew
Qb
Qnew
Vnew
Implicit
Surface
(a)
(b)
Implicit
Surface
Figura 3.9: (a) Superficie muy curva donde el punto proyectado Pproj obtiene un
punto sobre la superficie Vnew que genera un quad muy corto. (b) Manteniendo
constante la proyección al buscar el punto sobre la superficie, se puede obtener un
punto Vnew que mantenga la estructura equilatera del nuevo quad Qnew .
3.3.1.
Algoritmo de búsqueda de punto cercano a la superficie
Teniendo en cuenta ambos problemas, los relativos a la complejidad a la hora de
buscar el punto más cercano y la deformación de quads en zonas de alta curvatura,
se propone una alternativa que permite localizar un punto cercano sobre la superficie
implı́cita manteniendo la equilateralidad del quad.
Esta técnica restringe la búsqueda del punto cercano sobre la superficie implı́cita
a una distancia lproj de la arista. Para ello, se construye una circunferencia de radio
lproj en el plano perpendicular a la arista eb , y se centra en el vértice que inicia la
proyección. A continuación, se localizan los puntos donde la circunferencia corta a
la superficie implı́cita, y se escoge el más cercano a Pproj .
3.3. BÚSQUEDA DEL PUNTO MÁS CERCANO SOBRE LA SUPERFICIE
IMPLÍCITA
47
Este método se basa en la detección de todos los puntos de la superficie implı́cita
que se encuentran a una distancia lproj de la arista a computar eb , para ver cual es
el más cercano al punto que se quiere aproximar a la superficie. De este modo, el
nuevo quad mantendrá una longitud homogénea con la malla. Para que el quad sea
equilátero, el nuevo vértice ha ser perpendicular a la arista a computar eb , y es por
ello que se buscan puntos que se encuentren en su plano perpendicular.
El caso (b) de la figura 3.9 muestra gráficamente el resultado de haber aplicado
este método. Obsérvese como la circunferencia obtiene dos puntos sobre la superficie
candidatos, siendo el elegido para construir el nuevo quad el que se encuentra más
cercano a Pproj .
Este algoritmo que se propone busca inicialmente todas las intersecciones de que
hay entre la circunferencia y cada primitiva esférica. Si una intersección se encuentra
interior a la superficie implı́cita, entonces ésta es descartada por no encontrarse sobre
la superficie implı́cita. Finalmente, de la lista de candidatos, se escoge aquel punto
que se encuentre más cercano al punto Pproj .
El vector normal a un punto de la superficie implı́cita se calcula como la normalización del vector (P − C), donde P es el punto de la superficie, y C es el centro de
la primitiva esférica que se corresponde con P . Estos vectores normales se calculan
simultáneamente con la búsqueda de puntos candidatos.
3.3.2.
Formulación matemática de intersección circunferenciaesfera
Para obtener la intersección entre una circunferencia y una esfera, se ha de resolver un sistema matemático de ecuaciones utilizando la ecuación del plano de
la circunferencia, la ecuación de la esfera donde la circunferencia se encuentra circunscrita y la ecuación de la esfera correspondiente a la primitiva de la superficie
implı́cita.
La definición matemática de cada primitiva esférica es:
(x − Cx )2 + (y − Cy )2 + (z − Cz )2 − r 2 = 0
(3.1)
48
Capı́tulo 3. Algoritmo de Marching Quads
Donde C(Cx , Cy , Cz ) es el centro de la esfera y r es el radio.
La definición matemática de la circunferencia viene dada por la esfera y el plano
que contienen a la misma, ya que una circunferencia puede verse como la intersección
entre un plano y una esfera. Para un plano definido por un punto P y un vector
normal al plano N, todo punto contenido en él debe cumplir que su vector con
respecto al punto ha de ser perpendicular a la normal del plano.
2
(x − Px )2 + (y − Py )2 + (z − Pz )2 − lproj
=0
(3.2)
(x − Px , y − Py , z − Pz ) · (Nx , Ny , Nz ) = 0
(3.3)
Donde P es el centro de la circunferencia, N es la normal del plano donde
está contenida la circunferencia, y lproj es el radio de la circunferencia.
Resolviendo este sistema de tres ecuaciones puede no obtenerse alguna solución,
indicando que la circunferencia no intersecta a la esfera; una solución, indicando que
la circunferencia intersecta a la esfera en un único punto; o dos soluciones, indicando
que la circunferencia intersecta a la esfera en dos puntos distintos.
3.4.
Búsqueda del quad inicial
Para que el algoritmo de Marching Quads pueda comenzar, es condición necesaria
la existencia de una malla inicial M de al menos un quad, de cuya frontera comenzar
la construcción de quads. En este trabajo se comienza de un quad semilla que, como
ha de formar parte del modelo poligonal, ha de tener sus cuatro vértices ajustados
a la superficie implı́cita, y además ha de ser lo más equilátero posible.
En versiones iniciales de Marching Quads, es primer quad se localizaba de forma
aleatoria, escogiendo una dirección cualquiera que permitiera localizar un punto de
la superficie implı́cita, desde donde iniciar la creación del quad.
Sin embargo en versiones últimas del proyecto, tal y como se verá en la sección de
mejoras, el plano de simetrı́a del modelo implı́cito cobra importancia. Esto provoca
una restricción añadida al quad inicial, el cual debe situarse en este plano de simetrı́a.
Por este motivo, en este apartado se detallará el algoritmo para localizar un quad
3.4. BÚSQUEDA DEL QUAD INICIAL
49
inicial sobre la superficie implı́cita, y sobre el plano de simetrı́a del modelo.
3.4.1.
Algoritmo de búsqueda de quad inicial
Existen varias formas de definir un plano. En este proyecto se ha trabajado
utilizando la representación donde un plano de simetrı́a viene definido por un punto
aleatorio del plano Pp y un vector normal al plano Np .
El algoritmo de búsqueda de quad inicial está descompuesto en los siguientes
pasos:
1. Se localiza un punto Ps sobre la superficie implı́cita contenido en el plano
de simetrı́a, a partir del punto Pp . En base al radio de la esfera implı́cita de
menor tamaño, se genera un valor de distancia de proyección lip para definir
el tamaño del quad inicial.
2. Se proyecta el punto Ps una distancia de lip en la dirección del gradiente Ns
de la superficie implı́cita en el punto Ps , obteniéndose el punto Pq .
3. A partir del gradiente inverso −Ns , se obtienen cuatro vectores separados en
forma piramidal, formando ángulos de 90o entre ellos.
4. La proyección sobre la superficie implı́cita de la pirámide formada por los
cuatro rayos anteriores, los cuales se originan a partir del punto Pq , obtienen
los cuatro vértices del quad inicial.
3.4.2.
Detalle de los pasos del algoritmo
En primer lugar se localiza un punto Ps que se encuentre situado en la superficie
implı́cita y sobre el plano de simetrı́a. Además se obtiene la normal a la superficie
en dicho plano.
A continuación se tratará de crear un quad centrado en Ps mediante un método
que consiste en alejar el punto una pequeña distancia de la superficie y proyectar una
pirámide de base cuadrangular sobre la superficie implı́cita, cuya base es centrada en
el punto de la superficie. La proyección de la pirámide obtiene un quad perfectamente
equilátero, a no ser que la proyección intersecte más de una primitiva.
50
Capı́tulo 3. Algoritmo de Marching Quads
Paso 2
La distancia desde donde se lanza la pirámide influye en el tamaño del quad
inicial. Esta distancia lip se escoge en función del radio de la esfera implı́cita de
menor tamaño para evitar recortar zonas de alta curvatura, y es modificado por un
factor que permite al usuario variar la resolución general de la malla.
El paso 2 permite localizar el pico de la pirámide Pproj moviendo el punto sobre la
superficie Ps una distancia lip hacia el exterior del modelo. Para que el quad resulte
lo más equilátero posible, la dirección escogida es el gradiente de la superficie en el
punto.
Paso 3
El paso 3 genera los cuatro rayos que, al lanzarse a partir del punto proyectado
del paso anterior, generarán una pirámide de proyección. La figura 3.10 muestra estos
cuatro rayos R1 , R2 , R3 y R4 . Partiendo del inverso del gradiente de la superficie, o
lo que es lo mismo, el vector que va de Pproj a Ps , se rota éste 45o sobre el eje de la
normal del plano para generar un rayo R0 que determina la abertura de la pirámide.
Como es deseable que el quad inicial tenga aristas paralelas y perpendiculares al
plano de simetrı́a, se rota 45o R0 sobre el eje del gradiente de la superficie para
obtener el primer rayo R1 . Los restantes rayos se obtienen con rotaciones de 90o
sobre el eje del gradiente.
Paso 4
El paso 4 intersecta los cuatro rayos que conforman la pirámide con la superficie
implı́cita para determinar los cuatro vértices que, siendo unidos por aristas, formarán
el quad inicial.
3.4.3.
Cálculo de la distancia de proyección
Antes de terminar la computación del quad semilla, la distancia de proyección
lproj ha de ser recalculada para que se reajuste con respecto al tamaño del quad
creado. Para ello, la distancia lproj se inicializa como una media de la longitud de
3.5. CIERRE DE CRACKS
51
Pproj
V2
V1
R1
R2
R3
R1
R2
Pproj
Plane
lip
R4
Ps
V1
Implicit
Surface
V4
V2 V3
R0
Ps
R4
R3
V4
V3
(a)
Plane
(b)
Figura 3.10: Pirámide de proyección para creación del quad inicial en (a) vista
superior y (b) vista lateral. Se lanzan los rayos R desde el punto proyectado Pproj
en un ángulo de 45o para generar la pirámide cuya intersección con la superficie
implı́cita obtiene los 4 vértices del quad semilla. La orientación de los rayos R se
realiza en base al plano de simetrı́a.
las aristas de dicho quad. De este modo, el resto de quads que se traten de construir
proyectarán sus nuevos vértices esta distancia para ajustarse al tamaño de arista del
quad inicial, y ası́ obtener una malla homogénea.
3.5.
Cierre de cracks
La malla poligonal que se obtiene tras aplicar el algoritmo de Marching Quads a
una superficie implı́cita contiene diversos agujeros, por lo que se encuentra incompleta. Esto es debido a que el algoritmo, en caso de no poder crear un quad correcto
desde un arista frontera, deja ésta libre sin polı́gono que cierre la zona local de la
malla.
Porque estos cracks que se producen son indeseables para modelos orientados a
sistemas de animación (y otras aplicaciones gráficas), es necesario un segundo paso
en el algoritmo de Marching Quads que permita cerrar cada uno de los agujeros
resultantes. En este trabajo se propone un algoritmo desarrollado para tal cometido,
52
Capı́tulo 3. Algoritmo de Marching Quads
permitiendo completar la malla a partir de las aristas frontera de la malla que surgen
tras la poligonización.
3.5.1.
Introducción al algoritmo de cierre de cracks
Cuando un quad no puede ser construido por el poligonizador, suele ser debido a
que el quad solapa parte de la malla. Es por ello que la distancia entre bordes de la
malla en los cracks se aproxima a la longitud lp roj de los quads. Esta caracterı́stica posibilita el cierre de cracks sin necesidad de tener que crear nuevos vértices,
simplemente uniendo por aristas los ya existentes en el crack.
Los cracks suelen estar presentes en zonas muy irregulares de la frontera de la
malla, o zonas con cambios bruscos de curvatura. Como consecuencia, en muchas
ocasiones no puede ser construido un quad que cierre cierta zona del crack, debido a
que el polı́gono puede resultar torcido, doblado o no convexo. Además, en cracks con
número impar de aristas frontera, es imposible cerrarlo exclusivamente con polı́gonos
cuadrangulares, pues un hueco de tres aristas siempre va a quedar libre.
Por ambas razones que imposibilitan añadir un quad se permite la creación de
triángulos en estos casos extremos, y de esta forma mantener un correcto mallado
del modelo. Aún ası́, en la medida de lo posible se prioriza la creación de polı́gonos
cuadrangulares.
Algoritmo de cierre de cracks
Al finalizar el algoritmo de poligonización, se obtiene un conjunto Cc de aristas
frontera causantes de los cracks de la malla poligonal. El algoritmo que se plantea
detecta uno a uno los cracks, y para cada uno de ellos, crea nuevas aristas que
permitan unir los vértices del crack.
La detección de cracks se calcula iterando de la siguiente manera:
1. Si el conjunto de aristas Cc se encuentra vacı́o, la malla no contiene ningún
crack. Se finaliza el algoritmo.
2. Se obtiene una arista inicial e0 del conjunto Cc .
3.5. CIERRE DE CRACKS
53
3. A partir de la arista e0 se obtienen las aristas vecinas siguientes e1 , e2 , . . . , en
(ei arista vecina siguiente de ei−1 ), siendo la arista e0 la siguiente de en . Esto
permite obtener un subconjunto Ca de aristas de Cc que se corresponde con
un agujero de la malla.
4. Se extraen del conjunto Cc todas las aristas del subconjunto Ca . Las aristas
resultantes en Cc forman parte de otros cracks que se cerrarán en posteriores
iteraciones de este algoritmo.
5. Un procedimiento para cerrar un crack permite unir los vértices de las aristas
frontera de Ca para generar nuevos quads, o triángulos si proceden, y de este
modo cerrar el agujero.
6. Una vez cerrado el crack Ca , se vuelve al primer paso por si quedaran más
cracks que cerrar.
Básicamente, el algoritmo de cierre de cracks se compone de un proceso iterativo en
el que, para cada iteración, se cierra un crack de la malla. A su vez, cada iteración
del proceso se compone de dos fases:
1. Aislamiento de un crack (pasos 2, 3 y 4): se detecta un agujero de la
malla.
2. Cierre de crack (paso 5): se cierra el agujero detectado.
3.5.2.
Aislamiento de un crack
Esta fase detecta un agujero en la malla y crea una estructura para almacenar el
mismo. Esta estructura de crack se compone de una lista circular doblemente enlazada, donde cada nodo de la misma se corresponde con una arista del agujero, y los
nodos siguiente y anterior con sus aristas vecinas. De esta manera, esta lista permite representar estructuralmente el crack. Además, cada nodo almacena información
adicional como los ángulos que la arista forma con sus vecinas.
El proceso de creación de la estructura de crack es iniciado a partir de una arista
aleatoria e0 . Para ello, se crea un nodo que almacene dicha arista, y se localiza su
arista siguiente ei = e1 , comenzando el siguiente proceso iterativo:
54
Capı́tulo 3. Algoritmo de Marching Quads
1. Se crea un nodo con la arista ei , se calcula el ángulo que forma con la arista
previa ei−1 y se añade a los nodos correspondientes a ei y ei−1 .
2. Se actualiza el nodo ei−1 para indicar que su nodo siguiente es e1 , y a su vez
se actualiza el nodo de e1 para indicar que su nodo previo es ei−1 .
3. Se localiza la arista siguiente ei+1
4. Si ei+1 = e0 , entonces se ha cerrado la frontera del agujero terminando el algoritmo de aislamiento de crack, y en caso contrario, se vuelve a iterar utilizando
ei = ei+1
Cuando el algoritmo finaliza, la lista circular ha de ser cerrada enlazando e0
con en , siendo ésta la última arista encontrada. Además, en ambos nodos hay que
actualizar el ángulo que forman ambas aristas. Y, como un último paso de esta fase
para la obtención de la estructura de un crack.
3.5.3.
Cerramiento de un crack
Introducción a la técnica
Una vez detectado el agujero, éste se cierra creando quads de forma iterativa (o
triángulos en los casos en que un quad no pueda ser añadido). Estos quads se crean
a partir de los vértices existentes utilizando tres aristas consecutivas del crack, y
añadiendo una nueva que permita cerrar el polı́gono.
Sin embargo, las tres aristas consecutivas del crack que se van a utilizar para
cerrar parte del agujero mediante un quad no pueden ser escogidas de manera arbitraria, pues se producen diferentes mallados de cracks. Para ello hay que añadir a
cada arista del crack un peso que indique la ’bondad’ del quad de cierre que utiliza
dicha arista y sus dos vecinas.
Nosotros proponemos que la ’bondad’ sea definida en función del ángulo que la
arista forma con sus vecinas. Porque es deseable que se cierren antes zonas muy
cerradas del crack, se ha de dar prioridad a aquellas aristas que forman un ángulo
más cerrado con sus vecinas. En concreto, el peso de las aristas es escogido como la
3.5. CIERRE DE CRACKS
55
suma de los ángulos que se forman con cada vecina en ambos extremos de la arista,
priorizando en este caso las aristas con menor peso.
La figura 3.11 muestra un crack de cinco aristas donde se muestran los ángulos
que forman aristas consecutivas, y el peso de cada arista (suma de los ángulos con
sus vecinas). Este ejemplo, contempla tres alternativas para cerrar parte del crack
mediante un quad, utilizando la arista de peso 180o , 200o y 250o respectivamente.
Puede observarse cómo el mejor quad se obtiene utilizando la arista de menor peso
(caso (a)).
Figura 3.11: (a) Cierre de parte del crack utilizando la arista de menor peso (180).
(b) Cierre de parte del crack utilizando la arista de peso 200. (c) Cierre de parte del
crack utilizando la arista de mayor peso (250).
Algoritmo de cierre de un crack
El algoritmo es un proceso iterativo que construye polı́gonos utilizando tres aristas del crack (dos en caso de trı́angulos) para cerrar el agujero progresivamente. Los
pasos del algoritmo son:
1. Si el crack tiene solamente tres aristas, se construye un triángulo y se salta al
paso 8.
56
Capı́tulo 3. Algoritmo de Marching Quads
2. Si el crack contiene solamente cuatro aristas, se construye directamente un
quad accediendo posteriormente al paso 8.
3. Se realiza un ordenamiento de los nodos del crack mediante una cola Co que
prioriza a los nodos de menor peso.
4. Si la cola Co se encuentra vacı́a, el algoritmo salta al paso 6, y en caso contrario
se coge la arista ei que está al frente.
5. Se construye un quad Qn ew uniendo ei−1 , ei , ei+1 y enew , siendo esta última la
nueva arista que une las vecinas. Si Qnew es estructuralmente bueno, se acepta
y se accede al paso 8, en caso contrario se vuelve a 4 para coger otra arista
candidata.
6. En caso de no haberse podido crear algún quad, se construye un triángulo en
aquella esquina del crack con menor ángulo,y cuyo triángulo no solape parte
del crack.
7. Si el nuevo triángulo puede fusionarse con un vecino formando un buen quad,
se realiza dicha transformación de polı́gonos.
8. Se actualiza la estructura de crack eliminando los nodos de las aristas usadas
para formar el nuevo polı́gono, se añade la nueva arista a la estructura creando
un nuevo nodo y se actualizan los ángulos y pesos de los nodos afectados.
9. Si no quedan elementos en el crack el algoritmo finaliza, y en caso contrario,
se vuelve a primer paso del algoritmo para continuar creando polı́gonos.
Detalle de los pasos para cerrar un crack
Pasos 1, 2 y 3: se detecta que sólo queda un polı́gono para cerrar el agujero, y en
este caso se construye directamente. Por contra, si no existe un polı́gono directo de
cierre, se ha de localizar una arista candidata para generar uno nuevo. Para ello, el
paso 3 se encarga de ordenar los nodos dando prioridad a las aristas de mayor peso.
Pasos 4 y 5: se intenta a crear el nuevo quad según el ordenamiento de las aristas.
Para ello se coge la mejor arista candidata, y se construye un quad que una la arista
3.5. CIERRE DE CRACKS
57
del nodo, sus vecinas y una nueva. Si el quad no se encuentra retorcido ni doblado,
es convexo, y además no solapa parte del crack, entonces el quad es aceptado. En
caso contrario, se continúa probando con las sucesivas aristas candidatas.
Para comprobar la doblez de un quad basta con chequear la oposición de las normales de los triángulos que dividen al polı́gono. La comprobación de no convexidad,
se realiza verificando que alguno de los vértices del quad no se encuentre interior al
triángulo que forman los otros tres vértices del polı́gono. Sin embargo, aunque estas
comprobaciones permiten verificar la correcta topologı́a del quad, no bastan para
certificar que el quad cierra correctamente una zona de la malla. Esto es debido a
que se pueden dar casos como el de la figura 3.12, donde un vértice del crack solapa
el quad candidato.
Figura 3.12: Se muestra un crack en la imagen izquierda. La imagen central cierra
parte del crack utilizando el convenio de utilizar la arista de menor peso, pero se
solapa con parte de la malla. La imagen de la derecha muestra la detección de
vértices del crack solapados mediante una esfera.
Para evitar la construcción de quads de cierre incorrectos, se propone una restricción añadida que detecta vértices solapados del crack. Esta restricción, se basa en la
comprobación de la no existencia de parte de la malla solapada con una esfera que
58
Capı́tulo 3. Algoritmo de Marching Quads
englobe al quad. Esta esfera es situada en el baricentro del polı́gono, siendo su radio
la distancia al vértice más lejano. Debido a que se supone correcta la topologı́a de
la malla en el algoritmo de Marching Quads, solamente es necesario comprobar que
no se solapen los vértices pertenecientes al crack. La figura 3.12 muestra la esfera
de restricción que permitirı́a detectar el problema del ejemplo.
Paso 6: En caso de que el algoritmo no logre crear algún quad, se cierra parte
del quad mediante un polı́gono triangular, utilizando dos aristas del crack y una
nueva. En este caso no se necesita comprobar la topologı́a del triángulo, aunque si
se necesita chequear que el triángulo no solape parte del crack. Para ello, se construye
un prisma triangular proyectando el triángulo una cierta distancia constante, y luego
se comprueba que el prisma no englobe a algún vértice del crack.
Es necesario un ordenamiento de aristas candidatas que esté enfocado a la construcción de triángulos. Este ordenamiento es calculado de manera similar al de quads
pero, debido a que sólo dos aristas del crack se necesitan para crear el triángulo, el
peso escoge únicamente el ángulo que forman las dos aristas. Con esto se pretende
cerrar esquinas del crack muy cerradas.
Paso 7: Puede darse el caso de construcción de un nuevo triángulo anexo a otro
existente. El paso del algoritmo permite detectar estos casos, comprobar que ambos
triángulos se unen en un buen quad y, en este caso, fusionar ambos triángulos para
minimizar el número de polı́gonos triangulares en la malla.
Paso 8: Tanto si se ha creado un triángulo, como si lo que se ha creado es un
quad, la estructura de crack ha de ser actualizada. Este paso es el encargado de
ello, eliminando los nodos que pertenecen a las aristas utilizadas en la creación del
nuevo polı́gono y, en caso de haberse creado una nueva arista, añadiendo el nuevo
nodo correspondiente. Además, los ángulos y los pesos de los nodos que han sido
afectados por la construcción del nuevo polı́gono han de ser recalculados.
Paso 9: Como último paso del algoritmo se realiza una simple comprobación para
detectar si el crack ha sido cerrado. Si aún quedan aristas en frontera en el crack, se
3.5. CIERRE DE CRACKS
59
repite otra iteración del algoritmo para continuar generando polı́gonos que permitan
rellenar lo que queda de crack.
60
Capı́tulo 3. Algoritmo de Marching Quads
Capı́tulo 4
Mejoras en Marching Quads
4.1.
4.1.1.
Aceleración del algoritmo Marching Quads
Análisis del problema
Durante el algoritmo de Marching Quads se realizan varios test sobre la malla
completa. Debido a que el número de elementos de la malla aumenta con el avance
del algoritmo, el algoritmo se hace cada vez más lento. En este trabajo se propone
una mejora para acelerar algunas comprobaciones que se realizan sobre la malla,
explotando el principio de localidad.
El algoritmo de Marching Quads verifica, para cada uno de los posibles casos de
construcción de quads, la restricción de Delaunay sobre el quad candidato. Por este
motivo en cada iteración del algoritmo se recorren varias veces todos los vértices
de la malla para comprobar la restricción. Incluso, algunos de los casos recorren la
malla dos veces al comprobar también la restricción de topologı́a de malla correcta,
detallada en la sección 3.2.4.
Cuando se computa una arista frontera eb , el nuevo quad solapa una cierta región
de la malla local a eb . Esta zona de la malla se encuentra delimitada por una distancia
aproximada a la longitud de proyección lproj .
61
62
Capı́tulo 4. Mejoras en Marching Quads
4.1.2.
Solución al problema
Porque el nuevo quad va a localizarse en una zona local, se propone utilizar una
esfera centrada en eb y de radio Fl ∗ lproj , siendo Fl un factor que permite aumentar
ligeramente la distancia de proyección para tener un margen de seguridad. Utilizando
esta esfera, se puede obtener un subconjunto local Ms de la malla M en cada iteración
del algoritmo detectando los elementos de M que se encuentran solapados por la
esfera de localidad.
Comprobar la restricción de Delaunay sobre la malla reducida Ms reduce el
cálculo de una iteración, al evitar varias veces recorrer un número más elevado de
elementos.
Una caracterı́stica de esta mejora de localidad es su naturaleza acelerativa con
respecto al algoritmo original. El motivo es que contra más elementos hay en la
malla, más cantidad de ellos son evitados por la reducción de la malla. De este
modo, esta mejora se va haciendo más efectiva cuanto más avanza el algoritmo de
poligonización.
Aun ası́, Marching Quads sigue siendo un algoritmo decelerativo ya que, debido
a que la malla crece progresivamente en número de elementos, la reducción de malla
ha de realizar más cálculos.
4.2.
Crecimiento del algoritmo en base a la simetrı́a del modelo
Los modelos de personajes suelen tener una malla con una cierta simetrı́a que,
si no es idéntica, al menos es estructural. Por ejemplo, un personaje humanoide
bı́pedo, tiene una mitad estructural de un brazo, una pierna, medio tronco y media
cabeza; y una mitad simétrica que se corresponde a la estructura anterior.
Por otra parte, el algoritmo de Marching Quads básico genera el crecimiento
de la malla de forma aleatoria, comenzando desde el quad semilla y extendiéndose
hacia todas direcciones. Esto es porque la lista de aristas a procesar utiliza un
ordenamiento FIFO, basado por tanto en la antigüedad de la arista.
4.3. MARCHING QUADS ADAPTATIVO A LA CURVATURA DEL MODELO63
En la sección 2.3.3 se comentó una alternativa al orden de procesamiento, la cual
fue desarrollada en el trabajo de Fournier [Fou09]. El orden en el que computan las
aristas en este trabajo, se realiza siguiendo el contorno de la malla en dirección hacia
la siguiente arista frontera. El resultado de este cambio en el orden es la obtención
de mejores mallas, en cuanto a la minimización de cracks se refiere.
Nosotros proponemos una alternativa al orden de procesamiento de las aristas
orientada a mejorar la estructura de la malla poligonal en base a la simetrı́a del
modelo. Nuestra técnica parte desde un quad semilla situado en el plano de simetrı́a
del modelo, y luego se añaden los nuevos quads dando prioridad las aristas frontera
en base a la cercanı́a al plano de simetrı́a. Para ello se utiliza una cola de prioridad
para las aristas a procesar, cuyo orden se base en la cercanı́a del punto medio de la
arista con su proyección en el plano de simetrı́a.
Este algoritmo basado en simetrı́a permite empezar la construcción de quads en
el plano de simetrı́a generando una malla mejor estructurada. Progresivamente se
va cerrando la malla en zonas más alejadas de la simetrı́a obteniendo cracks en estas
zonas. La imagen 5.5 muestra este crecimiento de malla hasta que se completa un
modelo poligonal cuya estructura se ajusta a la simetrı́a.
Para que el algoritmo empiece a construir desde el plano de simetrı́a, es un
requisito de esta mejora que el quad inicial se encuentre situado en dicho plano
y con orientación paralela a él. El algoritmo que se detalló en la sección 3.4 para
localizar el quad semilla contempla estos requisitos.
4.3.
4.3.1.
Marching Quads adaptativo a la curvatura
del modelo
Análisis del problema
Para que el algoritmo básico de Marching Quads tenga una resolución acorde al
modelo, y no se pierdan caracterı́sticas topológicas en zonas de alta curvatura, la
distancia constante de proyección lproj , y en definitiva el tamaño de los quads, se
define en base a la esfera de menor tamaño. De este modo, los polı́gonos de la malla
resultante se ajustan a una resolución correcta para la zona de máxima curvatura
64
Capı́tulo 4. Mejoras en Marching Quads
del modelo.
Sin embargo, en modelos con una estructura muy compleja donde las primitivas
implı́citas más pequeñas difieren considerablemente de las más grandes, la resolución
de la malla poligonal se hace demasiado densa por estar el tamaño de quad ajustado
a la esfera de menor tamaño (ver ejemplo superior de la imagen 5.7). Además, la gran
cantidad de polı́gonos que se generan en este tipo de modelos provoca una notable
ralentización del algoritmo, debido a que la restricción de Delaunay progresivamente
realiza más cálculos por computar mayor número de elementos en la malla. Incluso,
esta ralentización es significativa utilizando la mejora acelerativa de simplificación
de malla local detallada en la sección 4.1.
Se puede pensar en aumentar el tamaño de quad para disminuir el número de
polı́gonos del modelo, por ejemplo calculando el factor de resolución en base al
tamaño medio de las esferas. Aunque esto es correcto, y permitirı́a disminuir el
tiempo de cálculo obteniendo una resolución acorde al modelo, se poligonizarı́an
mal las zonas del modelo con alta curvatura, pudiéndose incluso recortar partes del
mismo.
4.3.2.
Algoritmo adaptativo
Adaptación de la proyección a la curvatura
Se propone el uso una distancia de proyección lproj variable, la cual se define
acorde a la curvatura local de la superficie, idea que ya fue desarrollada por Akkouche
y Galin en [AG01] para ser utilizada en el algoritmo de Marching Triangles. Adaptar
la distancia de proyección permite generar quads de tamaño menor en zonas de alta
curvatura para evitar perder detalles del modelo, y generar quads de mayor tamaño
en zonas muy planares sin que supngan una perdida de calidad en el modelo (ver
ejemplos inferiores de la imagen 5.7).
Para evitar el cálculo de la curvatura de la superficie nosotros proponemos utilizar
el tamaño de la esfera, ya que el tamaño de ésta es proporcional a la curvatura de
su superficie. La distancia de proyección lproj puede ser calculada en base al radio
de la esfera implı́cita local, de modo que a mayor radio la distancia de proyección
se decremente.
4.3. MARCHING QUADS ADAPTATIVO A LA CURVATURA DEL MODELO65
Cálculo de la proporción en el quad inicial
A la hora de crear el quad inicial, su tamaño es escogido de manera proporcional al tamaño de la primitiva implı́cita donde está situado. El tamaño del quad
inicial es escogido por el usuario mediante el factor de resolución, el cual indica
aproximadamente el tamaño del quad con respecto a la curvatura (tamaño de su
esfera).
Para que el resto de quads mantengan una proporción similar al quad semilla
entre la curvatura y el tamaño de quad, se ha de calcular un factor de proporción
que relacione el tamaño del quad inicial con el tamaño de la esfera implı́cita donde
se sitúa.
Tamaño del quad inicial En primer lugar se calcula una medida del tamaño del
quad inicial como la distancia media de los lados del polı́gono,ya que la proyección
se basa en esa longitud.
IQsize =
l1 +l2 +l3 +l4
,
4
donde li es la longitud de cada arista del quad.
Curvatura en el quad inicial A continuación, se calcula el valor de la curvatura
de la superficie en el quad inicial, como una media de los radios de las primitivas
esféricas que se corresponden a cada uno de los cuatro vértices del quad inicial.
ISsize =
Sv1 +Sv2 +Sv3 +Sv4
,
4
donde Svi se corresponde con el tamaño de la primitiva
en el vértice i.
Factor de proporción El factor de proporción es una relación entre el tamaño
del quad inicial con respecto a la curvatura de dicho quad.
FQsize =
IQsize
ISsize
Cálculo de la proyección para los nuevos quads
El algoritmo de Marching Quads adaptativo, en vez de proyectar los nuevos
puntos una distancia constante lproj como en el algoritmo básico, esta distancia ha
de recalcularse en cada paso del algoritmo utilizando la curvatura local. Cómo no
66
Capı́tulo 4. Mejoras en Marching Quads
puede ser anticipada la curvatura en el punto destino de la proyección, se estima la
curvatura utilizando la del origen de la proyección, el quad frontera Qb .
La curvatura del quad Qb es calculada del mismo modo que ISsize , como una
media de los radios de las primitivas implı́citas de cada vértice. Multiplicando este
valor por el factor de proporción, se obtiene el tamaño de un lado de quad proporcional a la curvatura de la zona, y por tanto éste es el valor lproj al que se desea
ajustar el nuevo quad.
Capı́tulo 5
Resultados experimentales
En este capı́tulo se mostrarán algunos de los resultados que se han obtenido con el
poligonizador Marching Quads que se presenta en este documento, y el cual permite
convertir a malla poligonal de quads, modelos de superficies implı́citas definidas
como un conjunto de esferas.
En algunas imágenes, el modelo implı́cito del modelo es mostrado para ser comparado con la malla poligonal. Estas visualizaciones implı́citas se han obtenido dibujando cada primitiva esférica mediante una aproximación poligonal de alta resolución
generada mediante OpenGL.
Los quads resultantes en la malla poligonal son visualizados en color amarillo
anaranjado, dibujándose en color azul sus caras traseras para permitir localizar
agujeros en la malla. Los triángulos que genera el algoritmo de cierre de cracks
son visualizados en color verde claro para poder distinguir entre ambos tipos de
polı́gonos1 .
Varias de las pruebas que se presentan en este capı́tulo son mostradas sin cerrar
cracks, para permitir enfocar los ejemplos a las caracterı́sticas que se desean analizar
del algoritmo de Marching Quads.
Las imágenes que se muestran en esta sección muestran varios datos sobre el modelo. Se muestra un valor aproximado del número de polı́gonos que se han generado
en la malla poligonal que, en caso de mallas con cracks se corresponden exclusiva1
En escala de grises los triángulos y las caras traseras se visualizan de un tono más claro que
los quads
67
68
Capı́tulo 5. Resultados experimentales
mente con quads. Además, se muestra el tiempo de generación
2
de la malla por el
poligonizador, excluyendo el algoritmo de cierre de cracks. Además, se muestra un
factor de tamaño de quad que permite definir la resolución de la malla, y el cual
se detallará más adelante. En los modelos implı́citos se muestran la cantidad de
primitivas esféricas que contienen.
Este capı́tulo esta dividido en dos partes: una primera donde se expondrán resultados del poligonizador en modelos básicos, para analizar su funcionamiento y el de
sus mejoras; y una segunda parte donde se mostrarán resultados aplicado a modelos
complejos.
5.1.
5.1.1.
Caracterı́sticas de Marching Quads
Algoritmo básico
Esfera
La prueba más básica del algoritmo es la realizada para un modelo implı́cito de
una única primitiva, la esfera, ya que se corresponde con el volumen tridimensional
más básico y simétrico.
La figura 5.1 muestra la malla poligonal generada para la esfera, y su visualización
en facetas, del modelo de esfera tras aplicar el algoritmo de poligonización. Además,
se muestra el resultado de la misma malla tras aplicar el algoritmo de cierre de
cracks. Nótese como éste último ejemplo genera algunos polı́gonos triangulares en
las zonas que se encontraban con agujeros.
Factor de tamaño de quad
Un parámetro muy importante en el poligonizador Marching Quads es el factor
de resolución de malla. Este valor permite definir el tamaño de los quads de la malla
en función al radio de una esfera, como un porcentaje del tamaño de la misma.
Para versiones no adaptativas el factor se aplica a la esfera de menor tamaño para
no perder caracterı́sticas morfológicas del modelo en zonas de alta curvatura. Por
2
Se ha utilizado para las pruebas un Intel Core 2 T5600 1.83GHz
5.1. CARACTERÍSTICAS DE MARCHING QUADS
69
ejemplo, un valor de 0.1 define el tamaño de los quads de la malla como un 10 % de
la longitud del radio de la esfera más pequeña.
Figura 5.1: Poligonización de una esfera utilizando Marching Quads básico, antes
(izquierda) y después (derecha) de cerrar los cracks.
Figura 5.2: Resultados de aplicar Marching Quads utilizando diferentes valores del
factor de resolución de malla. De izquierda a derecha valores de 3 % del radio de la
esfera, 6 % del radio y 8 % del radio.
La figura 5.2 permite ver la malla del modelo de esfera en tres resoluciones: con
un tamaño de quad del 3 % con respecto al radio de la esfera, con un 6 % y con un
8 %. Puede apreciarse la variación del tamaño de los quads en los tres casos.
70
Capı́tulo 5. Resultados experimentales
Se puede percibir que, a mayor número de polı́gonos generados, el tiempo de
cálculo crece de manera no lineal, 2.5 segundos 1500 polı́gonos frente a los 44 segundos de aproximadamente el doble de polı́gonos. Esto es debido a que el algoritmo
progresivamente amplı́a el número de quads de la malla. Como en cada iteración del
algoritmo se ha de computar la restricción de Delaunay para todos los elementos de
la malla, es obvio que el tiempo de cálculo en cada iteración será mayor cuanto más
elementos contiene el modelo.
Cierre de cracks
La figura 5.3 muestra más detalladamente un ejemplo de cierre de cracks, donde
se compara la malla con agujeros con respecto a la malla que resulta tras aplicar
el algoritmo de cierre. Puede observarse que los quads creados en la zona de crack
suelen ser más deformes, y que partes del agujero es sellado en ocasiones utilizando
un polı́gono triangular.
Modelo de 5 esferas
La figura 5.4 muestra la malla obtenida tras aplicar el algoritmo sobre un modelo
de cinco primitivas esféricas. Además, se muestra la malla poligonal tras cerrar todos
sus cracks.
5.1.2.
Mejora acelerativa del algoritmo
De las pruebas realizadas sobre el modelo de esfera y el modelo de cinco bolas,
para una misma resolución de malla de factor 3 % y 6 % respectivamente, se ha
obtenido la tabla 5.1 que permite comparar los tiempos de cálculo del algoritmo
básico con el algoritmo con mejora acelerativa.
Los resultados empı́ricos muestran que la mejora permite casi triplicar la rapidez
del algoritmo, siendo más efectiva cuanto más número de polı́gonos contiene el la
malla final.
5.1. CARACTERÍSTICAS DE MARCHING QUADS
71
Figura 5.3: Comparación de una malla poligonal con agujeros con respecto a la
misma malla tras aplicar el algoritmo de cierre de cracks.
Modelo
esfera (Factor 3 %)
5 bolas (Factor 6 %)
MQ Básico
44 segundos
314 segundos
MQ con Aceleración
16,5 segundos
110 segundos
Aceleración
X2,66
X2,85
Cuadro 5.1: Comparativa de tiempos del algoritmo de Marching Quads básico ,
con respecto al algoritmo con la mejora acelerativa. Se muestran resultados para el
modelo de esfera y el modelo de cinco esferas.
72
Capı́tulo 5. Resultados experimentales
Figura 5.4: Modelo Implı́cito de cinco esferas (imagen superior izquierda), malla
del modelo obtenida por Marching Quads básico (imagen derecha) y malla que se
obtiene tras cerrar los cracks (imagen inferior izquierda).
5.1.3.
Mejora de quads ajustados a la simetrı́a del modelo
En este trabajo se ha presentado una alternativa de construcción de la malla en
la que los quad se ajusten a la simetrı́a del modelo. Esta mejora alterna el orden
de procesamiento de las aristas para que la construcción de nuevos quads se realice
desde el plano de simetrı́a. La figura 5.5 muestra varios momentos del algoritmo en
el modelo de cinco bolas donde puede observarse como la malla crece desde el plano
de simetrı́a hacia zonas más alejadas.
5.1. CARACTERÍSTICAS DE MARCHING QUADS
73
Figura 5.5: De izquierda a derecha y de arriba a abajo, se muestra la malla del
modelo de 5 esferas en distintos instantes del algoritmo de Marching Quads con la
mejora de simetrı́a. Se observa que los quads se construyen desde el plano de simetrı́a
del modelo.
La figura 5.6 muestra las mallas resultantes tras aplicar el algoritmo utilizando
un procesado de aristas FIFO y tras aplicar el procesado de aristas en base a la
74
Capı́tulo 5. Resultados experimentales
cercanı́a al plano de simetrı́a. Nótese que el primer caso los quads están generados
correctamente pero de forma aleatoria, y que en el segundo caso los quads mantienen
una buena estructura en zonas cercanas al plano de simetrı́a.
Se puede ver que la malla poligonal basada en simetrı́a:
Tiene un mallado mejor.
No hay penalización significativa en el cómputo del modelo.
Genera más polı́gonos, y por tanto minimiza el tamaño de los cracks.
5.1.4.
Mejora de quads adaptados a la curvatura de la superficie
Otras de las mejoras que se proponen en este trabajo es la de adaptar el tamaño
de los quads a la curvatura local del modelo.
Los dos primeros casos de la figura 5.7 permiten comparar la malla del modelo de
cinco bolas obtenida con el algoritmo básico, con respecto a la misma malla obtenida
con tras aplicar el algoritmo adaptativo. Se puede observar que en el primer caso los
quads mantienen un tamaño uniforme basado en el tamaño de la esfera de menor
tamaño. Por contra, en la malla obtenida de forma adaptativa, puede observarse que
el tamaño de quad varı́a en función del radio de la esfera implı́cita donde se sitúa el
polı́gono.
Aunque la malla adaptativa genera menos polı́gonos, la percepción del modelo es
similar a la malla obtenida de forma no adaptativa. Además, minimizar el número de
polı́gonos implica que el tiempo de cómputo sea mucho menor utilizando la mejora
adaptativa.
La comparación del segundo y tercer caso de la figura 5.7 permite demostrar
que, independientemente del factor de tamaño de quad, los polı́gonos se adaptan el
tamaño a la curvatura y que lo que varı́a es la resolución general de la malla.
5.1. CARACTERÍSTICAS DE MARCHING QUADS
75
Figura 5.6: Comparativa, para el modelo de cinco esferas, entre malla obtenida con
crecimiento aleatorio (Marching Quads básico) y malla obtenida mediante Marching
Quads con mejora de crecimiento basado en simetrı́a.
76
Capı́tulo 5. Resultados experimentales
Figura 5.7: Comparativa entre malla obtenida con el algoritmo básico y malla obtenida de forma adaptativa, para el modelo de cinco bolas.
5.2. RESULTADOS EN MODELOS IMPLÍCITOS COMPLEJOS
5.2.
77
Resultados en modelos implı́citos complejos
A continuación se muestran varios resultados del poligonizador para modelos
complejos que contienen un número elevado de primitivas esféricas. Las pruebas se
han realizado utilizando el algoritmo de poligonización Marching Quads incluyendo
la mejora acelerativa, el crecimiento de malla basado en simetrı́a y la mejora que
permite adaptar el tamaño de los quads a la curvatura del modelo. que incluye
las tres mejoras aplicado a modelos implı́citos que contienen una gran cantidad de
primitivas esféricas. Además, a todos los ejemplos se les ha aplicado el algoritmo de
cierre de cracks.
La figura 5.8 muestra los resultados de un modelo de árbol de 693 esferas. La
figura 5.9 muestra los resultados para un modelo de humanoide de 1000 esferas y
la figura 5.10 muestra otro humanoide en postura de agachado también de 1000
esferas. Por último, en la figura 5.11 se muestra un modelo de perro de 520 esferas.
78
Capı́tulo 5. Resultados experimentales
Figura 5.8: P
oligonización del modelo de árbol. Poligonización de modelo de árbol (693 esferas).
Arriba se muestra el árbol con una resolución de tamaño de quad de 10 % del radio
de la esfera y abajo se muestra con resolución de 20 %.
5.2. RESULTADOS EN MODELOS IMPLÍCITOS COMPLEJOS
79
Figura 5.9: Poligonización del modelo de humanoide (1000 esferas). A la izquierda
se muestra el modelo implı́cito y las dos imágenes de la derecha muestran la malla
poligonal con una resolución de tamaño de quad de 20 % del radio de la esfera.
80
Capı́tulo 5. Resultados experimentales
Figura 5.10: Poligonización del modelo de humanoide sentado (1000 esferas). A la
izquierda se muestra el modelo implı́cito y las dos imágenes de la derecha muestran
el modelo poligonal con una resolución de tamaño de quad de 10 % del radio de la
esfera.
5.2. RESULTADOS EN MODELOS IMPLÍCITOS COMPLEJOS
81
Figura 5.11: Poligonización del modelo de perro (520 esferas). A la izquierda se
muestra el modelo implı́cito y las dos imágenes de la derecha muestran el modelo
poligonal con una resolución de tamaño de quad de 15 % del radio de la esfera.
82
Capı́tulo 5. Resultados experimentales
Capı́tulo 6
Conclusiones y trabajos futuros
6.1.
6.1.1.
Conclusiones
Caracterı́sticas de Marching Quads
Como muestran los resultados presentes en el capı́tulo anterior, el poligonizador
de superficies implı́citas permite obtener mallas de quads con las siguientes caracterı́sticas:
En general, los quad que el algoritmo construye tienen una morfologı́a bastante
buena por la similitud que tienen con un cuadrado, que es el polı́gono perfecto
por su equilateralidad.
La malla poligonal es una aproximación muy fiel al modelo, ya que por una
parte todos los vértices están sobre la superficie del modelo, y por otra parte
el tamaño de los quads está ajustado a la curvatura de modo que se pierdan
pocas caracterı́sticas morfológicas del modelo.
Los tiempos de cómputo para la versión adaptativa son bastante aceptables
para ser usado como preprocesado del sistema de creación de personajes 3D
automático. La mejora de aceleración consigue decrementar considerablemente el tiempo de cómputo del algoritmo. Además, sus efectos se incrementan
cuanto más compleja es la malla poligonal resultante, en cuanto al número de
polı́gonos que contiene.
El crecimiento de los quads basado en simetrı́a permite que, en general, los
83
84
Capı́tulo 6. Conclusiones y trabajos futuros
quad se encuentren orientados según la simetrı́a del modelo, y además que la
malla se encuentre mejor estructurada en zonas cercanas a al plano de simetrı́a,
minimizando los cracks en el modelo. Además, esta caracterı́stica no influye
en el tiempo de procesado del algoritmo.
6.1.2.
Limitaciones
Polı́gonos deformados en las zonas de cracks
El algoritmo de poligonización Marching Quads trata de construir quads con
una morfologı́a cercana a la equilateralidad para que la calidad de la malla final sea
aceptable. Todos los resultados del capı́tulo anterior que muestran mallas con cracks
muestran que, efectivamente, la calidad de los quads es bastante buena.
Sin embargo, hay situaciones en las que el algoritmo es incapaz de crear un buen
quad dejando un agujero en la malla. El algoritmo de cierre de cracks (ver figura 5.3)
permite cerrar correctamente todos los agujeros, aunque para ello se ve forzado a
la construcción de polı́gonos algo deformes y algunos triángulos. A pesar de ello,
la calidad de la malla sigue manteniendo una correcta topologı́a. Además, modelos
de animación diseñados con herramientas CAD por modeladores también incluyen
algunos polı́gonos triangulares.
Limitaciones en Marching Quads básico
El algoritmo básico, debido a su homogeneidad en el tamaño de los polı́gonos,
tiene el inconveniente de que en modelos muy complejos, donde existe una considerable diferencia de tamaño entre la esfera de mayor y menor tamaño, se obtiene
una malla con un número bastante elevado de polı́gonos. Esto es debido a que el
tamaño es escogido en base a la esfera más pequeña, lo que provoca que en las
zonas de superficies de menor curvatura (esferas grandes) se creen polı́gonos demasiado pequeños. Estos quads construidos en zonas planares, podrı́an haber sido de
un tamaño superior sin que ello supusiese una notable perdida de fidelidad con el
modelo.
En la figura 6.1 se muestra este problema en el modelo de árbol, donde los
extremos de las raı́ces del árbol están formados por primitivas muy pequeñas en
6.1. CONCLUSIONES
85
comparación con las primitivas de la copa del árbol. Esto provoca que todo el modelo
contenga un tamaño diminuto de quads. Además, que la malla crezca excesivamente
en cuanto a número de polı́gonos, tiene el inconveniente de que el algoritmo se hace
muy pesado en cuanto a cálculo, obteniéndose el modelo en tiempos desorbitados.
Figura 6.1: Problema de poligonización no adaptativa en modelos complejos. El
tamaño de quad es ajustado a la zona de mayor curvatura, resultando en un número
de polı́gonos excesivo, y un tiempo de cálculo, excesivos.
Se podrı́a pensar en utilizar un tamaño basado en el tamaño medio de las primitivas. Aunque esto permitirı́a obtener quads mayores que minimizaran el número de
86
Capı́tulo 6. Conclusiones y trabajos futuros
polı́gonos, y por tanto el tiempo de obtención de la malla, tendrı́a el inconveniente
de que se perderı́an muchas caracterı́sticas morfológicas del modelo, como serı́a un
recorte en las raı́ces del modelo de árbol.
Limitaciones en Marching Quads basado en simetrı́a
La mejora de simetrı́a obtiene mallas mejor estructuradas y orientadas con el
plano de simetrı́a que comparándolas con malla de quads aleatorios (ver imagen 5.6).
Esta caracterı́stica permite que la malla se deforme más suavemente en sistemas de
animación.
Sin embargo, la mejora de simetrı́a no siempre obtiene quads correctamente
orientados en el modelo, ya que se da prioridad a las aristas según la cercanı́a al
plano de simetrı́a antes que a la orientación de éstas. Este es el caso del ejemplo
inferior de la figura 5.8, donde el tronco del árbol no tiene bien orientados los quads.
Limitaciones en Marching Quads adaptativo
La solución al problema del algoritmo básico de generación de mallas con un alto
número de polı́gonos de pequeño tamaño, está en la mejora adaptativa presentada
en este trabajo, donde el tamaño de los quads es adaptado a la zona local del
modelo. En la figura 5.8 puede observarse el mismo modelo de árbol que el de la
figura 6.1 pero obtenido de forma adaptativa. De este modo se obtiene una malla
topológicamente correcta con un número de polı́gonos mucho menor, y por tanto en
un tiempo mucho más bajo.
Sin embargo, esta caracterı́stica adaptativa tiene una limitación en modelos donde hay cambios bruscos de grosor hacia una zona mucho más estrecha. En estos
casos, el algoritmo puede llegar a recortar esta zona estrecha. La figura 6.2 muestra los modelos de humanoide sentado y de perro, los cuales se presentaron en las
figuras 5.10 y 5.11, donde se muestran zonas estrechas recortadas por usarse una
resolución de tamaño de quad alto.
El raı́z de este problema reside en la anticipación del algoritmo adaptativo, ya
que la curvatura es anticipada mediante el tamaño quad frontera donde se pretende
anexar el nuevo quad. En zonas donde el quad frontera se encuentra en una esfera
6.1. CONCLUSIONES
87
de tamaño mucho mayor a la esfera donde se van a proyectar los nuevos vértices, el
quad generado puede ser que no sea capaz de alcanzar la superficie implı́cita, siendo
descartado (ver caso (a) de la figura 6.4).
El motivo de que no se pueda encontrar puntos sobre la superficie implı́cita en
zonas muy estrechas, es debido a que se busca el corte con la superficie implı́cita se
busca en el plano perpendicular a la arista frontera eb (ver sección 3.3). Por tanto,
la circunferencia donde se buscan los puntos cercanos no corta a la superficie en la
zona estrecha.
Una posible solución es la de dar más resolución a la malla decrementando
el factor de tamaño de quad, para facilitar al algoritmo que alcance la superficie
implı́cita en zonas muy estrechas. Este es el caso de los modelos de humanoide
sentado y perro de las figuras 5.10 y 5.11, donde se pudo obtener una malla completa
del modelo incrementando la resolución general de la malla.
Sin embargo, pueden encontrarse modelos donde el algoritmo sea incapaz de
obtener la malla completa, o si fuese posible, entonces se generarı́an en tiempos de
cómputo alto. Este es el caso de un modelo de perro alternativo, mostrado en la
figura 6.3, del cual no se ha podido obtener una malla completa utilizando un factor
de 10 % que genera un numero de polı́gonos bastante elevado (aproximadamente
20000).
6.1.3.
Comparación con otros algoritmos
La figura 2.13 muestra una comparación de la malla de un modelo de esfera para el algoritmo de Marching Cubes, Marching Triangles y Marching Quads. Puede
observarse que el algoritmo de Marching Cubes genera una gran cantidad de polı́gonos, y además que éstos no preservan una correcta topologı́a de la malla al ser muy
deformados. Sin embargo, los algoritmos de Marching Triangles y Marching Quads,
por estar basado en la triangulación de Delaunay [Del34], generan polı́gonos que son
estructuralmente más regulares a lo largo de la malla, con la diferencia que Marching
Quads genera polı́gonos cuadrangulares.
88
Capı́tulo 6. Conclusiones y trabajos futuros
Figura 6.2: Problema de recorte de zonas estrechas de malla en Marching Quads
adaptativo. A la izquierda el modelo de humanoide sentado tiene los brazos recortados debido a la estrechez del hombro. A la derecha, las orejas del modelo de perro
aparecen cortadas.
La tabla 6.1 muestra una comparación del número de polı́gonos que se generan en
cada algoritmo. Se observa que Marching Triangles y Marching Quads, al mantener
una homogeneidad en la forma y tamaño de los polı́gonos el número de ellos es
mucho más bajo que el de Marching Cubes.
Algoritmo
Marching Cubes
Marching Triangles
Marching Quads
Tiempo (seg)
12
4
0,66
Polı́gonos
11272
1498
1379
Cuadro 6.1: Comparativa de tiempos y números de polı́gonos del algoritmo de Marching Cubes, Marching Triangles y Marching Quads para el modelo de esfera.
6.1. CONCLUSIONES
89
Figura 6.3: Modelo de perro alternativo que contiene cambios bruscos de grosor.
Con una resolución de tamaño de quad de 25 % una oreja, tres patas y el rabo del
perro aparecen recortadas. Subiendo la resolución de la malla bajando el tamaño de
quad a 10 %, una oreja y dos patas se encuentran recortadas.
La tabla también muestra una comparativa de tiempos. Aunque esta comparación no es significativa, ya que se han utilizado sistemas heterogéneos para la
obtención de tiempos (SUN Sparc 10 para Marching Cubes y Marching Triangles
y Intel Core 2 T5600 1.83GHz para Marching Quads), el algoritmo que se ha propuesto en este trabajo parece que trabaja en tiempos aceptables para ser usado en
sistemas interactivos.
90
Capı́tulo 6. Conclusiones y trabajos futuros
6.1.4.
Otras aplicaciones del algoritmo
Aunque este algoritmo ha sido diseñado para ser implementado en el sistema de
generación automática de personajes 3D, el poligonizador Marching Quads puede
perfectamente ser implementado en otros sistemas. En estos casos, la búsqueda del
punto más cercano sobre la superficie y la búsqueda del quad inicial deben de ser
modificadas para adaptarse al tipo de superficie implı́cita que utiliza el sistema.
6.2.
Trabajos futuros
A partir de este trabajo se pueden abrir diversas lı́neas de investigación que
permitan solventar algunos de los inconvenientes que el algoritmo presenta, y añadir
o mejorar algunas de sus caracterı́sticas.
6.2.1.
Mejora adaptativa
Análisis del problema
El problema más grave que presenta el algoritmo adaptativo es el de recorte en
algunas zonas de los modelos que se ha detallado en la sección 6.1.2. Esta limitación
es debida a que la proyección para construir el nuevo quad hacia en zonas del modelo
con cambios bruscos en el tamaño de las esferas, a veces es incapaz de localizar zona
de superficie.
Cuando se pasa de una zona gruesa a una estrecha, los polı́gonos suelen tender
a cerrarse. Por contra, el paso de una zona estrecha a una más gruesa, tiende a
abrir los quads. Este efecto puede observarse en la figura 1.3, donde los quads de
las esferas modeladas con la herramienta Autodesk Maya tienden a cerrarse cuanto
más cerca de los polos se sitúan.
Posible solución
Una solución a este problema puede ser el realizar una primera proyección Ps que
permita sondear el tamaño de la primitiva esférica destino. A continuación, sabiendo
como cambia la curvatura de forma local, se puede escoger el tamaño del nuevo quad
6.2. TRABAJOS FUTUROS
91
utilizando una distancia de proyección que pondere los tamaños de las primitivas
del origen y del destino.
Además, atendiendo a la caracterı́stica de que los quad tienden a cerrarse o
abrirse según el cambio de grosor en el modelo, serı́a interesante poder modificar
levemente la inclinación del plano donde se proyectan los nuevos puntos, según el
sondeo indique que el modelo se hace más o menos grueso. Esto permitirı́a anticipar,
y adaptar la morfologı́a del quad al cambio de grosor del modelo.
Otra forma de anticipar la inclinación de los planos es realizar un primer sondeo
de la inclinación del plano. Para ello se localizarı́a una aproximación de la superficie implı́cita utilizando la dirección de la arista eb para obtener un punto Psi . la
inclinación del plano donde situar la circunferencia que permite localizar los puntos
cercanos sobre la superficie implı́cita, es la que contiene al vector que une el punto
Psi con el vértice de eb desde el que se proyectó.
solución de forma gráfica La figura 6.4 muestra gráficamente esta solución para
una superficie implı́cita que se estrecha. En (a) se muestra el motivo de recorte de
zonas estrechas. El punto cercano sobre la superficie implı́cita no puede localizarse
debido a que el plano de la circunferencia no corta a la superficie implı́cita (en la
dirección hacia la proyección) quedándose la proyección exterior al modelo.
En (b) se muestra la solución que se propone para anticipar la curvatura en
el destino. Primero se proyecta la distancia lproj desde el medio de la arista para
obtener el punto Ps y se calcula el tamaño medio de las primitivas esféricas en ese
punto de sondeo. Ponderando entre el tamaño de la esfera en el quad Qb al que
pertenece la arista a computar eb y el tamaño medio que se ha calculado en el Ps ,
se calcula una nueva distancia de proyección lproj .
En (b) también se muestra la propuesta para anticipar la inclinación del plano
de la circunferencia para buscar el punto cercano sobre la superficie implı́cita. Utilizando una recta paralela a la arista eb que pase por el punto Ps , se calcula un punto
sobre la superficie implı́cita Psi . La circunferencia para buscar el punto cercano ahora es situada sobre el plano que contiene al punto Psi y al vértice de la arista eb que
se está computando.
92
Capı́tulo 6. Conclusiones y trabajos futuros
En (c) se muestra el resultado de utilizar la circunferencia en el nuevo plano
que se ha anticipado, y utilizando el nuevo tamaño de proyección. Obsérvese que de
esta forma se puede localizar un vértice sobre la superficie implı́cita a una distancia
adecuada.
Circumference
Ps
Psi
lproj
Circumference
lproj
eb
Implicit
Surface
Implicit
Surface
Implicit
Surface
(a)
eb
eb
(b)
(c)
Figura 6.4: (a) Problema del algoritmo adaptativo en zonas estrechas. La circunferencia de proyección no es capaz de encontrar un punto sobre la superficie. (b)
Proyectando un punto de sondeo Ps se puede anticipar el tamaño de curvatura (esfera) en el destino. Además, se puede localizar un punto sobre la superficie Psi que
permita anticipar también la inclinación del punto de proyección. (c) Utilizando
la nueva inclinación y la distancia de proyección recalculada, se puede anticipar la
estructura de un buen quad.
6.2.2.
Aceleración por simetrı́a
Otra mejora que puede añadirse al algoritmo es, basándose en la simetrı́a, computar el algoritmo solamente en una de las mitades en las que el plano de simetrı́a divide
al modelo. Un proceso añadido como último paso del algoritmo, permitirı́a clonar
simétricamente la malla para añadir la otra mitad del modelo.
Esta mejora reducirı́a a la mitad el tiempo de procesado. Incluso se reducirı́a
más si se tiene en cuenta que el tiempo de cálculo del algoritmo de Marching Quads
no es lineal, siendo mucho mayor cuanto más polı́gonos contiene la malla.
6.2. TRABAJOS FUTUROS
6.2.3.
93
Mejora de orientación de quads por simetrı́a
Ya se describió en el apartado de limitaciones de la sección 6.1.2 que los quads
no siempre son capaces de orientarse con la simetrı́a.
En este trabajo se da prioridad a la cercanı́a de las aristas con el plano de
simetrı́a para que se produzca un mejor mallado en esas zonas. Por contra, existe
otro ordenamiento de aristas basado en la orientación de la arista con respecto al
plano, de modo que se de prioridad a las aristas paralelas al plano (incluso podrı́a
pensarse dar prioridad también a las aristas perpendiculares, siendo la peor posible
las aristas con un ángulo de 45o ). Sin embargo, este ordenamiento genera una malla
similar a la producida por el algoritmo aleatorio, salvo que los quads se construyen
mejor orientados.
Una alternativa que podrı́a dar mejores resultados podrı́a ser mezclar ambos
ordenamientos mediante una ponderación entre la cercanı́a al plano y la orientación
de las aristas.
6.2.4.
Mejora en la búsqueda del punto cercano a la superficie
Si se observa la figura 3.5, el algoritmo de búsqueda del punto cercano sobre la
superficie implı́cita escoge un punto que, el algoritmo de Marching Quads descarta
por tener orientación opuesta.
Este problema podrı́a haberse solventado si el algoritmo de búsqueda del punto
cercano hubiese detectado y anticipado que el punto tiene una mala orientación,
proponiendo otros puntos sobre la superficie que corten a la circunferencia de proyección. De este modo, según se observa en el ejemplo se podrı́a haber localizado
un punto de corte en la zona correcta de la superficie, el cual hubiese permitido
continuar el crecimiento de la malla correctamente.
6.2.5.
Remallado en zonas de mallas enfrentadas
En el algoritmo de edge-spinning de Čermák y Skála [CS04], tal y como se
comentó en la sección 2.2.3, ambos autores proponen una solución cuando dos zonas
94
Capı́tulo 6. Conclusiones y trabajos futuros
de la malla se encuentran enfrentadas y han de ser cerradas.
En vez de tratar de construir un nuevo polı́gono que se ajuste a la zona de malla
enfrentada para poder cerrar la malla, su idea es la de mover el vértice que se solapa
a una zona intermedia.
Basándose en esta idea se puede diseñar algún algoritmo que, una vez detectado
que algún vértice de un nuevo quad se encuentra cerca de una zona existente de malla, realizar un remallado de dicha zona para permitir cerrar la malla correctamente.
Esto permitirı́a minimizar, si no evitar, la aparición de cracks en la malla, y además
mejorarı́a la calidad de la malla, ya que el responsable de producir los peores quads
es el algoritmo que cierra los cracks.
6.2.6.
Remallado en zonas de cracks
Los polı́gonos de peor aspecto son los que se generan debido al algoritmo de cierre
de cracks. Esto se debe a que este algoritmo utiliza los vértices del crack para poder
crear los nuevos polı́gonos, viéndose forzado en ocasiones a la creación de algunos
deformados.
Podrı́a mejorarse este algoritmo de cierre evitando la construcción de polı́gonos
con una mala estructura morfológica permitiendo modificar la posición de los vértices
del crack. Esto implicarı́a un remallado de la vecindad del crack para no perjudicar
a los quads ya existentes. Además, los vértices que cambien de lugar han de ser
ajustados a la superficie implı́cita por algún algoritmo que permita localizar el punto
cercano a la superficie.
Bibliografı́a
[3Ds10] Autodesk 3d max studio. http://www.autodesk.es, Mayo 2010.
[AG01] Samir Akkouche and Eric Galin. Adaptive implicit surface polygonization using marching triangles. Comput. Graph. Forum, 20(2):67–
80, 2001.
[BcBB+ 97] Jules Bloomenthal, chandrajit Bajaj, Jim Blinn, Marie-Paule CaniGascuel, Alyn Rockwood, Brian Wyvill, and Geoff Wyvill. Introduction to Implicit Surfaces. Morgan Kaufmann, 1997.
[Blo88] Jules Bloomenthal. Polygonization of implicit surfaces. Computer
Aided Geometric Design, 5(4):341–355, 1988.
[BW90] Jules Bloomenthal and Brian Wyvill. Interactive techniques for implicit modeling. In Symposium on Interactive 3D Graphics, pages
109 – 116, 1990.
[CS04] Martin Cermák and Václav Skala. Adaptive edge spinning algorithm for poligonization of implicit surfaces. In Computer Graphics
International, pages 36–43. IEEE Computer Society, 2004.
[DC04] Guillaume Dewaele and Marie-Paule Cani. Interactive global and
local deformations for virtual clay. Graph. Models, 66(6):352–369,
November 2004. Special Issue: Pacific Graphics 2003.
[Del34] Boris Delaunay. Sur la sphere vide. a la mémoire de georges voronoi.
In Bulletin of Academy of Sciences of the USSR, pages 793–800,
1934.
95
96
BIBLIOGRAFÍA
[dFdMGTV92] Luiz Henrique de Figueiredo, Jonas de Miranda Gomez, Demetri
Terzopoulos, and Luiz Velho. Physically-based methods for polygonization of implicit surfaces. In Graphics Interface’92, pages 250–
257, Vancouver, Canada, 1992.
[DTG96] Mathieu Desbrun, Nicolas Tsingos, and Marie-Paule Gascuel. Adaptive sampling of implicit surfaces for interactive modelling and animation. Comput. Graph. Forum, 15(5):319–325, 1996.
[ecl10] Entorno de desarrollo eclipse. http://www.eclipse.org/, Mayo
2010.
[FCG01] Eric Ferley, Marie-Paule Cani, and Jean-Dominique Gascuel. Resolution adaptive volume sculpting. Graph. Models, 63(6):459–478,
November 2001. Special Issue on Volume Modelling.
[FDB07] Marc Fournier, Jean-Michel Dischler, and Dominique Bechmann. A
new vector field distance transform and its application to mesh processing from 3d scanned data. The Visual Computer, 23(9-11):915–
924, 2007.
[Fou09] Marc Fournier. Surface reconstruction: An improved marching triangle algorithm for scalar and vector implicit field representations. In
SIBGRAPI, pages 72–79. IEEE Computer Society, 2009.
[Geo10] Visor de escenas 3d geomviewer. http://www.geomview.org/, Mayo 2010.
[Har98] Erich Hartmann. A marching method for the triangulation of surfaces. The Visual Computer, 14(3):95–108, 1998.
[HIIT97] A. Hilton, J. Illingworth, Delaunay Implicit, and Surface Triangulation. Marching triangles: Delaunay implicit surface triangulation,
1997.
[HSIW96a] A Hilton, A J Stoddart, J Illingworth, and T Windeatt. Marching
triangles: Range image fusion for complex object modelling. In IEEE
International Conference on Image Processing, pages 381–384, 1996.
BIBLIOGRAFÍA
97
[HSIW96b] Adrian Hilton, Andrew J. Stoddart, John Illingworth, and Terry
Windeatt. Reliable surface reconstructiuon from multiple range images. In Bernard F. Buxton and Roberto Cipolla, editors, ECCV (1),
volume 1064 of Lecture Notes in Computer Science, pages 117–126.
Springer, 1996.
[LC87] William E. Lorensen and Harvey E. Cline. Marching cubes: A high
resolution 3d surface construction algorithm. In Maureen C. Stone,
editor, SIGGRAPH, pages 163–169. ACM, 1987.
[May10] Autodesk maya. http://www.autodesk.es, Mayo 2010.
[MF02] Neil H. McCormick and Robert B. Fisher. Edge-constrained marching triangles. In 3DPVT, pages 348–351. IEEE Computer Society,
2002.
[Mik10] Paquete de herramientas tex: Miktex. http://miktex.org/, Mayo
2010.
[MW97] Heinrich Müller and Michael Wehle. Visualization of implicit surfaces using adaptive tetrahedrizations. Scientific Visualization Conference, 0:243, 1997.
[Ope10] Librerı́a gráfica opengl. http://www.opengl.org/, Mayo 2010.
[Par02] Rick Parent. Computer Animation: Algorithms and Techniques.
Morgan Kaufmann, 2002.
[QGL10] Librerı́a gráfica qglviewer. http://www.libqglviewer.com/, Mayo
2010.
[RDI10a] Alec Rivers, Frédo Durand, and Takeo Igarashi. 3d modeling with
silhouettes. SIGGRAPH 2010, 2010.
[RDI10b] Alec Rivers, Frédo Durand, and Takeo Igarashi. A user study comparing 3d modeling with silhouettes and google sketchup. MIT CSAIL
Technical Report. MIT-CSAIL-TR-2010-023, 2010.
[Sof10] Autodesk softimage. http://usa.autodesk.com, Mayo 2010.
98
BIBLIOGRAFÍA
[tex10] Texlipse: plugin para eclipse. http://texlipse.sourceforge.net/,
Mayo 2010.
[Ubu10] Sistema operativo ubuntu linux. http://www.ubuntu.com/, Mayo
2010.
[WH94] Andrew P. Witkin and Paul S. Heckbert. Using particles to sample
and control implicit surfaces. In SIGGRAPH, pages 269–277. ACM,
1994.

Documentos relacionados