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.