Problemas del agua
- La mayoría de los juegos no permiten modificar el terreno, lo cual es razonable. No todos los juegos lo necesitan.
- En los juegos con agua, hay que pensar cómo manejar el flujo del agua.
- Los modelos simples existentes no resultan satisfactorios, y hace falta investigar para encontrar uno mejor.
Configuración
- La simulación debe funcionar sobre una cuadrícula, y es preferible usar la misma cuadrícula que el terreno.
- La escala promedio de la simulación debería ser de alrededor de 1 metro.
- El agua puede asumirse como un campo de alturas sobre el terreno, y no fluye verticalmente.
- El agua debe poder fluir y no desaparecer mágicamente por errores de simulación.
- La simulación debe tener una estabilidad controlable y funcionar rápido.
No-soluciones
- Smoothed Particle Hydrodynamics ofrece resultados muy impresionantes, pero resuelve otro problema.
- Stable Fluids de Jos Stam maneja todo el volumen del fluido y no es rápido.
Ecuaciones de aguas someras
- Las ecuaciones de aguas someras promedian en la dirección vertical y dejan ecuaciones 2D.
- La parte de "someras" asume que el tamaño vertical típico de la columna de agua es mucho menor que la escala horizontal.
Cuadrícula
- En dinámica de fluidos, la cuadrícula es importante y normalmente se usan staggered grids.
- Las staggered grids almacenan la altura/densidad del agua, etc., en celdas cuadradas, y la velocidad en los bordes entre celdas.
Método de tuberías virtuales
- El flujo del agua se simula suponiendo que las celdas de agua están conectadas por tuberías virtuales.
- Consta de tres pasos: aceleración del flujo, escalado del flujo saliente y actualización de la columna de agua.
Aceleración del flujo
- El flujo se acelera según la diferencia de altura del agua entre celdas de agua adyacentes.
- Se añade fricción para que la simulación converja a un estado estable.
Actualización de la columna de agua
- Para cada celda de agua, se agrega o se elimina agua según los flujos adyacentes.
Escalado del flujo saliente
- Se ajusta el flujo de salida para que la cantidad de agua de una celda no se vuelva negativa.
Elevación del terreno
- Se añade la elevación del terreno para que el agua se desplace sobre el terreno.
Condiciones de frontera
- Hay que considerar qué sucede en los bordes de la simulación.
- Se definen condiciones como muros, entrada y salida ajustando los valores del flujo en la frontera.
Viscosidad
- Se añade viscosidad para que las capas delgadas de agua tengan más dificultad para moverse.
Código completo de la simulación
- El código de la simulación consiste en 4 bucles
for sobre algunos arreglos 2D.
Desventajas del modelo
- No hay inercia ni difusión de velocidad, así que cuando un flujo rápido de agua entra en un lago, se dispersa en todas las direcciones.
Bonus: cuadrículas hexagonales/triangulares
- Se puede simular agua usando una cuadrícula triangular, que puede verse como el dual de una cuadrícula hexagonal.
1 comentarios
Comentarios en Hacker News
Se menciona el problema de que, en una simulación de fluidos, el agua se acumula y afecta a las celdas adyacentes. Esta es una de las razones por las que la paralelización es difícil en los juegos generados proceduralmente
Se menciona que, al desarrollar simulaciones de fluidos, existe un gran riesgo de perder tiempo mirando resultados hermosos
Se menciona que la forma de recolectar recursos en Animal Crossing es eficiente sin necesidad de modificar el terreno
Se menciona que la física del agua en el juego Timberborn es un elemento importante del juego y lo recomienda
Comparte la experiencia de haber experimentado con un algoritmo implementado en 3D usando o3-mini-high
Presenta una simulación educativa de inundaciones que usa WebGL para calcular los valores de las celdas basándose en las celdas adyacentes
Propone una forma de resolver el problema de la falta de inercia y difusión de velocidad en la simulación del agua
Comparte su curiosidad por una simulación de erosión que comenzó como un proyecto personal
Menciona la idea de simular agua en el juego Creeper World y luego lanzar bombas