Comparación de Implementaciones en HW y SW de Métodos de Integración Numérica para Simulación de Tela Edición Única
Texto completo
(2) RESUMEN. El presente trabajo esta enfocado hacia el problema de la simulación de tela en tiempo real, el cual hasta la fecha sigue siendo un tópico de investigación importante en las gráficas computacionales. La simulación de tela que tenga un adecuado comportamiento físico, requiere de la solución de sistemas de ecuaciones diferenciales y respuesta a colisiones, que además de consumir muchos recursos de cómputo presentan características que los vuelven sistemas inestables. De manera particular, el objetivo principal es el explorar la posibilidad de ejecutar los cálculos numéricos que involucran al método de integración numérica en un hardware gráfico programable y compararlo con implementaciones de estos mismos métodos en software. Por lo tanto, en el desarrollo del presente trabajo se encontrará una introducción a la programación en hardware usando un lenguaje de alto nivel como Cg (C for graphics) aplicado a la programación de “vertex shaders” y “fragment shaders”, así como la implementación de algunos de los métodos numéricos usados en la simulación de tela, en este lenguaje. Se encontrará un análisis de los resultados obtenidos, que nos sirva como guía en la elección de uno de estos métodos y conocer los alcances y limitaciones de la programación en hardware gráfico, para ser aplicada en simulaciones de tela..
(3) CONTENIDO LISTA DE FIGURAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1. LISTA DE TABLAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 4. 1. ANTECEDENTES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 5. 2. OBJETIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 6. 2.1 2.2. OBJETIVO GENERAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBJETIVOS ESPECÍFICOS . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 6 6. 3. PLANTEAMIENTO DEL PROBLEMA . . . . . . . . . . . . . . . . . . . . . . . .. 7. 4. ESTADO DEL ARTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 8. 4.1. TÉCNICAS DE MODELADO DE TELA . . . . . . . . . . . . . . . . .. 8. 4.2. MODELOS DISCRETOS (PARTÍCULAS Y RESORTES) . . .. 13. 4.3. MÉTODOS DE INTEGRACIÓN NUMÉRICA . . . . . . . . . . . . . 4.3.1 Métodos Explícitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1.1 Método de Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1.2 Método del Punto Medio . . . . . . . . . . .. . . . . . . . . . . . . . 4.3.1.3 Método de Runge-Kutta . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1.4 Método de Verlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2 Métodos Implícitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2.1 Euler Implícito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2.2 Semi-implícito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2.3 Implícito Aproximado . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2.4 Implícito Explícito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 16 16 16 19 20 20 21 22 23 24 25. 4.4. EFECTO DE SUPER-ELASTICIDAD O SUPERELONGACIÓN 4.4.1 Ajuste por Posición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.2 Ajuste por Velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 26 27 28.
(4) 4.5. COLISIONES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.1 Detección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.2 Respuesta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 29 29 30. 4.6. HARDWARE GRÁFICO PROGRAMABLE . . . . . . . . . . . . . . . 4.6.1 “Vertex” y “Pixel Shaders” . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.2 Uso de hardware gráfico en el modelado de tela . . . . . . . . . . 4.6.2.1 Detección y respuesta a colisiones . . . . . . . . . . . . . . . . . 4.6.2.2 Modelado de tela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 30 31 32 32 33. 5. DESARROLLO Y RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 34. 5.1. AMBIENTE DE PRUEBAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 34. 5.2. INTRODUCCIÓN A LA PROGRAMACIÓN EN CG . . . . . . . . .. 35. 5.3. EXPLORANDO EL USO DE “VERTEX SHADERS” . . . . . . . . .. 38. 5.4. EXPLORANDO EL USO DE “FRAGMENT SHADERS” . . . . .. 40. 5.5. COMPARACIÓN DE MÉTODOS DE INTEGRACIÓN. . . . . . . . 5.5.1 Diseño del experimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.2 Estructura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.3 Rutinas de integración en cg . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.3.1 Fuerzas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.3.2 Velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.3.3 Posición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.3.4 Posición y fuerza Verlet . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.3.5 Velocidad y Cambio de velocidad para Implícito Aproximado 5.5.4 Algoritmos método de Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.5 Algoritmos Punto Medio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.6 Algoritmos Runge Kutta 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.7 Algoritmos Verlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.8 Algoritmos Implícito Aproximado . . . . . . . . . . . . . . . . . . . . . . .. 41 41 43 46 47 49 49 50 51 53 56 59 62 65. 5.6. COMPARACIÓN DE RESULTADOS . . . . . . . . . . . . .. . . . . . . . . .. 67. 5.7. RESTRICCIONES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7.1 Distancia (elongación) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7.2 Colisiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 72 72 74. CONCLUSIONES Y RECOMENDACIONES . . . . . . . . . . . . . . . . . . . . . . . . . . .. 77. REFERENCIAS Y BIBLIOGRAFÍA . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . .. 79.
(5) ANEXO A. Programa en OpenGL para el movimiento de partículas . . . . . . . . .. 82. ANEXO B. Código en Cg para obtener la fuerza . . . . . . . . . . . . . . . . . . . . . . . . . .. 85. ANEXO C. Código en Cg para obtener la fuerza en el método de Verlet . . . . . .. 88. ANEXO D. Tabla de resultados en fps de los diferentes métodos . . . .. . . . . . . .. 90.
(6) 1. LISTA DE FIGURAS. Fig. 1 Ropa texturizada al cuerpo vs Ropa simulada. Fig. 2 Curvas catenarias de la forma y=a cosh(x/a), con valores de 1 y 2 para a. Fig. 3 Malleo en 2D llevado a 3D. Fig. 4 Modelo obtenido por Breen para tela con material (algodón y poliéster). Fig. 5 Modelo obtenido por Baraff para ropa. Fig. 6 Modelo obtenido por Desbrun en un ambiente de Realidad Virtual Fig. 7 Personaje obtenido por Castillo Fig. 8 Modelo de partículas y resortes Fig. 9 Resorte uniendo 2 partículas. Fig. 10 Comportamiento de los tipos de resortes Fig. 11 Componentes tangencial y normal del vector velocidad en un pto de una superficie Fig. 12 Interpretación geométrica método Euler Fig. 13 Interpretación geométrica método Runge Kutta orden 4 Fig. 14 Elasticidad de fibras reales y resortes ideales Fig. 15 Ajuste Provot para partícula fija y una libre y para ambas partículas libres. Fig. 16 Efecto elongación para k=165, k=265 y k=165 con ajuste de Provot. Fig. 17 Ajuste de posición en base a velocidad. Fig. 18 Proceso gráfico convencional. Fig. 19 Proceso gráfico usando programación de “shaders” Fig. 20 Modelo de tela usando “Fragment Shaders” Fig. 21 Código Cg para un efecto de giro Fig. 22 Parte de código en OpenGL para giro Fig. 23 Efecto de giro para los valores de 0, 0.5 y –1.1 Fig. 24 Código Cg movimiento partículas Fig. 25 Mapa normales(izq.) y mapa de posición(der.) para 4 escenas del trabajo de Green Fig. 26 Proceso de la simulación Fig. 27 Interfaz de parametrización Fig. 28 Obtención de la función de mapeo Fig. 29 Mapas de posición, velocidad, fuerza y elongación Fig. 30 Estructuras utilizadas para definir el sistema de partículas Fig. 31 Estructuras utilizadas para los diferentes métodos Fig. 32 Texturas usadas para posición en el tiempo t y t+h. 5 9 9 10 11 11 12 13 13 15 16 17 20 26 27 28 28 31 32 33 36 37 37 38 40 41 42 43 43 44 44 45.
(7) 2 Fig. 33 Fig. 34 Fig. 35 Fig. 36 Fig. 37 Fig. 38 Fig. 39 Fig. 40 Fig. 41 Fig. 42 Fig. 43 Fig. 44 Fig. 45 Fig. 46 Fig. 47 Fig. 48 Fig. 49 Fig. 50 Fig. 51 Fig. 52 Fig. 53 Fig. 54 Fig. 55 Fig. 56 Fig. 57 Fig. 58 Fig. 59 Fig. 60 Fig. 61 Fig. 62 Fig. 63 Fig. 64 Fig. 65 Fig. 66 Fig. 67 Fig. 68 Fig. 69 Fig. 70 Fig. 71 Fig. 72 Fig. 73 Fig. 74 Fig. 75 Fig. 76 Fig. 77. Buffers utilizados para los diferentes métodos Código Cg fuerza elasticidad Código Cg fuerza amortiguamiento interna Parte del Código en Cg para cálculo de fuerzas Obtención de valores de la textura Código Cg para v(t+h) Código Cg para x(t+h) Código Cg para x(t+h) en Verlet Código Cg para copiar el contenido de un buffer a otro Código Cg para v(t+h) implícito aproximado Código Cg para delta velocidad Diagrama para Euler usando software Diagrama para Euler usando hardware Comparación Euler fps .vs. número de partículas Comparación Euler estabilidad Comparación visual Euler elongación, izq (sw) y der(hw) Comparación Euler elongación Pseudocódigo para Punto medio usando software Pseudocódigo para Punto medio usando hardware Comparación Punto Medio fps .vs. número de partículas Comparación Punto Medio estabilidad Comparación Punto Medio elongación Pseudocódigo para Runge Kutta 4 usando software Pseudocódigo para Runge Kutta 4 usando hardware Comparación Runge Kutta 4 fps .vs. número de partículas Comparación Runge Kutta 4 estabilidad Comparación RK4 elongación Pseudocódigo para Verlet usando software Pseudocódigo para Verlet usando hardware Comparación Verlet fps .vs. número de partículas Comparación Verlet estabilidad Máxima elongación obtenida en Verlet, iqz (sw), der. (hw) Estado estacionario Verlet Pseudocódigo para Implícito Aproximado usando software Pseudocódigo para Implícito Aproximado usando hardware Comparación Implícito Aproximado fps .vs. número de partículas Comparación Implícito Aproximado estabilidad Comparación Implícito Aproximado elongación Máxima elongación obtenida con Imp. Aproximado, sw(izq.), hw (der.) Comparación métodos en sw, fps .vs. número de partículas Comparación métodos en hw, fps .vs. número de partículas Comparación estabilidad Caída de tela de izquierda a derecha en Verlet, Implícito Aproximado y RK4 Mapas de velocidad (izq.) y fuerza (der.) antes de una inestabilidad Mapas con diferentes posiciones de la esfera. 46 47 47 48 49 49 50 50 51 51 52 53 53 54 55 55 56 57 57 58 58 58 59 60 61 61 62 62 63 63 63 64 64 65 65 66 66 67 67 68 69 70 70 71 71.
(8) 3 Fig. 78 Fig. 79 Fig. 80 Fig. 81 Fig. 82 Fig. 83 Fig. 84 Fig. 85 Fig. 86. Imagen presentada por Green (izq.), modelo de Green con resortes de sesgo (der.) Código en Cg para restricción de distancia Pseudocódigo para restricción de distancia en sw Función en Cg para respuesta colisión en posición con el piso Partícula colisionando con una esfera. Función en Cg para respuesta colisión en posición con la esfera Función en Cg para respuesta colisión en velocidad Pseudocódigo para restricción de colisiones en sw Resultado de la ejecución del programa movimiento de partículas. 72 73 74 74 74 75 75 76 84.
(9) 4. LISTA DE TABLAS. Tabla 1 Tipos de texturas explotadas en Cg y aplicaciones Tabla 2 Número de resortes y partículas en mallas de MxM Tabla 3 fps obtenidos en los diferentes métodos. 40 69 90.
(10) 5. 1. ANTECEDENTES. El hecho de vivir en un mundo donde los objetos se comportan de acuerdo a las leyes de la física, nos vuelve críticos expertos en cómo deberían lucir esos mismos objetos cuando son dibujados y aún más cuando son animados en una computadora. Los sistemas interactivos que requieren de animación en tiempo real, como ambientes virtuales y videojuegos, han motivado que muchos investigadores hayan desarrollado y propuesto diferentes técnicas para representar el movimiento y la apariencia de objetos flexibles o deformables que son mucho más difíciles de modelar que los objetos rígidos. El problema es, realismo e interactividad son objetivos muy difíciles de alcanzar en un mismo sistema. En particular, la simulación eficiente de tela es uno de los retos importantes de la animación por computadora para ambientes virtuales interactivos. Si se lleva este problema al modelado de ropa, donde el análisis mecánico del comportamiento de ésta sobre el cuerpo humano contiene varios de los problemas más difíciles del análisis de estructuras como son la fricción con el cuerpo y grandes deformaciones no lineales. No es de extrañarse que lo más común sea que los animadores opten por evitar el modelado de ropa creando personajes con vestimenta tipo “traje espacial” que va pegada al cuerpo y por lo tanto no tiene movimiento o bien, simplemente lo ignoran y sólo se usan texturas sobre el personaje, que da la apariencia de estar vestido.. Fig. 1 Ropa texturizada al cuerpo vs Ropa simulada.
(11) 6. 2. OBJETIVOS 2.1 OBJETIVO GENERAL Comparar la implementación de diferentes métodos de integración numérica, para el problema de simulación de tela, tanto en software como en hardware gráfico programable, con la finalidad de proporcionar una guía en la elección de uno de éstos para ser usado en alguna aplicación.. 2.2 OBJETIVOS ESPECÍFICOS •. Explorar los alcances actuales de la programación en hardware gráfico para la solución de métodos de integración numérica usados en la simulación de tela.. •. Implementar tanto en hw (GPU) como en sw (CPU) algunos métodos explícitos (Euler, Punto Medio, RungeKutta 4 y Verlet) y el Implícito Aproximado para someterlos a una serie de experimentos que permitan comparar su estabilidad, rendimiento y realismo.. •. Proporcionar una herramienta útil para hacer estas comparaciones..
(12) 7. 3. PLANTEAMIENTO DEL PROBLEMA La simulación de tela basado en física, puede realizarse usando modelos discretos o continuos, para sistemas interactivos se ha visto que el modelo discreto de partículas y resortes es el más eficiente. Sin embargo, la integración numérica del sistema de fuerzas para obtener la posición de las partículas a lo largo de intervalos regulares de tiempo, así como el manejo de las colisiones son procesos demandantes de poder de cómputo. Por otro lado, la generación en tiempo real1 de imágenes realistas en base a técnicas de iluminación y sombreado, ha motivado el desarrollo de una nueva generación de procesadores gráficos (GPU, “Graphics Processing Unit”), que tienen la capacidad de ser programables. Así en los últimos años el poder computacional del hardware gráfico ha tenido un avance muy importante, a tal grado que ahora un procesador gráfico puede tener más transistores que un CPU, por ejemplo un CPU Intel Pentium 4 a 2.4 GHz tiene 55 millones de transistores por microchip mientras un GPU GeForce FXnVidia tiene 125 millones.2 Por lo tanto, si el uso de GPU está dando resultados en cálculos tan demandantes como son los de iluminación, es razonable estudiar la posibilidad de descargar al CPU de los cálculos relacionados con los métodos de integración numérica en el modelado de tela, para ser ejecutados directo en el hardware gráfico, y así obtener la velocidad necesaria para ser usados en aplicaciones interactivas que requiere de tiempo real. Es por ello que en el presente trabajo se explorarán los posibles alcances de la programación en hardware gráfico para la solución de los métodos de integración numérica usados en la simulación de tela.. 1. Generalmente se consideran 60 o más frames (cuadros) por segundo los necesarios para tener “tiempo real” y así mantener una interacción que parezca instantánea, RANDIMA[24]. 2 Información obtenida de RANDIMA[24]..
(13) 8. 4 ESTADO DEL ARTE. 4.1 TÉCNICAS DE MODELADO DE TELA Los primeros modelos de tela desarrollados a mediados de la década de 1980, tenían que adaptarse a los limitados recursos de poder computacional y dispositivos de despliegue existentes, por lo cual el ajuste geométrico era la única forma de reproducir el comportamiento de las telas en tiempo real. Otros se enfocaron en la reproducción exacta del comportamiento mecánico, ya sea usando sistemas discretos de partículas o sistemas continuos de resolución de elemento finito, los cuales requieren de una gran capacidad de cómputo que limita su aplicación en sistemas interactivos y de tiempo real. De esta manera, encontramos tres categorías en las técnicas de modelado y simulación de tela: • • •. Técnicas Geométricas, Técnicas Físicas Técnicas Híbridas.. Dado que el interés del presente trabajo es el comportamiento físico, por estar enfocado a los métodos de integración numérica usados en este tipo de técnicas, se mencionará de manera breve las técnicas geométricas, se enfatizarán las técnicas físicas, y se hablará un poco de las técnicas híbridas. Técnicas Geométricas. No consideran las propiedades físicas de la tela, los modelos geométricos intentan simular el movimiento de la tela basándose en leyes de comportamiento, siendo su objetivo principal la apariencia, particularmente pliegues y arrugas, que representan mediante ecuaciones geométricas. Tienen la característica de ser rápidos ya que buscan lograr una apariencia realista en general, sin incluir una simulación física compleja. Probablemente, el primer modelo de animación por computadora de ropa fue realizado por Weil[1] quien modeló una prenda rectangular colgada, usando una malla de puntos que seguían.
(14) 9 curvas catenarias de la forma y=a cosh(x/a), donde a es un factor de escala; la limitación es que sólo era útil para modelar telas colgando. f(x)=cosh(x). f(x)=2*cosh(x/2). −π. −4π / 5 −3π / 5 −2π / 5. −π / 5. π /5. 2π / 5. 3π / 5. 4π / 5. π. Fig. 2 Curvas catenarias de la forma y=a cosh(x/a), con valores de 1 y 2 para a.. Ng[2], propone una técnica que asocia una capa de ropa con la forma de una capa de piel, cada una dividida en secciones con el mismo número de vértices, que permitían la adición de pliegues y arrugas usando funciones sinusoidales. Técnicas Físicas. Están dirigidas a crear animaciones exactas en las que puede haber factores como viento y fricción. Representan la tela como una malla cuyas intersecciones forman puntos de masa o partículas. La fuerza o energía en estos puntos se modela por medio de ecuaciones. El primer modelo publicado basado en física fue desarrollado por Feyman[3]. Él simuló algunas de las propiedades de tela, tanto colgada como en reposo sobre un objeto sólido, al observar que cuando se minimizaba la ecuación de energía obtenía un comportamiento apropiado de tela. Su modelo se aplicaba a una malla bidimensional con puntos en el espacio de tres dimensiones. j. y. Pi,j. i. x. z. Fig. 3 Malleo en 2D llevado a 3D.. La ecuación de energía utilizada era:. E(Pi,j) = ksEelasticidad(i,j) + kbEflexión(i,j) + kgEgravedad(i,j). Donde ks, kb y kg representan a las constantes de elasticidad, flexión y gravedad respectivamente, así como Eelasticidad, Eflexión y Egravedad la energía, para cada una de las partículas (Pij)..
(15) 10 Terzopoulus [4][5] junto con su grupo de investigación, parte de mecanismos continuos y geometría diferencial para desarrollar un amplio rango de modelos basados en física para objetos deformables, que han sido utilizados en telas. De una manera muy simplificada se podría decir que su trabajo discretiza la ecuación de movimiento de Lagrange por un método de diferencias finitas o elemento finito que resulta en la solución de un sistema de ecuaciones diferenciales ordinarias. El problema es que el costo computacional es muy alto. Terzopoulus presenta simulaciones de modelos con un comportamiento físico de buena calidad real para objetos como banderas ondeando, objetos colgando y deslizándose sobre otros objetos rígidos, etc.. El modelo de Terzopoulus ha sido implementado y extendido por un equipo de investigación lidereado por Magnenat-Thalmann y Thalmann [6], cuyo principal énfasis ha sido vestir actores sintéticos. Así encontramos el trabajo de Volino[7], que representa la tela mediante un conjunto de triángulos. Después de calcular las fuerzas entre partículas y las fuerzas externa como gravedad y viento, calcula las fuerzas generadas por las colisiones con otros objetos. Presenta un algoritmo de detección de colisiones eficiente que explota la regularidad geométrica de la superficie de la tela y la representa jerárquicamente, así la detección es proporcional al número de polígonos colisionando en lugar del número total de polígonos. Breen[8] parte de funciones de energía sobre una malla de partículas, utiliza propiedades reales de los materiales textiles (basados en las mediciones del sistema Kawabata) para producir imágenes muy realistas de tela con forma rectangular en reposo.. Fig. 4 Modelo obtenido por Breen para tela con material (algodón y poliéster).. Provot[9] se enfoca en mejorar el rendimiento de los métodos explícitos de integración al modificar la posición de las partículas que forman su tela, lo cual también le ayuda a disminuir el efecto de superelongación. Baraff y Witkin[10] formulan un problema no lineal y usan una aproximación lineal para resolverlo mediante un método implícito. Esto permite aumentar el tamaño del paso de la.
(16) 11 simulación sin afectar la estabilidad del sistema. Aunque tiene el problema de tener que resolver un sistema de ecuaciones grande.. Fig. 5 Modelo obtenido por Baraff para ropa.. Desbrum[11] propone una técnica eficiente alternativa a Baraff, al no intentar linearizar todo el sistema, sino dividirlo en una parte lineal y otra no lineal y aproximar la matriz relacionada con la parte lineal del sistema con una matriz de constantes y precalcular la matriz inversa de ésta como un filtro .. Fig. 6 Modelo obtenido por Desbrun en un ambiente de Realidad Virtual.. Entre los desarrollos más recientes y que serán analizados en el presente trabajo encontramos el de Kang[12] quien basándose en el trabajo de Desbrum realiza algunas simplificaciones para evitar resolver el sistema de ecuaciones de los métodos explícitos, logrando un sistema estable y resultados interactivos. También está Eberhardt[13] quien propone un método Implícito-Explícito para modelar tela colgada en reposo, aunque sugiere que se puede usar en simulaciones interactivas, y que no requiere de un postproceso para ajustar posición de partículas..
(17) 12 Técnicas Híbridas. Su idea es aprovechar las ventajas de las técnicas anteriores, al combinar técnicas geométricas y físicas que buscan acelerar las técnicas físicas con una aproximación geométrica. Rudomín[14] aproxima la forma de la tela sobre un objeto, usando la envolvente convexa y después el método de Terzopoulus para obtener la forma final. Pérez Urbiola[15] propone el uso de isosuperficies para vestir personajes implícitos, cuya construcción se basa en el uso de elipsoides que sumados crean un campo escalar y la ropa a base de partículas se ajusta al elipsoide que envuelve. Oshita[16] propone representar a la ropa como una malla de triángulos poco densa y calcular las posiciones sólo de algunas partículas usando simulación dinámica para obtener un comportamiento global de la tela como ondas, después realiza movimientos geométricos para obtener comportamiento locales como arrugas y torsiones. Cordier y Magnenat-Thalmann[17] proponen una técnica para vestir personajes cuya idea fundamental es emplear diferentes métodos, el método elegido dependerá de la parte de la vestimenta a modelar, así utilizan deformaciones geométricas para ropa muy ajustada al cuerpo, curvas catenarias para un animación eficiente de las mangas; y técnicas físicas para prendas con movimiento como faldas. Castillo[18] presenta una simulación de ropa en tiempo real basada en una técnica que utiliza una malla de triángulos que envuelve a un personaje formado por una jerarquía de elipsoides. La tela se modela usando partículas y resortes aplicando fuerzas dinámicas y se ajusta geométricamente en base a los elipsoides. Coincide con Cordier al usar diferentes técnicas dependiendo de la pieza de ropa a modelar.. Fig. 7 Personaje obtenido por Castillo.
(18) 13. 4.2 MODELOS DISCRETOS (PARTÍCULAS Y RESORTES) En los últimos 12 años varios investigadores han propuesto diferentes modelos para representar la ropa, y la mayoría en general coincide en discretizar la tela como una malla de polígonos, donde los vértices de esta malla reciben el nombre de partículas. El modelo elástico de partículas y resortes asume que un objeto está formado por un número finito de nodos o de partículas con cierta masa y resortes (estructurales, de sesgo y flexión) que unen cada par de partículas, como se ilustra en la siguiente figura.. Resortes Estructurales Sesgo Flexión. Fig. 8 Modelo de partículas y resortes. Las fuerzas internas ejercidas por los resortes sobre las partículas se obtienen mediante la Ley de Hooke. F. i. -F. j. Fig. 9 Resorte uniendo 2 partículas.. Cuya representación matemática es: Fe ( i , j ) = k ij ( x i − x j − l ij0 ). ( xi − x j ) xi − x j. Fv ( i , j ) = kd ij ( v j − v i ). Donde Fe representa la fuerza de elasticidad del resorte, kij es la constante de rigidez del resorte, l0ij es la longitud inicial del resorte entre la partícula i y la partícula j, xi es la posición de la partícula i. Fv es la fuerza de amortiguamiento, kd es la constante de amortiguamiento y vi es la velocidad de la partícula i..
(19) 14 Éstas se suman a las fuerzas externas como la gravedad para obtener la fuerza total y así determinar el movimiento de las partículas por la 2ª ley de Newton. F = ma. La cual se puede expresar como una ecuación diferencial de 2do grado.. x' ' =. 1 F m. Es más conveniente manejarlo como un sistema de 2 ecuaciones diferenciales lineales, obteniendo así la siguiente expresión: 1 v' = F m v = x'. ... (1). De esta manera, la animación de la tela es el resultado de la integración numérica de la fuerza para obtener la velocidad y la integración de ésta se utiliza para calcular la nueva posición de las partículas. La fuerza que tiene un objeto, se determina por medio de todos sus componentes, los cuales se pueden clasificar en :. Fexterna. Fgravedad Famortiguamiento Ffluído Fimpulso. FuerzaTotal Felasticidad Finterna. Faxial Fcortante Fflexión. Famortiguamiento. Las fuerzas internas están representadas por los resortes que conectan cada partícula. Así, como se vio en la figura 8, podemos encontrar: •. Resortes Estructurales (structural, stretch), que controlan la elasticidad del resorte, es decir, es la fuerza axial correspondiente a una fuerza de extensión o tracción que suele alargar al resorte..
(20) 15 •. •. Resortes de Sesgo (shear), que controlan el movimiento planar con respecto al ángulo de equilibrio de 90º, conocida como fuerza cortante o cizallamiento. Resortes de Flexión (bend), que previenen de curvaturas excesivas, controlando el movimiento espacial.. En la figura 10 se puede observar estas deformaciones en una tela, la línea punteada es el tamaño original y la continua el efecto final al ejercer sobre la tela una fuerza axial, una cortante y una de flexión.. Estructural. Sesgo. Flexión. Fig. 10 Comportamiento de los tipos de resortes. La fuerza de amortiguamiento interna está representada por la velocidad de cada partícula y sus partículas adyacentes por resortes y ha sido usada en varios modelos para crear de manera artificial una fuerza de disipación en el sistema de partículas Las ecuaciones que representan a las fuerzas externas son: Gravedad, donde m es la masa de la partícula, y g es la aceleración de la gravedad.. Fgravedad = mg Amortiguamiento (damping), se considera para generar un movimiento más realista de la tela. C es la constante de amortiguamiento y debe ser positiva, v es la velocidad de la partícula i.. Famortiguamiento = −Cvi Fluido o viscosidad, se refiere a la interacción con un fluido como es el aire, donde hay dos fuerzas, una de arrastre (drag) y otra de levantamiento (lift). C es una constante de amortiguamiento, vfluido es la velocidad del fluido, vi es la velocidad de la partícula i y n es el vector normal a la partícula i.. F vis = − Cv (( v fluido − v i ) ⋅ n i ). v fluido v fluido.
(21) 16 Impulso o de colisión, es el problema físico de saber qué pasa con el movimiento de los objetos después de colisionarse (es importante distinguirlo de la detección de colisiones que es un problema geométrico referente a dónde y en que momento se efectúa una colisión entre dos cuerpos). Para obtener la respuesta, es necesario separar los vectores de fuerza y velocidad en dos componentes ortogonales, uno normal a la superficie llamada componente normal y otro paralelo a la superficie llamado componente tangencial. Dado un vector de velocidad v y la normal a la superficie N con que se colisiona, tendríamos:. N vt. v n = ( N ⋅ v )v. v. vt = v − v n vn. Fig. 11 Componentes tangencial y normal del vector velocidad en un punto de una superficie. Relacionado con esto se encuentra la fuerza de contacto, una vez que la partícula está en colisión con la superficie y tiene una velocidad normal de cero, se ejerce una fuerza de contacto f c = −( N ⋅ f ) f que cancela la componente normal de la fuerza. Sin embargo, puede ser que las partículas empiecen a moverse con una fuerza de arrastre en la dirección tangencial con magnitud proporcional a la normal de la fuerza, y que se vería afectada por la fricción f fricción = −k f (− f ⋅ N )vt. 4.3 MÉTODOS DE INTEGRACIÓN NUMÉRICA Una parte medular del modelo para tela de partículas y resortes basado en física, es la integración numérica del sistema de fuerzas para obtener la posición de las partículas a lo largo de intervalos regulares de tiempo. El decidir que método usar depende de varios factores como el número de partículas, la exactitud deseada, la estabilidad, etc. Entre las diferentes opciones de métodos de integración numérica, se han usados técnicas explícitas (como Euler, Punto Medio, Runge Kutta, Verlet, etc.) cuyo principal problema es mantener la estabilidad del sistema y no ser muy exactos; y técnicas implícitas (Euler Implícito, Semi-implícitos, Implícitos Aproximados e Implícitos-Explícitos) que requieren la solución de grandes sistemas de ecuaciones o bien de simplificaciones al mismo sistema y por lo tanto, de un mayor poder de cómputo y tiempo..
(22) 17. 4.3.1 MÉTODOS EXPLÍCITOS. Calculan el estado al siguiente intervalo de tiempo a través de una extrapolación directa del estado anterior. Se basan en la serie de Taylor, la cual asume que es posible encontrar el valor de una función x(t) derivable después de un intervalo h, por medio de una suma de sus derivadas al momento inicial, esto se puede expresar como:. x ( t 0 + h ) = x ( t 0 ) + h x ′( t 0 ) +. h2 h3 hn ∂nx + ... x ′′ ( t 0 ) + x ′′′ ( t 0 ) + ... + 2! 3! n! ∂ t n. 4.3.1.1 Método de Euler. Es el método más sencillo para integrar numéricamente una ecuación diferencial. Parte de las condiciones iniciales: posición x(t0)=x0, velocidad v(t0)=v0 y tiempo t0, y se especifica el intervalo de tiempo dt (o tamaño del paso h) para calcular la nueva posición x1 y velocidad v1. Usando los dos primeros términos de la serie de Taylor, tanto para la velocidad como para la posición y sustituyendo los valores en x’ y v’ en (1) tenemos:. F (t o ) m x 1 = x ( t 0 + h ) = x ( t 0 ) + h x ′( t 0 ) = x ( t 0 ) + hv ( t 0 ). v 1 = v ( t 0 + h ) = v ( t 0 ) + h v ′( t 0 ) = v ( t 0 ) + h. La interpretación geométrica de este método, usando la posición, es la siguiente:. x. Valor exacto Valor aproximado hv. x’ = v h. t. x. t. x. t+h. t. t+h. Fig. 12 Interpretación geométrica método Euler. Es claro como entre más grande es h menos exacta es la solución.. = xt + h v t.
(23) 18 Para obtener una mayor estabilidad es posible utilizar, para calcular la nueva posición, v(t0+h) en lugar de v(t0), a esto se llama Euler mejorado, y es el método que se suele emplear aunque de manera genérica se le llame solamente Método de Euler. x 1 = x ( t 0 + h ) = x ( t 0 ) + hv ( t 0 + h ) Suponiendo un sistema de n partículas, las ecuaciones de Euler explícito para obtener xt+h (la posición de una partícula al momento t+h), quedaría de la siguiente manera: v. t +h. x. t +h. t. F = v +h m t = x + h v t +h t. ... (2). en forma matricial tenemos: v x . t +h t +h. v t + h M -1 F t = x t + h v t +h . ... (3). Los vectores F, x, v y la matriz M se describen como: F1 F F = 2 M Fn . x1 x x = 2 M xn . v1 v v = 2 M v n . M −1. 0 0 0 1 / m1 0 1 / m2 0 0 = M M O M 0 0 1 / mn 0. Donde h es el intervalo de tiempo o tamaño del paso, y Fi, xi, vi y mi representan a la fuerza, posición, velocidad y masa de la partícula i. El planteamiento anterior supone que Fi, es constante durante el intervalo de tiempo h, lo cual lleva a que el sistema sea estable únicamente en pequeños intervalos de tiempo. El valor de h se puede determinar mediante la condición de Courant, la cual establece que para tener una solución numérica estable, h debe ser inversamente proporcional a la raíz cuadrada de k. Por lo tanto, si se desea incrementar el tamaño del paso es necesario reducir el valor de la constante de rigidez. Un valor que ha dado resultados aceptables es:. h ≈ π. m k. El error del truncamiento de la serie de Taylor es dominado por el término (h 2 / 2!) x ′′(t 0 ) , en consecuencia se dice que el método de Euler tiene un error de orden O(h2)..
(24) 19 4.3.1.2 Método del Punto Medio. Utiliza dos derivadas por iteración, es decir, trunca la serie de Taylor hasta el tercer término, lo cual nos da una mayor exactitud y reduce el error a O(h3).. x ( t 0 + h ) = x ( t 0 ) + h x ′( t 0 ) +. h2 x ′′ ( t 0 ) + O ( h 3 ) 2!. ... (4). Dado que la x′ es una función f(x(t),t), es necesario derivar parcialmente aplicando la regla de la cadena. Por simplicidad se asume que la derivada de la función f depende del tiempo sólo a través de x, así que x′ =f(x(t)) : ∂f x ′′ ( t ) = x ′ = f ′f ∂x. Para no calcular f ′ , se puede sustituir por su expresión de la serie de Taylor:. f ( x 0 + ∆ x ) = f ( x 0 ) + ∆ x f ′( x 0 ) + O ( ∆ x 2 ) Para incluir a x′′ en la expresión, vamos a tomar el siguiente valor:. ∆x =. h f ( x0 ) 2. Así obtenemos: h h h f ( x0 + f ( x 0 )) = f ( x 0 ) + f ( x 0 ) f ′ ( x 0 ) + O ( h 2 ) = f ( x 0 ) + x ′′ ( t 0 ) + O ( h 2 ) 2 2 2 reordenando y multiplicando por h tenemos:. h2 h x ′′ ( t 0 ) + O ( h 3 ) = h ( f ( x 0 + f ( x 0 )) − f ( x 0 ) 2 2 Sustituyendo en (4) obtenemos la fórmula de actualización:. x (t 0 + h ) = x (t 0 ) + h ( f ( x 0 +. h f ( x 0 ))) 2. Esta fórmula primero realiza un paso de Euler y después obtiene una segunda derivación evaluando a la mitad del paso (h/2, de aquí la razón del nombre del método, punto medio). Es muy común encontrar la fórmula de este método usando la siguiente notación, por ser más clara: k1 = hf ( x0 , t 0 ) x(t 0 + h) = x0 + hf ( x0 +. k1 h , t0 + ) 2 2.
(25) 20 4.3.1.3 Método de Runge-Kutta. El procedimiento anterior se podría repetir para ir obteniendo un error más pequeño, evaluando f más veces y así eliminar derivadas de mayor orden, este método se llama Runge-Kutta ( el método del punto medio es un Runge-Kutta de orden 2). El procedimiento más popular es un Runge-Kutta de orden 4, que deja un error O(h5), y cuya fórmula final es :. k1 = hf ( x0 , t 0 ) k1 h , t0 + ) 2 2 k h k 3 = hf ( x 0 + 2 , t 0 + ) 2 2 k 4 = hf ( x0 + k 3 , t 0 + h) k 2 = hf ( x0 +. 1 1 1 1 x(t 0 + h) = x0 + k1 + k 2 + k 3 + k 4 6 3 3 6 La interpretación geométrica de este método se ve en la siguiente figura: x. k2 k3 k1 xt. xt + h k4. t. t + h/2. t+h. Fig. 13 Interpretación geométrica método Runge Kutta orden 4. 4.3.1.4 Integración de Verlet. Propuesta por Verlet para dinámica molecular, y sugerida por Jakobsen[19], para simulación de tela; técnicamente está basado en dos expansiones de la serie de Taylor, una hacia delante y la otra hacia atrás: h2 x ( t 0 + h ) = x ( t 0 ) + h x ′( t 0 ) + x ′′ ( t 0 ) + ... 2! h2 x ( t 0 − h ) = x ( t 0 ) − h x ′( t 0 ) + x ′′ ( t 0 ) − ... 2!.
(26) 21 En términos de la ecuación de movimiento, estas ecuaciones se pueden rescribir como: x. t+h. x. t −h. h2 F = x +hv + 2 m t 2 h F = x t − h v t+h + 2 m t+h. t. t. Si se suman ambas ecuaciones, obtendremos la fórmula de integración de Verlet: x. t+h. = 2x - x t. t -h. F + h m. t. 2. Así, en este método se ignora la velocidad, en lugar de almacenar la posición x y velocidad v de cada partícula, se almacena la posición actual y la anterior xt-h, por lo tanto la regla de actualización en cada paso está dada por: x. t+h. = 2x t - x. x. t −h. = xt. t -h. + h 2a. Jakobsen, menciona que una de las ventajas del método es su estabilidad ya que al quedar la velocidad de manera implícita, es difícil que la posición y ésta queden fuera de sincronía. Se basa en el hecho de que 2xt – xt-h = xt + (xt - xt-h) donde xt - xt-h es una aproximación de la velocidad actual. Además, indica que se puede introducir una pequeña fuerza de arrastre al sistema si la regla de actualización se cambia por:. x. t+h. = 1.99x t - 0.99 x t -h + h 2 a. Este método no es muy exacto, pero lo compensa la estabilidad.. 4.3.2 MÉTODOS IMPLÍCITOS. Deducen el estado del siguiente intervalo de tiempo en una ecuación que expresa cierta reversibilidad de la solución extrapolada. La integración implícita plantea un sistema de ecuaciones y lo resuelve para obtener una solución donde las derivadas son consistentes al final y al principio del tiempo (paso). En esencia, en lugar de calcular la aceleración al final del paso, calcula la aceleración que al final debería apuntar a la velocidad y posición inicial..
(27) 22 4.3.2.1 Euler Implícito. Dado el problema del tamaño del paso en los métodos explícitos Baraff y Witkin[10] presentaron el siguiente algoritmo, llamado Euler implícito (o “backward” Euler), donde la ecuación de integración es: t +h F t +h t v = v +h …(5) m x t +h = x t + h v t +h La diferencia con Euler explícito es que reemplazan la fuerza al momento t por la fuerza al momento t+h. Dado que esta fuerza se desconoce, y no puede ser calculada en ese paso de tiempo, se sustituye por una aproximación de primer orden:. F. t+h. = F t +. Donde. ∂F ∆x t+h ∂x. ∂F es la matriz Hessiana negada del sistema y ∆xt+h = xt+h – xt = ( vt + ∆vt+h)h ∂x. Plantean el siguiente sistema de ecuaciones, que es equivalente en forma matricial al sistema (1) de la ley de Newton: v d x d x = = −1 dt x& dt v M f ( x, v) . donde x es la posición de la partícula, M-1 es la matriz inversa de las masa de cada una de las partículas en la diagonal, si todas las partículas tienen la misma masa, basta dividir por el valor escalar de m. Si ∆x = x(t0+h) - x(t0) = x - x0 y ∆v = v(t0+h) - v(t0) = v - v0, la ecuación (5) también se puede escribir como: F m x = x 0 + h (∆v + v 0 ) v = v 0 +h. Así, el método explícito de Euler aproxima ∆x y ∆v en forma matricial es: v0 + ∆v ∆x = h −1 M F ( x x , v v ) + ∆ + ∆ ∆v 0 0 . Al igual que en los métodos explícitos se usa la expansión de la serie de Taylor de la ecuación diferencial para aproximarlo a un sistema discreto:.
(28) 23 v0 + ∆v ∆x = h −1 f f ∂ ∂ M f x + ( v ) ∆ + ∆ 0 ∆v ∂x ∂v . A continuación se trabaja con el segundo renglón, dado que una vez calculado éste, el primer renglón se obtiene de manera directa. ∂f ∂f ∆v = hM −1 f 0 + h(v0 + ∆v) + ∆v ∂x ∂v . Combinando ambos términos y sea I la matriz identidad, se obtiene el siguiente sistema: ∂f ∂f −1 ∂f − h 2 M −1 ∆v = hM −1 f 0 + h v0 I − hM ∂v ∂x ∂x . ...( 6 ). Encontrada ∆v , ∆x = v0 + ∆v . ∂f ∂f y que ∂x ∂v forman el sistema de ecuaciones (6), resolverlo para ∆v y actualizar los valores de x y v.. De esta manera, el método de Euler explícito consiste de la evaluación de. f0 ,. Resolver el sistema de ecuaciones es un cálculo muy costoso computacionalmente, éste es el principal problema del método.. 4.3.2.2 Semi-implícito. El hecho de resolver en cada paso un sistema de ecuaciones hace que Desbrun[11] proponga un método semi-implícito o como él lo llama una técnica implícita predictor/corrector, el cual disminuye el costo computacional del método implícito al proponer precalcular el filtro y dividir el sistema, en su parte lineal y no lineal, para trabajarlos separadamente. −lineal F( i , j ) = F(lineal + F(no i, j) i, j). F(lineal = − k ij ( xi − x j ) i, j) − lineal F(no = k ij l ij0 i, j). ( xi − x j ) xi − x j. ... ( 7 ). ... ( 8 ). La parte lineal produce una matriz Hessiana constante de acuerdo a la siguiente función:. H ij = k ij , i ≠ j H = − ∑ j ≠i k ij ii.
(29) 24 La parte no lineal representa resortes que mantienen la misma longitud en el tiempo t que en el t+h, lo cual implica que sólo hay una rotación. Para estimar esta rotación, una vez que las Fuerzas han sido filtradas se calcula la “Fuerza de Torsión” o “Fuerza de Torque” como n. ∂T = ∑ Fi filtrado ∧ xi i =1. Se supone que T es cero, por lo cual se debe corregir la fuerza en cada punto de masa. Fi correc = ( xG − xi ) ∧ ∂T Ri = Fi correc. dt 2 m. El problema es que precalcular el filtro, no permite cambios en el tamaño del paso, en la masa o en el valor de k, sin que implique volver a calcularlo, lo cual también consume tiempo.. 4.3.2.3 Implícito Aproximado. Expuesto por Kang[12], su método propone eliminar la resolución del sistema de ecuaciones en cada paso, e intenta quitar la poca flexibilidad del semi-implícito. Su propuesta se puede resumir en los siguientes pasos: Fs it =. ∑. ∀ j ( i , j )∈ E. k ij ( x j − x i − l ij0 ). Fv it =. ∑. ∀ j ( i , j )∈ E. k ij ( v tj − v it ). ( x j − xi ) x j − xi. Fi t = Fs it + Fv it + Fexternas. Que es el proceso, más general, que ya se ha mencionado para calcular las fuerzas. Para no precalcular la matriz inversa, hace una simplificación en base a las siguientes consideraciones: -. Dado que el cambio de velocidad de la i-ésima partícula sólo es resultado de sus adyacentes por resortes (ni partículas) y suponiendo un valor constante de k, la matriz Hessiana propuesta por Desbrum se puede rescribir como: Hij = k y Hii = - kni .. -. El cálculo de ∆v tj+ h se puede predecir de una manera aproximada en base al paso actual ∆v tj por lo que se tiene: ∆v tj+ h =| ∆v tj |. F jt | F jt |. ..
(30) 25 Obteniendo la siguiente fórmula para ∆vit +h : ∆v. t+h i. =. Fi t h + kh 2 ∑ ∀ j ( i , j )∈ E (| ∆ v tj | / | F jt |) F jt m i + kh 2 n i. La fuerza de amortiguamiento (damping) es incluida en el modelo, aunque Kang menciona que obtiene resultados estables usándola o no, por medio de la siguiente fórmula: vt 1 ∆ vd it =− | Nˆ i ⋅ it | ( v it + ∆ v it + h )(1 − ) 1 + k d | v it | 2 | vi |. Después sólo se actualiza la velocidad y en consecuencia la posición. v it + h = v it + ∆ v it + h + ∆ vd it x it + h = x it + v it + h h. Obteniendo resultados de animaciones con tamaño de paso de 1/60 y 1/30.. 4.3.2.4 Implícito-Explícito. Eberhardt[14] propone usar un método IMEX (Implícito-Explícito), el implícito para ser aplicado en la parte de la ecuación diferencial rígida y el explícito para la otra, y así obtener rapidez y comportamiento adecuado en la tela. En su trabajo comenta que las simplificaciones hechas por Kang son válidas, pero que ya no se relacionan con las solución del ODE (Ecuaciones Diferenciales Ordinarias) original, por lo cual, si se usaran las propiedades de material reales de la tela, duda que se obtendría un comportamiento apropiado. A continuación se presenta un resumen de su trabajo: Los métodos IMEX se derivan de los métodos multipasos, como el de Adams y el BDF (Backward Differentiation Formulas). Si se parte de un problema ODE de la forma:. y ′ ( t ) = f ( t , y ( t )), y ( t 0 ) = y 0. Es posible dividir la ecuación diferencial en 2 partes:. y ′(t ) = f (t , y (t )) + g (t , y (t )). En el caso del modelo de partículas y resortes, g incorpora la parte rígida, Flineal para Desbrum, (ec. 7) y f el resto no rígido Fno-lineal (ec. 8). Donde f puede resolverse de manera explícita sin afectar la estabilidad del sistema, al igual que las fuerzas axial y corte, gravedad y viscosidad. La fuerza de amortiguamiento, que es lineal y rígida, se incorpora a g, obteniendo: F lineal = g = k ij ( xi − x j ) + d ij (vi − v j ).
(31) 26 Para toda partícula i se puede escribir: F lineal ( x, v) = Kx + Dv donde:. − k ij , i ≠ j K ij = ∑ j ≠i k ij , i = j. y. − d ij , i ≠ j Dij = ∑ j ≠i d ij. El método IMEX de primer orden usaría los métodos implícito y explícito de Euler: y. l +1. = y l + h f (y l ) + h g(y l +1 ). Obteniendo un sistema lineal simétrico, que se puede resolver de manera eficiente con un método de gradiente conjugado, y cuya expresión es: 1 1 ( Kx l+1 + Dv l+1 ) = v l + h Fexp li ( x l , v l ) ⇔ m m 1 1 1 1 ( I − h 2 K - h D)v l+1 = v l + h Fexp li ( x l , v l ) − h Kx l m m m m Iv l+1 − h. Presenta resultados de telas colgando, y sugiere que sería útil en aplicaciones de realidad virtual.. 4.4 EFECTO DE SUPER-ELASTICIDAD O SUPERELONGACIÓN Uno de los problemas en la animación de telas al usar modelos explícitos y algunos implícitos aproximados es que la tela presente un efecto de “Super Elasticidad”, es decir, que los resortes aumenten su tamaño de una manera poco natural que le resta realismo a la tela. Dicho comportamiento se debe a que los resortes son “ideales” y tienen una tasa de deformación ilimitada. Esta situación se presenta sobre todo entre partículas que han dejado de moverse y sus adyacentes, ya sea por estar fijas o como resultado de una colisión con otro cuerpo. Tasa deformación Elasticidad resortes ideales. l10%. Elasticidad máxima fibras reales. Fuerza Fig. 14 Elasticidad de fibras reales y resortes ideales.
(32) 27 Una de las formas de evitar esta situación es aumentar el valor de k (la constante de rigidez del resorte), sin embargo, entre más grande es esta constante el método numérico tiende a no converger.. 4.4.1 AJUSTE POR POSICIÓN. Entre las primeras investigaciones realizadas para proponer una solución a este efecto, encontramos la realizada por Provot[9] y consiste en asumir que la posición calculada del resorte es correcta en lo referente a dirección, pero no en la distancia de las partículas que une. También establece que un resorte no puede cambiar su tamaño original en más de un 10%, a este valor lo llama tasa de deformación τ0 , cuando un resorte sobrepasa τ0 mueve las partículas de tal forma que el resorte tenga una tasa de deformación de τ0. Primero verifica si el resorte se encuentra entre una partícula fija y una con movimiento o bien entre 2 partículas en movimiento, en el primer caso, se ajusta la posición de la partícula libre a que el resorte llegue a τ0. Si es el segundo caso cada partícula se mueve en dirección opuesta la mitad de la distancia que hace falta para llegar a τ0. l0 l −l τ0 = 0 < 10% l0. l. l0 τ0. l0. l. l0 τ0. Fig. 15 Ajuste Provot para partícula fija y una libre y para ambas partículas libres.. Después, en las partículas que sufrieron un cambio, hay que realizar un proceso de dinámica inversa, es decir, ajustar las velocidades para que correspondan a las posiciones actuales y el sistema no se vuelva inestable. Este análisis sólo se realiza en los resortes estructurales y en los sesgados, lo cual nos permite aplicar este algoritmo en mallas con resortes sencillos. Provot menciona que esta operación modifica la posición de varios vértices que provocan la elongación de otros, sin embargo, cuando el problema se localiza en sólo un área, este procedimiento ayuda a propagar la elasticidad entre varios resortes de la estructura, en lugar de que esté concentrada. Desbrun [11] propone realizar esta corrección de manera iterativa hasta obtener un valor de tolerancia ( aunque esto puede impactar el rendimiento) o bien un número máximo de iteraciones (lo cual le funcionó adecuadamente) o bien parar cuando se cumpla cualquiera de los anteriores..
(33) 28 Kang[12], en cambio, sugiere aplicar el método de Provot, pero siguiendo un orden. Primero se obtendría la distancia mínima y máxima alcanzada por los resortes y después se ordenarían en base a su longitud utilizando un método de cubetas, el orden dentro de la cubeta no importa, la idea es realizar el ajuste por grupos de resortes de acuerdo a la cubeta donde se encuentran.. Fig. 16 Efecto elongación para k=165, k=265 y k=165 con ajuste de Provot.. 4.4.2 AJUSTE POR VELOCIDAD. Vassilev [20] propone modificar la velocidad, lo cual corrige el problema de Provot de sólo trabajar adecuadamente de manera local. Además, si esta deformación resulta de la colisión con otro cuerpo, el algoritmo trabaja sin importar si el cuerpo está en movimiento o estático. Sean x1 y x2 las posiciones de las partículas unidas por un resorte superelongado y v1 y v2 sus respectivas velocidades. Las velocidades se pueden descomponer en un componente tangencial y uno normal, con respecto al resorte, como se aprecia en la siguiente figura: v1t x1. v1 v1n. x2 v2n. v2t v2. Fig. 17 Ajuste de posición en base a velocidad.. Como se podrá observar, las componentes tangenciales v1t y v2t son las responsables de la elongación, así que la propuesta es dejar ambas velocidades iguales a su promedio. Además, Introduce un vector llamado “vector direccional” el cual se calcula como: vdir = vgrav + vobjeto , donde vgrav = hFgravedad y vobjeto la velocidad del objeto con el cual está colisionando la tela, con la finalidad de que éste indique la dirección en la cual es probable se tenga la mayor deformación. Además de la gravedad y de la velocidad del objeto, al vector direccional también se podrían sumar otras fuerzas externas como el viento..
(34) 29 Sea α el ángulo entre el resorte y el vector direccional, el cos α sería el producto escalar de ambos y se toma la siguiente regla: •. •. Si |cos α| < 0.3, es decir si el resorte (x2-x1) y el vector direccional son casi perpendiculares, entonces : v1t = v2t = 0.5(v1t + v2t ). En caso contrario, si el cos α > 0, entonces v1 = v2, si no v2 = v1.. 4.5 COLISIONES En la simulación interactiva de ropa es de vital importancia evitar que ésta penetre al personaje o a otro elemento de la escena. Como ya se había mencionado, el manejo de la colisión entre objetos, involucra dos problemas: la detección de la colisión, es decir, determinar en que momento se efectúa un contacto entre la tela y otro objeto; y la respuesta a la colisión, es decir, el movimiento que tendrá la tela como consecuencia de las fuerzas resultantes de la colisión. Ambos problemas afectan de manera importante las simulación del movimiento de tela en tiempo real, ya que esto implica agregar al modelo un factor más de inestabilidad en la solución de las ecuaciones diferenciales. 4.5.1 DETECCIÓN. Los elementos geométricos básicos usados para la detección de colisiones son los triángulos (o polígonos), todos los elementos de la escena se podrían triangular y así calcular distancias entre cada posible par de triángulos, pero esto sería totalmente ineficiente. Las soluciones propuestas a este problema, es no probar cada triángulo, usando 2 criterios: • •. Poner estos triángulos en Bounding Volumens, más fáciles de probar. No probar entre triángulos lejanos, de acuerdo a alguna estructura jerárquica o de red.. Los Bounding boxes son objetos geométricos que contienes a un grupo de objetos, primitivas o un solo objeto complejo. La detección de colisiones se hace en dos pasos: Primero se detecta el Volume box y después se verifica dentro de ese volumen. Las estructuras jerárquicas más usadas son la subdivisión de una red en “voxeles” o bien una subdivisión jerárquica en “octrees”. O se puede aplicar una combinación de ambos criterios, por ejemplo, Castillo usa elipsoides en estructuras jerárquicas. Los textiles y otros objetos deformables, tienen un comportamiento muy particular, ya que pueden formas pliegues que permitan la auto-colisión, es decir, que el objeto se intersecte consigo mismo..
(35) 30. 4.5.2 RESPUESTA. La respuesta más simple a una colisión es sólo reposicionar la partícula colisionante, sin embargo eso vuelve inestable el sistema. Una de las soluciones más eficientes es la de Baraf[10]. Si se está usando el método explícito de Euler, una respuesta a la colisión sería modificar la posición fuera del objeto colisionante, y después ajustar la velocidad a la nueva posición, siguiendo un proceso inverso: x. t+h. =x t +hv. t +h. => v t + h = ( x t + h − x t ) / h. Una vez modificada la velocidad con respecto a la posición, es necesario volverla a calcular como resultado de la colisión, aplicando la siguiente fórmula: v(t) = C ⋅ vt (t ) + N ⋅ v n (t) También deben de modificarse la fuerza, considerando, como se mencionó con anterioridad, fuerza de impulso como resultado de la colisión.. 4.6 HARDWARE GRÁFICO PROGRAMABLE. En la actualidad las principales compañías manufactureras de adaptadores gráficos, como nVidia y ATI, están creando una nueva generación de tarjetas gráficas llamadas GPU (Graphic Processing Unit), cuya principal característica es el ser programables, dejando así de soportar únicamente algoritmos fijos. La idea principal por la cual surgen los GPU, es proporcionar a los artistas y programadores de las gráficas computacionales una gran libertad para crear apariencias, y estilos propios a sus aplicaciones, en base a técnicas de iluminación y sombreado (Shaders) que reemplacen las limitaciones que en calidad visual y tiempo les imponían los algoritmos fijos, al momento del dibujado final (render). Además la iluminación es una parte muy importante del proceso gráfico, para obtener escenas que se asemejen a la realidad. Tradicionalmente, las escenas más impresionantes en este aspecto se lograban por medio de un preproceso de cálculos de iluminación estáticos, cuyo resultado se guardaba en una textura (mapa de iluminación); se espera con esta nueva posibilidad de procesamiento, obtener una iluminación dinámica. Hasta hace poco tiempo para poder programar en estas tarjetas se requería del uso de un lenguaje ensamblador de bajo nivel, que implicaba el manejo directo de registros e instrucciones de programación críptica, actualmente existen lenguajes de alto nivel especializados como Cg (C for Graphics) creado por nVidia, HLSL (High Level Shading Language) creado por Microsoft y glslang ( OpenGL Shanding Language) de OpenGL Architecture Review Board..
(36) 31 Los programas en Cg, HLSL y glslang pueden operar sobre vértices y pixeles por medio del uso de “Vertex Shaders” (VS) y “Píxel Shaders” (PS, término usado por Microsoft) o “Fragment Shaders” (FS, término usado por nVidia). Estas interfaces vienen a partir de la versión 8 de DirectX de Microsoft, Cg puede hacer interfaces con OpenGL y Direct X para usarlos. Por su lado, ATI esta desarrollando una interfaz llamada RenderMonkey basada en los mismos conceptos. Una de las diferencias principales de estos lenguajes de programación con respecto a otros como C, C++ y Java, además de ser especializado para gráficas, es el hecho de estar basados en el modelo computacional de flujo de datos, donde los cálculos ocurren en respuesta a los datos que viajan a través de una secuencia de pasos. Además permiten un estilo especializado de procesamiento en paralelo, mientras el CPU ejecuta la parte convencional de la aplicación, esta misma coordina el procesamiento paralelo de vértices y pixeles en el GPU, controlando el dibujado de objetos en cuanto a su forma, apariencia y movimiento. 4.6.1 “VERTEX” Y “PIXEL SHADERS”.. El lenguaje más usado para iluminación y sombreado es “RenderMan”, estándar desarrollado por Pixar a finales de los 80’s para generar animaciones de alta calidad en comerciales y películas. El concepto de “shaders” en la industria de las gráficas computacionales ha sido usado, por ejemplo, por Pixar en películas como “Luxo Jr.”, “Geri’s Game”, “Toy Story”, “A Bug’s Life”, etc.. La idea básica es sencilla, correr un programa para cada pixel en el proceso gráfico (graphics pipeline) para generar el color y posición y así dar terminados a la imagen final. El proceso gráfico convencional procesa una multitud de vértices, primitivas geométricas y fragmentos, llevando en términos generales la siguiente secuencia de funciones:. transformación e iluminación. recorte y ocultamiento. interpolación de texturas. alfa, stencil, profundidad. Fig. 18 Proceso gráfico convencional.. Recordando de manera breve, la transformación de vértices ensambla los vértices en primitivas geométricas, que resultan en una secuencia de triángulos, líneas o puntos, los cuales serán recortados (clipping) en base a la región visible en el espacio de 3D (view frustrum), también se descartará a los polígonos cuya cara no sea visible (culling). Los polígonos que sobreviven a estos procesos (clipping/culling) deben ser trazados (raster), es decir, determinar al conjunto de pixeles, cubiertos por los polígonos, a ser dibujados. Después aplicando funciones matemáticas y de textura se determina el color para cada pixel, para en el último paso consultar a los buffer de profundidad y stencil así como el valor de transparencia (alfa) para determinar si debe o no ser actualizado el valor de ese pixel en el frame buffer..
(37) 32 Todas estas funciones eran fijas, es decir, no se podían modificar, de tal manera que se efectuaban del mismo modo en cada ocasión. Con las tarjetas gráficas actuales, es posible la programación a nivel de vértices en funciones de transformación e iluminación y pixeles en funciones de textura de tal manera que ahora el proceso gráfico se puede ver de la siguiente manera: “vertex program”. recorte y ocultamiento. interpolación. “fragment program”. alfa, stencil, profundidad. Fig. 19 Proceso gráfico usando programación de “shaders”. El tipo de paralelismo que se sigue es de tipo SIMD (Single Instruction Multiple Data), y opera sobre tipos escalares o vector. Por lo tanto un VS opera sólo sobre vértices aplicando la misma función a éstos. Cada vértice tiene una posición y otros atributos como color, color secundario (o especular) uno o múltiples conjuntos de coordenadas de textura y un vector normal. Un VS, entonces, es capaz de ejecutar cálculos de transformación e iluminación que reemplacen a las funciones fijas, lo más importante es que no sólo se limita a estas funciones y se están desarrollando algoritmos que permiten hacer otros cálculos. Un pixel está representado por una posición en el frame buffer con un color, profundidad y otros valores asociados, en la terminología usada por nVidia, un fragmento (de aquí el término de “fragment shader”) es un pixel en potencia, es decir, si el fragmento pasa las diferentes pruebas éste actualiza el valor del pixel en el frame buffer, por lo tanto los programas se efectúan sobre los fragmentos. Aunque las principales aplicaciones de los “shaders” se enfocan a: realizar transformaciones geométricas básicas, animación de piel de personajes en base a un esqueleto (skinning), adecuar modelos de iluminación, realizar mapeos tipo ambiental y especular, generar coordenadas de texturas y transformarlas; realmente uno puede utilizar los buffers de estos “shaders” para guardar cualquier tipo de información. 4.6.2 USO DE HW GRÁFICO EN EL MODELADO DE TELA 4.6.2.1 Detección y respuesta a colisiones. Las primeras aplicaciones del HW gráfico en los problemas de modelado de tela, se han enfocado a la detección y respuesta a colisiones..
(38) 33 Entre los trabajos recientes encontramos el de Knott[21] quien usa el frame buffer para implementar un algoritmo de “ray-casting” que detecta en tiempo real interferencias entre objetos representados por poliedros sólidos. Vassilev[20] utiliza el z-buffer del procesador gráfico para producir mapas de profundidad que ayuden a detectar colisiones e interpolan vectores normales y velocidades que son usados en la respuesta a colisión, de un personaje vestido. Knott[22] en otro trabajo usa un “vertex shader” para detectar colisiones entre partículas individuales con objetos implícitos. El movimiento de las partículas se determina en base a las condiciones iniciales y se crea un mapa de impacto que es una representación bidimensional del lugar de impacto entre la partícula y el objeto.. 4.6.2.2 Modelado de tela. Green[23] presenta una simulación de tela cayendo sobre una esfera usando “fragment shaders”. El método de integración utilizado es el de Verlet (aunque no calcula la fuerza interna) para los cálculos numéricos, y almacena los valores de la posición actual y la posición anterior en texturas RGB de punto flotante. La tela está formada por una malla cuadriculada, sobre cada cuadrado se sigue un proceso de 4 fases: primero se aplica un paso de integración, luego se resuelven las restricciones de distancia entre partículas y colisión con la esfera y el piso; el tercer paso calcula las normales para finalmente hacer el dibujado final de la malla. Nos basaremos en esta implementación para desarrollar el presente trabajo.. Fig. 20 Modelo de tela usando “Fragment Shaders”.
(39) 34. 5. DESARROLLO Y RESULTADOS. El desarrollo del presente trabajo se puede dividir en cuatro partes principales: •. •. •. •. La primera, es conocer los recursos de hardware con que se cuenta, y determinar el software a ser utilizado. La segunda, familiarizarse con la programación en hardware usando Cg y explorar la posibilidad de usar “vertex” y/o “fragment shaders”, para la programación de los métodos numéricos. La tercera es el detalle de la implementación tanto en hw (refiriéndome con esto, a la programación para la ejecución de los cálculos en el GPU) como en sw (que significa, la programación para realizar los cálculos en CPU) de cada uno de los métodos numéricos, así como los resultados obtenidos en sus respectivas pruebas. Por último la presentación de resultados de comparación entre todos los métodos.. 5.1 AMBIENTE DE PRUEBAS Se van a programar los algoritmos usando el siguiente HW y SW: • • • • • • • • •. CPU Intel Xeon a 2.4 GHz. 1 Gb de memoria RAM. Tarjeta nVidia Quadro FX 2000, con memoria de 128MB, y un ancho de banda a ésta de 12.8 GB/seg. Área de dibujo de 560x560 pixeles. Sistema operativo XP Profesional SP1. Los lenguajes de programación a utilizar serán C y C++ usando el Visual Studio 6.0 Se usaran las bibliotecas gráficas de OpenGL por ser un estándar abierto, con GLUT (GL Utility Toolkit ) para manejo de ventanas y de eventos de entrada. Para establecer las variables de la simulación se creará una interfaz usando GLUI, una biblioteca de interfaz basada en GLUT y C++. La tarjeta gráfica será programado usando el lenguaje Cg, por permitir interactuar con OpenGL..
(40) 35. 5.2 INTRODUCCIÓN A LA PROGRAMACIÓN EN CG Es importante conocer algunas de las generalidades de este lenguaje de programación. De inicio, un programa en Cg se parece bastante en sintaxis a C y C++, y como éstos cuenta con: • •. • • • •. Estructuras, arreglos y arreglos multidimensionales. Operadores aritméticos, lógicos, relacionales, de incremento y decremento (++/--), expresión condicional (?:), asignación (= , +=). Instrucciones de control de flujo (do, while, for, if, break, continue) Funciones definidas por el usuario (no recursivas) #include, #define y #ifdef, en concordancia con el preprocesador de C Símbolos para comentarios (//, /*). Entre las características de C o C++, no soportadas por Cg se encuentran: • • •. el uso de apuntadores y reserva de memoria rutinas para proceso de cadenas de caracteres o manejo de entrada y salida a archivos. el uso de uniones, ni manejo de excepciones.. Cg maneja tipos de datos escalares como int y float, pero no son sus tipos fundamentales. Debido a la importancia del manejo de vectores en los procesos gráficos y dado que un GPU lo soporta de manera nativa; Cg en su librería estándar (la cual no requiere ser especificada en alguna instrucción de preproceso como #include) contempla tipos de datos para vectores como float4, float3 y float2, y matrices float4x4, double2x4, etc. La biblioteca estándar de Cg, además incluye una gran cantidad de funciones matemáticas, trigonométricas, vectoriales, matriciales, logarítmicas, de interpolación, derivativas, geométricas y de acceso a texturas. La biblioteca estándar utiliza ampliamente el concepto de sobrecarga de funciones (overloading) similar a C++ para soportar operaciones entre diferentes longitudes de vectores y tipos de datos. Hay que considerar que float4 x no es 100% equivalente a flota x[4], las operaciones matemáticas entre vectores son mas eficientes en arreglos empacados (packed arrays), ya que los GPU típicamente realizan operaciones matemáticas sobre vectores de tres o cuatro componentes, en una sola instrucción, usando los tipos de datos proporcionados por Cg. La declaración de funciones en Cg trabaja como en C y C++, primero se debe especificar el tipo de valor que regresaran ( o void si no hay valor de regreso), luego su nombre y después encerrados entre paréntesis la lista de parámetros separadas por comas. Después de la declaración el cuerpo de la función define los cálculos que deben ser realizados por ésta..
Figure
Documento similar
Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun
Volviendo a la jurisprudencia del Tribunal de Justicia, conviene recor- dar que, con el tiempo, este órgano se vio en la necesidad de determinar si los actos de los Estados
saginata, se considera común en Europa del este (15), con una prevalencia mucho más baja en Europa occidental (del orden de 0.01%) (16).. Las infecciones humanas son endémicas
La heterogeneidad clínica de esta patolo- gía hizo que se considerasen a numerosos genes de pro- teínas de la matriz extracelular (elastina, fibronectina, genes de los colágenos de
Una estrategia para pensar y estudiar (2006), Potenciar la capacidad de aprender y pensar (2007) y Aprendizaje centrado en el alumno (2008). Nuestra preocupación, al trabajar en
D) El equipamiento constitucional para la recepción de las Comisiones Reguladoras: a) La estructura de la administración nacional, b) La su- prema autoridad administrativa
b) El Tribunal Constitucional se encuadra dentro de una organiza- ción jurídico constitucional que asume la supremacía de los dere- chos fundamentales y que reconoce la separación
Con el fin de tener un sistema de referencia con el cual comparar los resultados obtenidos por el sistema, se han comparado los resultados del procesado hardware con el