Técnicas Avanzadas de Gráficos 3D Dinámica de Fluidos Computacional para Gráficos Álvaro Pérez Molero Carlos Garre del Olmo Indice 1 2 3 4 5 Introducción.............................................................................................................. 3 1.1 ¿Qué es la dinámica de fluidos? ....................................................................... 3 1.2 ¿Qué es la dinámica de fluidos computacional?............................................... 4 1.3 Aplicaciones de la CFD.................................................................................... 4 Principios Básicos de la Dinámica de Fluidos.......................................................... 5 2.1 Concepto de Fluido........................................................................................... 5 2.2 Fluidos ideales .................................................................................................. 5 2.3 Hipótesis del medio continuo ........................................................................... 5 2.4 Tipos de fluidos ................................................................................................ 6 2.5 Propiedades de los fluidos ................................................................................ 7 2.6 Estudio del comportamiento de los fluidos ...................................................... 8 Principios de la Simulación de Fluidos .................................................................. 12 Lecturas recomendadas........................................................................................... 15 4.1 Modeling the Motion of a Hot, Turbulent Gas. Foster & Metaxas ................ 15 4.1.1 Introducción............................................................................................ 15 4.1.2 Convección y arrastre ............................................................................. 16 4.1.3 Flotabilidad térmica................................................................................ 16 4.1.4 Resultados............................................................................................... 17 4.2 Stable Fluids. Stam ......................................................................................... 18 4.2.1 Introducción............................................................................................ 18 4.2.2 Ecuaciones básicas de Navier-Stokes..................................................... 19 4.2.3 Método de resolución ............................................................................. 20 4.2.4 Resultados............................................................................................... 22 4.3 Visual Simulation of Smoke. Fedkiw, Stam and Jensen ................................ 23 4.3.1 Introducción............................................................................................ 23 4.3.2 Ecuaciones del fluido.............................................................................. 24 4.3.3 Resultados............................................................................................... 25 4.4 Curl-Noise for Procedural Fluid Flow. Bridson ............................................. 27 4.4.1 Introducción............................................................................................ 27 4.4.2 Rotacional............................................................................................... 27 4.4.3 Ruido de Perlin ....................................................................................... 27 4.4.4 Contorno ................................................................................................. 28 4.4.5 Resultados............................................................................................... 28 Bibliografía............................................................................................................. 29 1 Introducción 1.1 ¿Qué es la dinámica de fluidos? La dinámica de fluidos es una rama de la física relativamente reciente (comienzos del siglo XX), aunque los conceptos en los que se basa se remontan a la antigua Grecia, a los trabajos teóricos de Leonardo Da Vinci, y posteriormente al trabajo de un gran número de físicos como Torricelli, Euler, Bernoulli, etc. Fig. 1 – Dibujos de Leonardo Da Vinci La dinámica de fluidos estudia los movimientos de los fluidos (gases y líquidos), debido a la acción de fuerzas, o a su interacción con otros medios y con el contorno que los delimita. En realidad la dinámica de fluidos forma parte de un campo más amplio denominado mecánica de fluidos, del cual derivan tanto la estática de fluidos (estudia los fluidos en reposo), como la dinámica de fluidos (estudia los fluidos en movimiento). En la actualidad, la mecánica de fluidos es una parte esencial de muchas áreas de la tecnología y la ciencia actual, destacando su papel en el diseño de toda clase de vehículos (aviones, barcos, coches, etc), estudios del flujo de aire atmosférico, medicina y biología (flujo de sangre y otros fluidos), ingeniería industrial, etc, etc. 1.2 ¿Qué es la dinámica de fluidos computacional? En la actualidad en muchos campos es imposible recurrir a soluciones analíticas debido a la tremenda complejidad de los sistemas que estudia la dinámica de fluidos, por lo que se recurre a soluciones numéricas que pueden ser computadas por ordenadores. Surge así una rama de la dinámica de fluidos denominada dinámica de fluidos computacional, o CFD, que se basa en aproximaciones numéricas de las ecuaciones físicas empleadas en la dinámica de fluidos. 1.3 Aplicaciones de la CFD Aparte de las numerosas aplicaciones ya mencionadas, conviene destacar los dos enfoques utilizados concretamente en la dinámica de fluidos computacional, y que dan lugar al desarrollo de técnicas muy diferentes en función de los objetivos buscados. Estos dos enfoques de los que hablamos se podrían denominar: gráficos y simulación. La CFD aplicada a gráficos Es muy interesante modelar fluidos de aspecto realista en multitud de aplicaciones, destacando los juegos de ordenador, el cine, o incluso la creación de texturas y efectos visuales para programas de dibujo y retoque fotográfico. En estas aplicaciones se busca un modelo que estéticamente dé buenos resultados, no siendo necesario que el comportamiento del modelo se ajuste exactamente al comportamiento de un fluido real. Si bien en el cine no es un requisito, en el caso de los juegos sí que es necesario el tiempo real, por lo que estas técnicas, además de plausibles, muchas veces tienen que ser rápidas y eficientes. La CFD aplicada a simulación A veces no nos basta con un modelo que “parezca” comportarse como un fluido, sino que necesitamos conocer de forma muy exacta cómo se comporta un fluido realmente. Los modelos de CFD que se utilicen en cualquier campo de la ingeniería deben ser muy estrictos con la precisión del modelo, procurando que éste se asemeje lo máximo posible al comportamiento real del fluido. Siempre que se habla de métodos numéricos, como los utilizados en CFD, estamos hablando de aproximación, por lo que muchas veces será imposible garantizar que el modelo es exacto, y todos los esfuerzos se deben centrar en acotar el error y hacer los modelos tan precisos como sea posible. Esto da lugar a que estas técnicas generalmente no sean en tiempo real, ya que tampoco es un objetivo importante en esta clase de aplicaciones 2 Principios Básicos de la Dinámica de Fluidos 2.1 Concepto de Fluido Para determinar si un cuerpo es o no un fluido no debemos fijarnos en su composición, sino más bien en su comportamiento. Un fluido es un cuerpo que carece de elasticidad de forma, es decir, que no tiene forma propia y por tanto se adapta a la forma del recipiente que lo contiene. Además, un fluido se deforma de forma continua ante la aplicación de un esfuerzo cortante (a diferencia de los sólidos, no tienen ninguna resistencia a este tipo de fuerzas). Comparándolos con los sólidos, podemos decir que las moléculas de los sólidos están fuertemente unidas entre sí, mientras que en los líquidos pueden moverse libremente y separarse sin ofrecer apenas resistencia. Un sólido, ante la aplicación de una fuerza cortante, no se deforma de manera continua, sino mediante una deformación o desplazamiento definido. 2.2 Fluidos ideales Estudiar de forma precisa todas las variables que intervienen en un fluido real puede ser extremadamente complejo. Por este motivo, es necesario partir de una serie de hipótesis y simplificaciones que hacen posible el estudio de estos sistemas, obviando los factores menos importantes o prácticamente inapreciables. Por tanto, muchas veces no se estudian los fluidos reales, sino los llamados fluidos ideales. Estos básicamente se diferencian de los fluidos reales en que se desprecia el efecto de las fuerzas viscosas. En otras palabras, en los fluidos ideales se considera que no existe fricción interna entre las partículas del fluido. 2.3 Hipótesis del medio continuo Además de considerar los fluidos ideales, uno de los cimientos de la dinámica de fluidos es la hipótesis del medio continuo, que consiste en asumir que el fluido es continuo a lo largo de todo el volumen que ocupa. Esto simplifica mucho el problema, ya que se puede asumir que todas las magnitudes del fluido que queremos estudiar van a regirse siempre por funciones continuas. Esta hipótesis, al igual que la de los fluidos ideales, no siempre es aplicable, dependiendo en este caso de una magnitud medible denominada número de Knudsen. Cuando esta hipótesis no es aplicable, es necesario recurrir a la mecánica estadística en lugar de a la mecánica de fluidos. 2.4 Tipos de fluidos Existen muchas formas de clasificar los fluidos, de las cuales mencionamos las más importantes. Gases - Líquidos Existen dos tipos fundamentales de fluidos, que son los líquidos y los gases. Los líquidos se caracterizan por poseer fuerzas de cohesión entre sus moléculas, que provocan una fuerte tendencia a que el fluido mantenga su volumen constante. Por el contrario, los gases apenas poseen fuerzas de cohesión, por lo que se pueden expandir tratando de ocupar el máximo volumen. Fig. 2 – Gracias a las fuerzas de cohesión, podemos leer este mensaje. Compresibles – No Compresibles Todos los fluidos son compresibles en mayor o menor medida, por lo que en realidad cuando hablamos de fluidos no compresibles nos referimos a fluidos en los que esta propiedad es despreciable. Un fluido es más compresible cuanto mayor es el cambio que sufre en su densidad al aplicarle una presión externa. Por tanto, los gases son fluidos muy compresibles, mientras que los líquidos en general se suelen considerar no compresibles. Newtonianos – No newtonianos Un fluido newtoniano es aquel en el que su viscosidad no varía en función de la tensión que se le aplica. Por tanto, su viscosidad es un valor constante. En los fluidos no newtonianos, la viscosidad no es constante, por lo que podríamos decir que en cierto modo se comportan como sólidos cuando se les aplica una presión, y como líquidos cuanto menor es la presión (o bien al contrario, como ocurre con los fluidos no newtonianos tixotrópicos). 2.5 Propiedades de los fluidos Aunque algunas ya se han mencionado, enumeramos aquí las principales propiedades de los fluidos. Viscosidad La viscosidad es la oposición de un fluido a las deformaciones tangenciales. Si consideramos que el fluido está constituido por una serie de capas, la viscosidad representaría el rozamiento entre las diferentes capas cuando se les aplica una fuerza. Los gases presentan muy poca viscosidad, mientras que los sólidos representan el caso contrario de máxima viscosidad. Convección La convección tiene una importancia fundamental en la meteorología de nuestro planeta, ya que es el fenómeno por el cual se mueven las capas de aire que tienen diferentes temperaturas. El aire caliente es menos denso que el frío, por lo que tiende a ascender. Este movimiento provoca una transferencia de calor hacia las capas altas de la atmósfera, que es en sí lo que llamamos convección. Advección La advección es el fenómeno de transporte de una magnitud escalar cualquiera a lo largo de un fluido. Esta magnitud podría ser por ejemplo el calor, por lo que es en realidad un término más general que el de la convección. Difusión Se llama difusión a cualquier proceso físico por el cual se transfieren partículas de un medio a otro. El ejemplo más típico de difusión es la ósmosis. Flujo laminar Existen básicamente dos formas en las que se puede mover un fluido: siguiendo un flujo laminar, o un flujo turbulento. El flujo laminar es el más ordenado, ya que el fluido se mueve únicamente en el sentido de la corriente. Un fluido que sigue un flujo laminar es relativamente fácil de estudiar. Para determinar cuándo un fluido seguirá un flujo laminar o un flujo turbulento, se utiliza el número de Reynolds, que es una magnitud adimensional que relaciona los términos convectivos y viscosos de las ecuaciones de Navier-Stokes (que veremos más adelante). Flujo turbulento Un fluido que sigue un flujo turbulento es en la actualidad imposible de estudiar de forma precisa, por lo que su comportamiento es aparentemente caótico. Los flujos turbulentos se caracterizan por la aparición de remolinos. Fig. 3 – El humo del cigarrillo empieza a ascender siguiendo un flujo laminar, pero al cabo de un tiempo el flujo se convierte en turbulento. 2.6 Estudio del comportamiento de los fluidos El estudio de los fluidos consiste en conocer las velocidades, presiones y fuerzas internas de las partículas que forman el fluido, en función de las fuerzas externas que se aplican sobre el fluido, y del contacto con otros medios (por ejemplo, el recipiente que contiene el fluido). Cuando hablamos de contacto con otros medios, destaca la interacción entre el fluido y un sólido, teniendo en cuenta que el sólido se puede encontrar estático o en movimiento, y que además, en el caso más complejo, el sólido podría ser deformable. Este último caso podría dar lugar a una variación del volumen disponible para el fluido, lo cual en algunos casos (como en los gases) podría obligarnos a tener que estudiar también las variaciones de densidad del fluido. En cualquier caso, el estudio de la dinámica del fluido puede hacerse bien de forma analítica o de forma numérica, siendo este último caso el que nos interesa desde el punto de vista de la informática gráfica. ¿Enfoque Lagrangiano o Euleriano? Si queremos conocer los movimientos de las partículas del fluido podemos abordar el problema desde dos enfoques totalmente diferentes. La primera idea sería estudiar el movimiento de cada partícula en concreto, siguiendo su recorrido según se desplaza por el fluido. Este sería el enfoque lagrangiano. La segunda idea sería fijarnos en un punto concreto del espacio que abarca el fluido, y estudiar los movimientos que se producen debido a las partículas que atraviesan ese punto fijo. Este sería el enfoque euleriano. Fig. 4 – En el enfoque Lagrangiano (izquierda) los componentes de nuestra discretización son las propias partículas del fluido. En el enfoque Euleriano (derecha) discretizamos el volumen que ocupa el fluido, y cada punto por el que pasen las partículas será un elemento discreto. Hay un símil que ayuda a aclarar estos conceptos, imaginando que en lugar de estudiar las partículas de un fluido estuvieramos estudiando una multitud de personas. En este símil, el enfoque lagrangiano consistiría en escoger a un individuo concreto y seguir todos sus pasos según camina por la calle. En cambio, el enfoque euleriano consistiría en fijarnos en un punto concreto de la calle, como la puerta de un bar, y estudiar a cada persona que entra y sale del bar. En cualquier caso, ambos enfoques se basan en una discretización (ya sea del espacio, o de la propia materia del fluido), y el estudio debe realizarse sobre cada uno de los elementos obtenidos en la discretización. Ecuaciones de Navier-Stokes Las ecuaciones de Navier-Stokes son un conjunto de ecuaciones que definen el comportamiento dinámico de un fluido. Derivan de aplicar los principios de conservación de la mecánica y de la termodinámica al fluido, de donde se obtiene una formulación integral que generalmente se suele transformar en una formulación diferencial más práctica. Existen diferentes formulaciones para estas ecuaciones, en función del problema que se desea resolver. A modo de ejemplo, mostramos la ecuación de movimiento de un fluido incompresible y con densidad uniforme: En el lado izquierdo de la ecuación tenemos el movimiento (variación del desplazamiento en el tiempo), y en el derecho los siguientes términos: • F: Fuerzas aplicadas al fluido. • p: presión en el fluido. • ρ: densidad del fluido. • v: viscosidad del fluido. • u: desplazamiento Es importante recordar el significado del operador Nabla: Y del operador Laplaciano: En este caso, el operador Nabla se utiliza para el cálculo del gradiente de presión, lo cual no se debe confundir con la divergencia (si hubiera un símbolo de producto escalar entre el operador y la presión), o con el rotacional (si hubiera un símbolo de producto vectorial entre el operador y la presión). Ecuaciones de Euler A pesar de que estas ecuaciones son un caso específico de las ecuaciones de NavierStokes, en realidad fueron enunciadas con anterioridad. De hecho, Claude-Lous Navier partió de las ecuaciones de Euler para obtener una generalización de las mismas que, posteriormente justificó George Stokes para dar lugar a las llamadas ecuaciones de Navier-Stokes. Las ecuaciones de Euler definen el movimiento de un fluido en el caso especial de fluidos compresibles y no viscosos. Principio de Bernoulli Este teorema es de gran importancia en el estudio de la dinámica de fluidos, ya que nos proporciona una relación entre la presión y la velocidad dentro del fluido. Estrictamente hablando, este principio sólo se cumple en fluidos ideales (no compresibles), pero en la práctica se aplica en el diseño de superficies aerodinámicas (alas, hélices, etc). Sin entrar en fórmulas, la idea básica del teorema de Bernoulli es que la presión en un fluido con flujo uniforme, disminuye cuando aumenta la velocidad. Esto es consecuencia de que la energía total del fluido permanece constante. Fig. 5 – Gracias al principio de Bernoulli, el efecto del viento sobre la vela produce una diferencia de presión que “absorbe” al windsurfista hacia la zona de baja presión a gran velocidad. 3 Principios de la Simulación de Fluidos Existen diferentes alternativas a la hora de simular un fluido. La opción que escojamos dependerá de los requisitos de nuestra aplicación, teniendo que decidir en primer lugar si queremos enfocar nuestra simulación a una aplicación gráfica (juegos, cine), o a una simulación física (ingeniería, predicción de catástrofes). Cuando nos basta con que nuestra simulación “parezca” un fluido (en una aplicación orientada a gráficos), muchas veces es preferible olvidarnos de la compleja formulación de la dinámica de fluidos, y recurrir a técnicas procedurales más sencillas, más eficientes, y que permiten un mayor control de la simulación. Esto último es importante, ya que hay que tener en cuenta que en una simulación únicamente gobernada por leyes físicas, es difícil predecir y controlar el resultado de la simulación. A pesar de estos inconvenientes, la simulación física es en muchos casos la única alternativa, por lo que en este punto nos vamos a centrar únicamente en explicar los principios básicos de la simulación física. Objetivos de la simulación física Los métodos de simulación física nos proporcionan una herramienta para poder implementar en un computador simulaciones de fenómenos físicos regidos por ecuaciones bien conocidas. En el fondo, estos métodos no son más que técnicas para implementar en un programa de ordenador un sistema de ecuaciones diferenciales, que son las más habituales en la física. Nos permiten obtener aproximaciones numéricas en lugar de tener que desarrollar soluciones analíticas y, lo que también es muy importante, nos permiten integrar esta solución en el tiempo, pudiendo obtener una secuencia temporal del estado de las variables que rigen el sistema. En el caso concreto de la simulación física de fluidos, normalmente trataremos de implementar las ecuaciones de Navier-Stokes y, por tanto, nuestro objetivo será determinar las velocidades y presiones del fluido y su variación a lo largo del tiempo. Características deseables en una simulación física No todos los métodos son igual de válidos, y habrá que escoger en cada caso el que más se adecue a los requisitos de nuestro sistema. En general, estos son los factores que debemos tener en cuenta: Eficiencia: en muchos casos nos interesa que el método sea lo más rápido posible, para poder generar animaciones en tiempo real (por ejemplo, para un juego). La eficiencia está reñida con otros factores, como la precisión y la estabilidad. Estabilidad: no todos los métodos pueden garantizar la estabilidad de la simulación. Cuando una simulación se vuelve inestable, el resultado de la simulación diverge, perdiendo por completo el sentido de la simulación, al alejarse totalmente de los resultados esperados. Un sistema inestable provocará efectos impredecibles, como objetos que estallan súbitamente, o que adquieren unas dimensiones absurdas. Precisión: los métodos numéricos implican siempre aproximaciones, por lo que en la mayoría de los casos no podemos asegurar que nuestra solución sea exacta. La desviación entre los valores que se desean obtener y los que se obtienen realmente se denomina disipación numérica, y en muchas aplicaciones es un objetivo prioritario minimizarla en la medida de lo posible. Control: si dejas a una simulación física “correr” sin más, es difícil predecir su comportamiento. Hay aplicaciones en las que nos puede interesar dirigir de alguna manera la simulación para producir un efecto visual concreto. En estos casos, es posible que tengamos que introducir otros factores que complementen la simulación física para aumentar el control del usuario. Métodos de integración Los métodos de integración son herramientas que utilizamos para obtener la secuencia temporal de las magnitudes que queremos calcular para nuestra simulación. En general, son métodos que a partir del último valor calculado nos permiten obtener un nuevo valor, generando así una progresión en el tiempo. Existen multitud de métodos, de los cuales nombramos muy brevemente los más importantes. Euler explícito: Es posiblemente el método más intuitivo, y del cual en cierto modo derivan los demás, pero no es ni mucho menos el más adecuado para la mayoría de aplicaciones. Se basa en el desarrollo de Taylor hasta cierto grado (normalmente lineal, o cuadrático a lo sumo). Por tanto, el nuevo valor que queremos obtener f(t+∆t) se calculará en función de f(t) y de su derivada f´(t): f(t+∆t) = f(t) + f´(t) ∆t Existe una variante de este método denominada leapfrog que mejora la estabilidad con sólo cambiar de orden la secuencia de cálculos que realiza internamente el método. Euler implícito: El método anterior requiere que ∆t sea muy pequeño para evitar que los valores diverjan, lo que tiene como consecuencia que el método sea muy lento y propenso a ser inestable. Es fácil solucionar este problema utilizando la derivada del instante siguiente en lugar de la del instante anterior: f(t+∆t) = f(t) + f´(t+∆t) ∆t Pero esta nueva formulación aparentemente sencilla, introduce una complejidad considerablemente mayor, ya que al final lo que obtenemos es un sistema de ecuaciones que puede ser no lineal, y que por tanto requiere aplicar métodos numéricos de resolución de sistemas no lineales que son costosos y complejos (por ejemplo, el método de Newton-Rhapson). Runge-Kutta: Los métodos de Runge-Kutta utilizan varias muestras de la función, obteniéndose diferentes variantes según el número de muestras que se utilice. El método de Runge-Kutta 4 ofrece un buen compromiso entre estabilidad, eficiencia, y disipación numérica. Métodos de discretización Un computador no puede trabajar con funciones continuas, por lo que siempre será necesario algún método para discretizar el dominio sobre el que queremos trabajar. Entre los métodos de discretización más habituales destacan el método de elementos finitos, y el método de diferencias finitas. 4 Lecturas recomendadas 4.1 Modeling the Motion of a Hot, Turbulent Gas. Foster & Metaxas 4.1.1 Introducción El movimiento turbulento del humo o del vapor ha sido siempre un desafío para los investigadores en gráficos. El problema consiste en modelar el comportamiento rotacional de un gas, que se plantea como la mezcla de gases a distintas temperaturas y su interacción con otros objetos. El modelo desarrollado, basado en física, ha sido diseñado especialmente para animar de manera relista el complejo componente rotacional del movimiento de un gas, así como los efectos debidos a regiones con distinta temperatura dentro del gas, y la interacción de los gases con otros objetos. Modela el movimiento turbulento rotacional que ocurre cuando un gas caliente interactúa con objetos sólidos y con el medio que los rodea. Por tanto, el modelo es útil para escenas que incluyen remolinos de vapor, humo que forma ondas y ráfagas de viento, así como movimiento de gas debido a un ventilador o a la convección térmica. El método utilizado combina eficiencia computacional junto con facilidad de uso para el animador. Para ello, han propuesto unas formas especializadas de las fórmulas del movimiento de un gas caliente, junto con un método eficiente para resolver ecuaciones diferenciales en tres dimensiones. La mejor forma de obtener realismo sería modelar los efectos debidos movimiento de un líquido o un gas teniendo en cuenta las leyes físicas, pero los métodos necesarios para ello son computacionalmente ineficientes, además de ser métodos adaptados a mecánica de fluidos computacional, más que a gráficos por ordenador. El modelo tiene en cuenta convección, turbulencia, vorticidad y flotabilidad térmica, y es capaz de modelar con precisión las fluctuaciones de un gas alrededor de objetos complejos. Para comprender el movimiento de un gas caliente, hay que comprender los factores implicados en él: - Un factor clave es el campo velocidad, ya que un gas caliente se mezcla con el aire más lento en movimiento, se produce un arrastre del vapor y empieza a rotar en algunas partes del mismo, lo que causa que se mezcle más con el aire, provocando así las turbulencias o remolinos que se pueden observar cuando dos gases se mezclan - Otro factor importante es la temperatura, ya que las partes más calientes de un gas suben más rápidamente que las regiones mezcladas con el aire frío. Como el gas sube, se producen todavía más rotaciones turbulentas. Este efecto se conoce como flotabilidad térmica (thermal buoyancy) Un volumen de gas se representa como una combinación de: - Un campo escalar de temperatura - Un campo escalar de presión - Un campo vectorial de velocidad Un problema importante es que el modelo usa un esquema de integración explícita, por lo que las simulaciones son estables sólo si el paso de integración es suficientemente pequeño. De lo contrario, el método se vuelve inestable. Escoger un paso de integración pequeño hace que las simulaciones sean relativamente lentas, especialmente cuando el fluido se desplaza a gran velocidad en cualquier parte del dominio. 4.1.2 Convección y arrastre La forma reducida de las ecuaciones de Navier-Stokes que se ha utilizado es: ∂u = ν∇ ⋅ (∇u ) − (u ⋅ ∇)u − ∇p ∂t donde: • ∇ es el operador gradiente • ū es la velocidad del gas • ⋅ es el operador producto escalar • p es la presión del gas • ν es la viscosidad cinemática Esta ecuación modela cómo la velocidad de un gas cambia en el tiempo dependiendo de los siguientes términos: • • • la convección ((ū ⋅∇) ū) el gradiente de la presión (∇p) el arrastre (ν∇⋅ (∇ ū)) En definitiva, esta ecuación modela la velocidad rotacional y de convección en el gas. 4.1.3 Flotabilidad térmica Las fuerzas debidas a la flotabilidad térmica también inducen movimiento en un gas. Si un elemento gaseoso caliente está rodeado por elementos más fríos, entonces el gas tiene a subir. Para modelar este efecto, se ha definido la fuerza de flotabilidad en un gas: Fbv = − β g v (T0 − Tk ) donde: • gv es la fuerza de la gravedad en la dirección vertical • β es el coeficiente de expansión térmica • T0 es una referencia inicial de temperatura, por ejemplo, 28 ºC • Tk es la temperatura media en la frontera entre una célula gaseosa y la célula superior, la que está justo encima de ésta Por tanto, se añade este nuevo término, resultando la siguiente ecuación: ∂u = ν∇ ⋅ (∇u ) − (u ⋅ ∇)u − ∇p + Fbv ∂t 4.1.4 Resultados A continuación, se presentan dos ejemplos de funcionamiento del método. En el primero de ellos, se simula vapor procedente de tres boquillas que se junta en el centro de la escena y sube hacia arriba, como se puede observar en la secuencia de imágenes: Fig. 6 – Vapor procedente de las tres boquillas, que converge causando verticidad y turbulencia En el segundo ejemplo, se simula la salida de humo de una chimenea y cómo se propaga por el aire, teniendo en cuenta ráfagas de viento en el exterior: Fig. 7 – Humo turbulento saliendo de una chimenea hacia la luz, con ráfagas de viento 4.2 Stable Fluids. Stam 4.2.1 Introducción Para ayudarse a construir modelos para simular el flujo de fluidos a menudo se utilizan modelos basados en física. Estos modelos físicos permiten al animador crear, casi sin esfuerzo, interesantes comportamientos como remolinos dentro de los fluidos. Además, la interacción del flujo con los objetos y con fuerzas virtuales se maneja elegantemente. Tradicionalmente, los modelos físicos eran demasiado costosos como para implementar aplicaciones en tiempo real basadas en dichos modelos. Esto era debido al hecho de que los modelos tradicionales usaban esquemas inestables para resolver las ecuaciones físicas que controlan el fluido. Para modelar el comportamiento de fluidos, como humo, agua o fuego, se usan técnicas de mecánica de fluidos como marco de trabajo matemático en el que se basan las correspondientes simulaciones. Existe un consenso entre los científicos basado en que las ecuaciones de Navier-Stokes son un buen modelo para representar el flujo de los fluidos. En el campo de gráficos por ordenador, a diferencia del campo de mecánica de fluidos, es de vital importancia el aspecto visual del fluido, mientras que la precisión física pasa a un segundo plano, llegando a ser en algunos casos irrelevante. El modelo propuesto es, por primera vez, un modelo estable incondicionalmente que es capaz de producir flujos complejos que simulan fluidos. Este modelo es fácil de implementar y su estabilidad permite escoger pasos de tiempo grandes, a diferencia de los modelos de integración explícita, con lo que se consiguen simulaciones más rápidas. Además, permite interactuar en tiempo real con fluidos en tres dimensiones. Para llegar a conseguir esta interacción, se han usado pasos de integración grandes. Se parte del método de solución de Foster y Metazas pero, en lugar de usar su integrador Euleriano explícito, se usan métodos implícitos y lagrangianos para resolver las ecuaciones de Navier-Stokes. Este método ha sido realizado especialmente para aplicaciones de gráficos por ordenador, no siendo válido para aplicaciones de ingeniería, puesto que no es suficientemente preciso para ello. Puesto que usa un integrador de primer orden, las simulaciones sufren demasiado la disipación numérica. Aún así, se pueden realizar bonitos flujos de remolinos, a pesar de la disipación. En una aplicación de gráficos por ordenador proporciona buenos resultados, especialmente cuando el animador mantiene el flujo “vivo”, aplicando fuerzas externas. Se emplea el método para actualizar tanto el flujo como el movimiento de las densidades dentro de éste. Se incrementa la complejidad de las animaciones usando coordenadas de texturas a lo largo del flujo, junto con la densidad, con el objetivo de sintetizar flujos de gases altamente detallados usando rejillas de baja resolución. 4.2.2 Ecuaciones básicas de Navier-Stokes Un fluido cuya densidad y temperatura es más o menos constante se puede describir mediante un campo de velocidad (ū) y un campo de presión (p). Dado que la velocidad y la presión son conocidas en un tiempo inicial t = 0, su evolución durante el tiempo viene expresada por las siguientes ecuaciones de Navier-Stokes: ∇ ⋅u = 0 ∂u 1 = −(u ⋅ ∇)u − ∇p + ν∇ 2 u + f ρ ∂t donde: • ∇ es el operador gradiente • ū=(u,v,w) es la velocidad del humo • ⋅ es el operador producto escalar • (∇⋅ū) es la divergencia de la velocidad que, al hacerla igual a cero, quiere decir que no es divergente, es decir, que converge • ∇2 es el operador laplaciano (el cuadrado del gradiente) • p es la presión del humo • f son las fuerzas externas • ρ es la densidad del fluido • ν es la viscosidad cinemática Al igual que ocurre en el método de Foster y Metazas, esta ecuación modela cómo la velocidad de un gas cambia en el tiempo dependiendo de los siguientes términos: • • • la convección ((ū ⋅∇) ū) el gradiente de la presión (∇p) el arrastre (ν∇⋅ (∇ ū)), donde: ν∇⋅ (∇ ū) = ν∇2ū Estas ecuaciones de Navier-Stokes se han obtenido imponiendo el principio de conservación de la masa (primera ecuación) y del momento (segunda ecuación). Estas ecuaciones se tienen que complementar con condiciones de contorno. Se han tenido en cuenta dos tipos de condiciones de contorno: condiciones de contorno periódicas y condiciones de contorno fijas. En el caso de condiciones de contorno periódicas, el fluido se define contenido en un toro n-dimensional, en el que fluye en su interior. En el caso de condiciones de contorno fijas, se considera que el fluido permanece en un dominio acotado D. En general, las condiciones de contorno deben ser aquellas en las que la componente normal de velocidad del fluido sea cero en el contorno o frontera y que, en ningún caso, se atraviesen las “paredes” del contorno. Utilizando el resultado matemático, conocido como descomposición de HelmholtzHodge, que dice que cualquier campo vectorial se puede descomponer en la forma: w = u + ∇q siendo q un campo escalar. Cualquier campo vectorial es la suma del campo de conservación de la masa y el campo gradiente, por lo que se define el operador P, que proyecta el campo vectorial w en su componente con divergencia cero: ∇w = ∇ ⋅ u + ∇ ⋅ (∇q ) = ∇ 2 q Una solución de esta ecuación se usa para calcular la proyección ū: u = P w = w − ∇q Aplicando este operador a ambos lados de la ecuación, se obtiene la ecuación de la velocidad usada en este modelo: ∂u = P (−(u ⋅ ∇)u + ν∇ 2 u + f ) ∂t Usando el hecho de que Pū = ū, y que P∇p = 0. 4.2.3 Método de resolución La ecuación anterior se resuelve a partir de un estado inicial ū0 = ū(x,0) a través del tiempo, usando un paso de tiempo ∆t. Suponiendo que tenemos el valor del campo velocidad en el instante t y queremos obtener su valor en el siguiente instante de tiempo, es decir, t + ∆t, se resuelve la ecuación anterior en cuatro pasos: añadir fuerza difusión ( vis cos idad ) proyección w0 ( x) → w1 ( x) → w2 ( x) → w3 ( x) → w4 ( x) advección El procedimiento general se puede observar en la siguiente figura: Fig. 8 – Los primeros tres pasos pueden llevar el campo fuera del espacio de campos sin divergencia. El cuarto paso asegura que el campo no diverge al final de cada paso de simulación La solución en el instante t + ∆t viene dada por el último campo vectorial de velocidad: ū(x, t + ∆t) = w4(x). La simulación se obtiene iterando estos pasos. Para calcular el primer término, la adición de una fuerza externa f, que se asume que no varía considerablemente en dicho instante de tiempo, se procede de la siguiente manera: w1 ( x)= w0 ( x) + ∆tf ( x, t ) El siguiente paso tiene en cuenta los efectos de la advección o convección (efecto por el que las partículas se mueven, debido a la propagación de la velocidad en un instante anterior, aunque la velocidad actual sea cero). Una perturbación en cualquier parte del fluido se propaga de acuerdo con la expresión: –(ū ⋅∇) ū, que hace que la ecuación de Navier-Stokes sea no lineal. Foster y Metaxas han resuelto esto utilizando el método de diferencias finitas, que sólo es estable si ∆t es suficientemente pequeño. En este caso, se ha utilizado otra aproximación que hace el método estable incondicionalmente, basado en una técnica para resolver ecuaciones diferenciales parciales, conocida como método de características. En cada paso de tiempo, todas las partículas del fluido se mueven con la velocidad del fluido en sí. Para obtener la velocidad de un punto x en el instante de tiempo t + ∆t, se mira la trayectoria anterior del punto x, a través del campo de velocidad w1 durante un tiempo ∆t. Esto define un camino p(x,s), que se corresponde con una línea de flujo parcial del campo de velocidad: Fig. 9 – Se traza cada punto del campo hacia atrás en el tiempo. La nueva velocidad en el punto x es la velocidad que la partícula tenía en un tiempo ∆t anterior, en su antigua posición p(x,- ∆t) Por lo que la nueva velocidad en el punto x se fija con el valor de la velocidad que tenía la partícula que ahora está en x, en su posición anterior, en un tiempo ∆t anterior: w2 ( x)= w1 ( p ( x,−∆t )) El tercer paso resuelve el efecto de la viscosidad y es equivalente a una ecuación de difusión: ∂w2 = ν ∇ 2 w2 ∂t resolviéndolo mediante un método implícito: ( I − ν∆t∇ 2 ) w3 ( x) = w2 ( x) Finalmente, el cuarto paso de proyección, hace que el resultado no sea divergente, resolviendo para ello la ecuación ∇2q = ∇ · w3: w4 = w3 − ∇q Este paso de proyección requiere un buen método de resolución de la ecuación de Poisson, como por ejemplo, métodos multimalla, ya que la ecuación de Poisson, cuando se discretiza espacialmente, se convierte en un sistema lineal disperso. Por tanto, y debido a que los pasos de viscosidad y de proyección requieren resolver grandes sistemas de ecuaciones dispersos, mediante métodos multimalla se pueden resolver sistemas lineales dispersos en un tiempo lineal. 4.2.4 Resultados A continuación, se presentan dos ejemplos de funcionamiento del método. En ambos ejemplos, se permite al animador colocar densidades y aplicar fuerzas en tiempo real. En el primero de ellos, se simula un gas usando mapas de texturas fractales: Fig. 10 – Simulación de gases usando mapas de texturas fractales En el segundo ejemplo, se simula un gas y cómo se propaga, usando para ello un mapa de texturas de líneas equiespaciadas: Fig. 11 – Simulación de gases usando un mapa de texturas de líneas equiespaciadas 4.3 Visual Simulation of Smoke. Fedkiw, Stam and Jensen 4.3.1 Introducción El hecho de modelar fenómenos naturales, como humo o gases, es altamente complicado, debido a la complejidad de su movimiento y su turbulencia. La importancia de modelar correctamente este comportamiento reside en las aplicaciones de dichos fenómenos, como pueden ser los efectos especiales en las películas o en videojuegos interactivos. Más allá de estas aplicaciones, también tienen interés para ingeniería, más concretamente en el campo de dinámica de fluidos computacional (CFD en inglés). El modelo propuesto consiste en utilizar una simulación numérica del humo, basada en las ecuaciones de Euler, para aplicaciones de gráficos por ordenador. El motivo de usar estas ecuaciones es porque suele ser más apropiado para modelar gases y tiene un menor coste computacional, en comparación con las ecuaciones que describen fluidos de Navier-Stokes. Además, se ha usado un término de vorticidad, para modelar la rotación característica del humo. También, es capaz de manejar fronteras en el dominio computacional, por lo que puede tratar la interacción del humo con objetos en movimiento, así como remolinos de humo. El modelo es estable, eficiente y preciso, es decir, no sufre una excesiva disipación numérica. Se han adaptado técnicas de dinámica de fluidos específicas para la animación de gases como el humo. La principal contribución reside en el método utilizado para reducir la disipación numérica, inherente en los esquemas semi-lagrangianos. Esto se ha conseguido mediante la utilización de la técnica de dinámica de fluidos conocida como confinamiento de vorticidad. Esta técnica se basa en inyectar en el fluido la energía perdida debido a la disipación numérica, forzando esto mediante un término añadido. Con esto, se consigue aumentar la verticidad del flujo, lo que visualmente se traduce en conservar el humo “vivo” según pasa el tiempo. Al añadir esta fuerza inyectada, no se incrementa en exceso la carga computacional del método y, además, es consistente con las ecuaciones de Euler utilizadas debido a que desaparece en la medida en la que se incrementa el número de celdas. Al tener solamente una pequeña sobrecarga debido a esto, las simulaciones son casi tan rápidas como aquellas obtenidas a partir del algoritmo básico de fluidos estables. El modelo permanece estable mientras la magnitud del término añadido esté por debajo de un cierto umbral. Manteniendo dicha magnitud dentro de este rango, el paso de tiempo es de órdenes de magnitud más grandes que en métodos explícitos. Fig. 12 – Caminos semi-lagrangianos que atraviesan la frontera de una celda 4.3.2 Ecuaciones del fluido Se asume que los gases se pueden modelar como un fluido ideal (fluido sin viscosidad, o inviscid fluid), incompresible (que no se puede comprimir), y con densidad constante. Los efectos de la viscosidad se pueden obviar, debido a que la disipación numérica domina la viscosidad física y la difusión molecular. Las ecuaciones que modelan la velocidad del humo que se han utilizado son: ∇⋅u = 0 ∂u = −(u ⋅ ∇)u − ∇p + f ∂t donde: • ∇ es el operador gradiente • ū=(u,v,w) es la velocidad del humo • ⋅ es el operador producto escalar • p es la presión del humo • f son las fuerzas externas • la densidad constante del fluido se ha fijado arbitrariamente a 1 Estas ecuaciones determinan que la velocidad debe conservar tanto la masa (primera ecuación), como su momento (segunda ecuación). Fig. 13 – Discretización del dominio computacional en celdas iguales (izquierda). Componentes del vector velocidad (derecha), definidos en las facetas de cada celda o vóxel Puesto que tanto la densidad (ρ) como la temperatura (T) afectan a la velocidad del fluido, se necesitan ecuaciones para modelar la evolución de las mismas en el tiempo. Se asume que estas dos magnitudes escalares son transportadas (mediante la advección) a lo largo de la velocidad del humo: ∂T = −(u ⋅ ∇)T ∂t ∂ρ = −(u ⋅ ∇) ρ ∂t Para modelar el comportamiento de que gases pesados tienden a descender, debido a la fuerza de la gravedad, mientras que gases calientes tienden a subir, debido a la flotabilidad (o buoyancy), se usa el siguiente modelo: f buoy = −αρ z + β (T − Tamb ) z donde: • α y β son dos constantes positivas con las unidades apropiadas para que la ecuación tenga sentido • z=(0,0,1) apunta hacia arriba en la dirección vertical • Tamb es la temperatura ambiente del aire Cuando ρ = 0 y T = Tamb, esta fuerza es igual a cero. 4.3.3 Resultados A continuación, se presentan dos ejemplos de funcionamiento del método. En el primero de ellos, se simula humo subiendo y pasando alrededor de una esfera: Fig. 14 – Humo subiendo, pasando alrededor de una esfera, y formando remolinos En el segundo ejemplo, se puede observar la secuencia de imágenes de una simulación modelando el comportamiento del humo: Fig. 15 – Seis frames renderizados modelando el comportamiento del humo 4.4 Curl-Noise for Procedural Fluid Flow. Bridson 4.4.1 Introducción El modelo está basado en métodos procedurales que, a menudo, se prefieren a la simulación física para animar fluidos turbulentos, debido a que ofrecen una extremadamente sencilla aproximación para generar eficientemente campos de velocidad turbulenta basados en ruido de Perlin, usando una fórmula que es exactamente incompresible (necesaria para caracterizar la apariencia de los fluidos), que además respeta las fronteras de objetos sólidos (no permitiendo a los fluidos atravesar las superficies de dichos objetos) y cuya amplitud se puede modular en el espacio como se desee. El ruido de Perlin se usa frecuentemente para generar campos de velocidad aleatorios, sin embargo, estos campos pueden contener sumideros en donde las partículas se acumulan, ya que estos campos no tienen divergencia cero. La condición de divergencia igual a cero, ∇ · ū = 0, es equivalente a decir que el fluido es incompresible o que no se comprime, siendo una característica visualmente importante en los fluidos. Este método extiende la idea de usar el rotacional del ruido de Perlin para modelar fluidos incompresibles, manejando además condiciones de contorno y otros efectos. Cabe destacar el elevado control que tiene el animador con este método procedural. 4.4.2 Rotacional El método usa el rotacional (∇×) de un campo potencial Ψ para las velocidades, de tal manera que, en tres dimensiones, el potencial es un campo Ψ = (Ψ1, Ψ2, Ψ3), dado por: ∂Ψ ∂Ψ2 ∂Ψ1 ∂Ψ3 ∂Ψ2 ∂Ψ1 u ( x, y, z ) = 3 − , − , − ∂z ∂z ∂x ∂x ∂y ∂y Por definición, el rotacional de un potencial suave tiene automáticamente divergencia cero: ∇ · ∇× ≡ 0. Así, el campo de velocidad se construye automáticamente con divergencia cero: ∇ · ū = 0 siendo, por tanto, el fluido incompresible por construcción. Por tanto, por la forma de construir del modelo, no es posible que haya sumideros. Para evaluar las derivadas parciales, se usa una aproximación simple de diferencias finitas con un desplazamiento muy pequeño, en este caso, 10-4 veces más pequeño que el dominio, dando buenos resultados en precisión simple. 4.4.3 Ruido de Perlin Para construir un campo de velocidad arbitrario se usa ruido de Perlin N(x) en el potencial. En dos dimensiones Ψ = N, mientras que en tres dimensiones se necesitan tres componentes para el potencial, que serían tres funciones de ruido aparentemente sin correlación (un vector N(x) con tres coordenadas serviría). Si la función de ruido varía en el rango [-1, 1], las derivadas parciales de la función escalada N(x/L) variarán sobre la escala de longitud L con valores aproximadamente dentro del rango O([-1/L, 1/L]). Esto significa que se esperan vórtices de diámetro aproximadamente L y velocidades hasta de aproximadamente O(1/L). El usuario puede usar esto para escalar la magnitud de Ψ hasta conseguir la velocidad deseada. Por tanto, cambiando el intervalo de ruido, el usuario puede generar vórtices donde desee, fácil e intuitivamente. Para añadir realismo, el campo de velocidad debería variar con el tiempo. Esto se consigue simplemente usando una función de ruido que varíe en el tiempo. 4.4.4 Contorno Considerando un objeto sólido sin movimiento en el flujo, la condición de contorno de que un flujo viscoso debe satisfacer es ū = 0. Esto se puede conseguir simplemente modulando el potencial a cero con un paso suave función de la distancia, de tal manera que todas las derivadas parciales (y por tanto, el rotacional) del nuevo potencial son cero en el contorno o frontera. Una característica de mayor interés en animación es la condición de contorno ū · n = 0, donde el componente normal de la velocidad en el contorno es cero, permitiendo al fluido pasar tangencialmente, pero sin atravesar el sólido. 4.4.5 Resultados A continuación, se presenta un ejemplo de funcionamiento del método, en el que el usuario (por medio del ratón), puede interactuar en tiempo real, produciendo vórtices en la simulación, obteniendo el efecto que se puede observar en la figura: Fig. 16 – Ruido de Perlin 2D incompresible con fronteras sólidas 5 Bibliografía Wikipedia: http://es.wikipedia.org Apuntes de Mecánica de Fluidos de la Universidad Nacional de Ingeniería de Perú: http://www.imefen.uni.edu.pe/mfluidos/1ra-clase.pdf Apuntes de Mecánica de Fluidos de la Universidad del País Vasco: http://www.sc.ehu.es/sbweb/fisica/fluidos/dinamica/bernoulli/bernouilli.htm Monografías: http://www.monografias.com Apuntes de Física de Ciencias de la Atmósfera de la Universidad Complutense de Madrid: http://www.ucm.es/info/catmosf/docencia/mecanica2/fluidos_1.PDF Apuntes de Introducción a la Física Ambiental de la Universidad de Alcalá: http://www2.uah.es/ifa/documentos/resumenes/tema_5_ifa.pdf FAQ de Mecánica de Fluidos de la Universidad de Navarra: http://www1.ceit.es/asignaturas/Fluidos1/WEBMF/Mecanica%20de%20Fluidos%20I/F AQMFI/FAQ3.htm Introducción a la Mecánica de Fluidos (Julio Gratton): http://www.lfp.uba.ar/Julio_Gratton/fluidos/07.%20Flujosviscosos.pdf Enciclopedia Encarta: http://es.encarta.msn.com/encyclopedia_761560121/teorema_de_bernoulli.html Foster, Metaxas, "Modeling the Motion of a Hot, Turbulent Gas", SIGGRAPH 1997 Stam, "Stable Fluids", SIGGRAPH 1999 Fedkiw, Stam, Jensen, "Visual Simulation of Smoke", SIGGRAPH 2001 Bridson, Hourihan, Nordenstam, "Curl-Noise for Procedural Fluid Flow", SIGGRAPH 2007 http://www.dgp.toronto.edu/people/stam/reality/Research/StableFluids/index.html http://www.dgp.utoronto.ca/~stam/reality/Talks/FluidsTalk/FluidsTalk_files/frame.htm http://www.multires.caltech.edu/teaching/demos/java/stablefluids.htm http://cg.cis.upenn.edu/~fostern/ http://www.cs.virginia.edu/~gfx/Courses/2001/GfxSeminar.spring.01/ http://graphics.ucsd.edu/~henrik/ http://physbam.stanford.edu/~fedkiw/