algorithm - steering - Algoritmos para simular el flujo de fluidos
nature of code steering (10)
Esta no es mi área de investigación, pero creo que esto se considera el trabajo canónico:
Simulación de fluidos para gráficos por computadora
http://www.akpeters.com/product.asp?ProdCode=3260
Además, mira el grupo de animación y modelado de Berkeley
http://www.cs.berkeley.edu/b-cam/
También recomiendo una herramienta como Google Scholar o Citeseer y persuadan la literatura académica.
Tengo una idea de juego que requiere una simulación semi-realista de un fluido que fluye alrededor de varios objetos. Piense en un charco de mercurio en una superficie irregular que se está inclinando en varias direcciones.
Esto es para un juego, entonces el realismo 100% físico no es necesario. Lo más importante es que los cálculos se pueden hacer en tiempo real en un dispositivo con la potencia de un iPhone.
Estoy pensando que algún tipo de autómata celular o sistema de partículas es el camino a seguir, pero no sé por dónde empezar.
¿Alguna sugerencia?
Me pregunto si estás pensando en algo como Mercury de Archer Maclean o Mercury Meltdown para PSP.
Por lo que sé, en el juego De Blob, una "mancha" de color se mueve alrededor de un entorno blanco, coloreando los objetos con los que tropieza. Esto de alguna manera se activó en mi mente cuando leí tu descripción de lo que pareces querer hacer. (En realidad, no he jugado el juego, así que no tengo idea de qué tan bien se ajusta).
Habiendo dicho eso, me parece recordar que la fluidez del blob es casi artificial en ese juego: básicamente es una esfera, algunas transformaciones leves de tamaño / forma, algunas señales de movimiento y "sonidos fuidios" añadidos que le dan la impresión al jugador. que algo no muy sólido es el personaje principal del juego. No se involucró ninguna programación real de física o simulación.
Parece una buena opción para una pieza de software ejecutable en el iPhone, eso. ¿Eso quizás sea suficiente para ti?
Los métodos de Lattice-Boltzmann son una forma bastante común de simular fluido de forma discreta y autómata celular.
Sin embargo, en aras del rendimiento en tiempo real en un iPhone, puede ser más efectivo simular el fluido como un sistema de partículas y luego encontrar la forma de convertir las partículas en una masa volumétrica. Sospecho que este es el enfoque adoptado por juegos como Aqua Forest .
El trabajo de Ron Fedkiw es bastante impresionante en esta área.
Un comentario más: las simulaciones de fluidos son la materia de la programación numérica paralela y las supercomputadoras, o al menos, las computadoras de escritorio de alto poder y multi-core. Un iPhone probablemente no lo reducirá.
Esto también podría ser de interés ( video de demostración , demo binario , código fuente ).
Probablemente un sistema de partículas es un buen lugar para comenzar. A lo largo de estas líneas, se puede ver en SPH (hidrodinámica de partículas suavizadas) como un enfoque algo más físico para la simulación de fluidos que aún depende de las partículas.
SPH con partículas es probablemente el más rápido para arrancar y funcionar con una ventaja sobre la extensibilidad en viscoelásticos y otras cosas. Publicaré una guía en mi blog mañana que he estado escribiendo durante los últimos días sobre este tema. ( http://blog.brandonpelfrey.com )
La solución de Navier-Stokes basada en cuadrícula siempre es más rápida y la velocidad de cálculo es constante.
¿Es tan escaso que tienes que modelar partículas?
Si es así, recomiendo echar un vistazo a los autómatas celulares Lattice-Gas (LGCA, ver video de ejemplo aquí ).
En resumen, LGCA es una subclase de autómatas celulares donde los estados celulares son tuplas de valores binarios, cada uno representa un canal entre una celda y uno de su vecino, y a través del cual pueden viajar las partículas (el canal es 1
si contiene una partícula, 0
)
El esquema de actualización es entonces una función síncrona paralela de dos pasos que reorganiza las partículas entre los canales dentro de cada celda (colisión) y luego propaga estas partículas al canal correspondiente del vecino objetivo (propagación).