Simulador de HumoBeta
Arrastra para remover humo de colores en un fluido en tiempo real
Esta herramienta es una versión beta que aún se está estabilizando. Avísanos si un resultado no parece correcto.
Arrastra sobre el lienzo para empujar el fluido en esa dirección mientras rocías humo de colores. En cada fotograma, el método Stable Fluids de Jos Stam difunde (viscosidad) y advecta el campo de velocidad, y luego resuelve la presión y lo proyecta sin divergencia, así que los remolinos aparecen solos. El humo que rocías está caliente, así que la flotabilidad lo eleva y se frena al enfriarse. El refuerzo de remolinos (confinamiento de vorticidad) devuelve los remolinos pequeños que la malla emborrona, y los bordes del humo se enroscan. Sube la viscosidad para un efecto de miel; con desvanecimiento 0 el humo nunca desaparece.
Procesando…
0.0
No se ha bloqueado: el resultado aparecerá cuando termine el cálculo.
Acerca de Simulador de Humo
Esta herramienta sigue el método Stable Fluids que Jos Stam presentó en SIGGRAPH 1999. Una malla cuadrada (64², 128² o 192²) guarda un campo de velocidad y tres concentraciones de tinte: rojo, verde y azul. En cada fotograma la velocidad pasa por difusión (viscosidad), proyección, advección y proyección; el tinte, por difusión, advección y desvanecimiento. Al arrastrar se añade bajo el puntero una mancha gaussiana de velocidad y tinte.
Para que se comporte como humo, la herramienta lleva ahora una temperatura y una fuerza de flotación. El humo que rocías está caliente, así que lo empuja hacia arriba; el calor viaja con el flujo y se enfría alrededor de un 45 % por segundo, así que el empuje se va apagando (el enfoque de Fedkiw y otros, 2001). El tinte de color es solo un trazador y nunca empuja al flujo. Con la flotabilidad en 0 el humo ya no sube; solo se extiende y se apaga el movimiento que tú metiste. Los cuatro bordes son paredes cerradas.
A qué se refiere «stable»
Los esquemas explícitos anteriores explotaban en cuanto el fluido avanzaba más de una celda por fotograma. Stam eliminó ese límite de dos maneras. La advección es semilagrangiana: para cada celda se sigue la velocidad hacia atrás hasta el punto de donde venía su contenido un paso antes y se interpola el valor allí. Un valor interpolado siempre queda entre sus vecinos, así que no aparecen extremos nuevos. La difusión viscosa se resuelve de forma implícita, de modo que ni siquiera un coeficiente grande la hace divergir.
El precio es la precisión. Cada interpolación emborrona un poco los remolinos pequeños, lo que equivale a una viscosidad extra. Por eso los remolinos se apagan aunque el control de viscosidad esté en cero. Con la malla de 64² mueren antes; con 192² los filamentos finos duran más. En 2001, Fedkiw, Stam y Jensen añadieron un término de confinamiento de vorticidad para devolver ese giro perdido. Esta herramienta lo incluye con el control de refuerzo de remolinos: al subirlo, los bordes del humo se enroscan en remolinos finos; si te pasas, el flujo se vuelve nervioso.
La proyección, o por qué los remolinos aparecen solos
El agua y el aire lento son casi incompresibles: lo que entra en una celda debe salir (divergencia nula). La proyección interpreta cualquier divergencia del campo de velocidad como una presión y resta su gradiente. Para eso resuelve una ecuación de Poisson con barridos de Gauss–Seidel sobrerrelajados (SOR, ω = 1,8). Las mallas grandes convergen más despacio, así que el número de barridos crece con la resolución (20 en 64² y 128², 30 en 192²).
Traza un solo trazo corto y recto y verás el efecto. El fluido empujado hacia delante no tiene adónde ir y se aparta a los lados; el hueco que deja detrás se llena desde los costados. El resultado es un par de remolinos que giran en sentidos opuestos al final del trazo. Nadie los dibujó: los produce una única regla, conservar el volumen. Como el número de barridos es fijo, la divergencia no llega exactamente a cero, pero el residuo en 192² bajó de cerca del 17 % del gradiente de velocidad con los antiguos 20 barridos de Gauss–Seidel a cerca del 2 %.
Qué fijan realmente los controles
- Viscosidad: el valor del control × 10⁻⁴ es la viscosidad cinemática, tomando el ancho de la caja como 1. En el máximo, 10, vale 10⁻³. En una malla de 128² a 1/60 s por fotograma, el coeficiente de difusión a = dt·ν·N² ≈ 0,27, suficiente para emborronar un trazo en segundos, como miel.
- Dispersión del humo: difunde solo el tinte (control × 10⁻⁵). El movimiento no cambia; solo se difuminan los bordes de color.
- Desvanecimiento k: cada fotograma multiplica el tinte por e^(−k·dt). El valor inicial 0,3 da una vida media de ln2 / 0,3 ≈ 2,3 s; con 3, 0,23 s. Con 0 el tinte solo cambia por error numérico.
Por qué lo adoptaron videojuegos y cine
Stable Fluids no es la forma más precisa de resolver las ecuaciones; es la que nunca revienta, sea cual sea el paso de tiempo. En gráficos en tiempo real, donde cada fotograma debe terminar a tiempo, esa propiedad pesa más que la precisión. Stam publicó una versión compacta en C en la Game Developers Conference de 2003 (Real-Time Fluid Dynamics for Games), que se convirtió en el punto de partida de innumerables demos web y efectos de juegos. Los códigos de CFD de ingeniería hacen el intercambio contrario: pasos de tiempo pequeños y advección de orden alto para contener el error.
Ejemplos
Cuánto dura el humo
- Entrada
Desvanecimiento 0,3 por segundo, concentración inicial 1- Resultado
0,5 a los 2,3 s; unos 0,05 a los 10 s
e^(−0,3×10) = e^(−3) ≈ 0,050. La pantalla aplica una curva 1 − e^(−x), así que reducir la concentración a la mitad oscurece el píxel menos de la mitad.
Viscosidad al máximo
- Entrada
ν = 10⁻³, malla de 128², dt = 1/60 s- Resultado
Coeficiente de difusión por fotograma a ≈ 0,27
a = (1/60) × 10⁻³ × 128² = 0,273. Un remolino de 10 celdas de ancho (un 8 % de la caja) se deshace en un tiempo L²/ν ≈ 0,078² / 10⁻³ ≈ 6 s.
Comparar resoluciones
- Entrada
El mismo trazo en 64² y en 192²- Resultado
En 64² los remolinos desaparecen tras una o dos vueltas; en 192² se enrollan bandas finas varias veces
La viscosidad numérica de la interpolación semilagrangiana es proporcional al tamaño de celda. Triplicar las celdas deja cada una en un tercio del tamaño.
Cómo se usa
- Haz un trazo corto y rápido y observa el par de remolinos que se forma al final.
- Cambia la viscosidad y la resolución y compara cuánto dura el mismo trazo.
- Pon el desvanecimiento en 0, mezcla varios colores y mira cómo se enrollan las fronteras.
Preguntas frecuentes
¿Por qué sube el humo?
Al humo rociado se le da una temperatura, y a la velocidad se le suma una fuerza hacia arriba proporcional a ella (flotabilidad). Al enfriarse empuja menos, así que sube un rato y luego se extiende. Con la flotabilidad en 0 el tinte es solo un trazador de color y no sube.
¿Por qué se paran los remolinos con viscosidad cero?
La advección semilagrangiana promedia valores vecinos cada vez que interpola, y eso desgasta las estructuras pequeñas como lo haría una viscosidad. Una malla más fina lo reduce.
¿Sirve para ingeniería real?
El comportamiento cualitativo es correcto (la proyección crea pares de remolinos, el efecto de la viscosidad), pero la disipación numérica y el número limitado de iteraciones de presión lo hacen poco fiable para predicciones cuantitativas. Stam lo propuso para animación.
¿En qué se diferencia del método de Boltzmann en red?
Stable Fluids resuelve directamente las ecuaciones de Navier–Stokes en velocidad y presión. El método de Boltzmann en red, usado en el túnel de Kármán y el túnel 3D de este sitio, simula choques y desplazamientos de distribuciones de partículas cuyos promedios se comportan como un fluido.
Guías relacionadas
Fuentes
- J. Stam, Stable Fluids, SIGGRAPH 99 Proceedings, 121–128 (1999)
- J. Stam, publications page (Stable Fluids, Real-Time Fluid Dynamics for Games)
- R. Fedkiw, J. Stam, H. W. Jensen, Visual Simulation of Smoke, SIGGRAPH 2001
Revisado el: