La tecnología para simular fluidos, fuego y humo en tiempo real
(andrewkchan.dev)- Notas y código fuente (GitHub) sobre las matemáticas, algoritmos y métodos relacionados con la simulación en tiempo real de fluidos como el fuego y el humo
1. Simulación de fluidos
- Antes de simular el fuego, primero hay que simular el fluido
- Si suponemos que el fluido es incompresible y no viscoso, el problema se simplifica enormemente
1.1 Dinámica de fluidos básica
- Un fluido llena una región DDD del espacio, y para el tiempo ttt la velocidad del fluido es u(x,t)
- El campo de velocidad 2D u puede representarse con una cuadrícula de N×N
- ¿Qué pasa si dejamos caer una gota de tinte en el fluido?
- Definimos un campo escalar ψ(x,t) que representa la densidad del tinte, y al movimiento causado por la velocidad del fluido se le llama advection
- El Naive Method para calcular la advection consiste en mover cada punto de la cuadrícula y actualizar el punto de cuadrícula más cercano, pero es difícil de paralelizar e inestable
Ecuación diferencial parcial para la advection
- Para derivar la advection de forma estable, se necesita una expresión explícita en forma de PDE
- La masa total de tinte en una región espacial fija WWW es ∫WψdV, y el cambio de masa en el tiempo es ddt∫Wψ(x,t)dV
- Según la ley de conservación de la masa, ddt∫WψdV=−∫Sψu⋅ndA
- Aplicando el teorema de la divergencia, obtenemos ∫W[∂ψ∂t+∇⋅(ψu)]dV=0 y, para una subregión unitaria W=dV, ∂ψ∂t+∇⋅(ψu)=0
- Esto proporciona la PDE explícita que debemos resolver
Método estable para la advection
- Si observamos en detalle la ec. (1), el término del lado derecho es la derivada direccional en dirección −u
- Este método, llamado Semi-Lagrangian advection, fue inventado por Jos Stam en 1999
- Como cada punto de la cuadrícula se actualiza solo una vez, es muy fácil de paralelizar y es incondicionalmente estable
1.2 Ecuaciones de Navier-Stokes
- Ya encontramos un modelo de cómo evolucionan en el tiempo las propiedades escalares de un fluido, pero ¿qué ocurre con el flujo del fluido en sí?
- Las ecuaciones de Navier-Stokes definen cómo cambia en el tiempo el campo de velocidad u en cualquier punto del fluido
- Como asumimos que el fluido no es viscoso, μ=0, y por ahora también podemos ignorar las fuerzas externas
- Por lo tanto, solo quedan dos términos: la auto-advección (self-advection) y la presión (pressure)
- Si calculamos numéricamente y sumamos estos términos en cada paso de tiempo, podemos simular el fluido
Resolución de la presión
- Como no sabemos si el nuevo campo de velocidad cumple la restricción de incompresibilidad, el término de presión p debe corregirlo
- Para ello, hay que resolver la ecuación de Poisson
- Para resolver la ecuación de Poisson, podemos usar algoritmos iterativos como el método de Jacobi
- El método de Jacobi puede ejecutarse en paralelo en la GPU, por lo que su implementación es muy sencilla
Resumen: simulación de Navier-Stokes
- Las matemáticas de Navier-Stokes pueden ser algo complejas, pero simular un fluido resolviendo las ecuaciones puede resumirse en unos pocos procedimientos de actualización clave
1.3 Confinamiento de vorticidad (Vorticity Confinement)
- Usar una cuadrícula para almacenar el campo de velocidad es muy conveniente, pero al interpolar valores entre puntos de la cuadrícula aparece un suavizado numérico no deseado
- Esto hace que se disipen los remolinos turbulentos del flujo y, en general, produce un movimiento de fluido excesivamente suave y “aburrido”
- El confinamiento de vorticidad es un proceso para amplificar esa vorticidad perdida
- El confinamiento de vorticidad fue ideado para resolver campos de flujo muy complejos, como los de las aspas de un helicóptero
- La vorticidad se calcula en cada punto tomando el curl de u, y para amplificarla se añade flujo circular en cada punto
Turbulencia con Curl-Noise
- El curl noise es un método similar al confinamiento de vorticidad, pero en lugar de medir y amplificar la vorticidad del campo de velocidad, usa una función de ruido para crear desde cero un campo escalar de vorticidad
- Los fluidos que se mueven rápido y son muy turbulentos son los que más se benefician del confinamiento de vorticidad y del curl noise
2. Simulación de fuego
- Para simular fuego y humo, hay que añadir canales que representen el combustible y la temperatura, y modelar la combustión del combustible para generar calor
- También hay que manejar el ascenso de las partes más calientes del fluido según un modelo de flotabilidad térmica, y renderizar correctamente las llamas
2.1 Modelo básico de combustión
- Químicamente, el fuego se produce por una reacción de oxidación del material combustible, que libera calor y luz
- Definimos un campo escalar ρ que representa la densidad del combustible y un campo escalar T que representa la temperatura
- El combustible se quema y añade temperatura al sistema, y la temperatura se difunde de las zonas calientes a las frías
- La convección térmica se define como la combinación de estos dos procesos, y ya contamos con un modelo matemático para representarla: ¡advection!
Opinión de GN⁺:
- Este artículo explica el complejo proceso de simular en tiempo real fluidos como el fuego y el humo, un tema muy importante en gráficos por computadora y desarrollo de videojuegos.
- Con los avances recientes de las GPU, ahora es posible procesar simulaciones de fluidos complejas en tiempo real, lo que contribuye a crear juegos visualmente atractivos y efectos especiales para cine.
- El artículo aborda conceptos matemáticos avanzados como las ecuaciones de Navier-Stokes y el confinamiento de vorticidad, por lo que ofrece información útil para ingenieros de software principiantes interesados en este campo.
1 comentarios
Comentarios de Hacker News