2 puntos por GN⁺ 2025-02-08 | 1 comentarios | Compartir por WhatsApp

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

 
GN⁺ 2025-02-08
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

    • La generación procedural es adecuada para la paralelización, pero en dominios infinitos resulta difícil paralelizar
    • Se señala que no se ha explorado mucho este tema
    • Elogia el trabajo de Nick McD y menciona que su trabajo también tiene restricciones de dominio debido al diseño de la simulación
    • Propone generar proceduralmente los límites de las cuencas de agua para paralelizar y simular una cuenca completa de una sola vez
  • Se menciona que, al desarrollar simulaciones de fluidos, existe un gran riesgo de perder tiempo mirando resultados hermosos

    • Comparte su experiencia de 2011 implementando dinámica de fluidos basada en GPU
    • Explica que el fluido (sangre) se simulaba en 2D sobre una superficie (tejido) y se proyectaba sobre la malla teniendo en cuenta la gravedad y la inclinación de la superficie
  • Se menciona que la forma de recolectar recursos en Animal Crossing es eficiente sin necesidad de modificar el terreno

    • Se talan árboles para obtener troncos, pero después de cierta cantidad se requiere un tiempo de reutilización
    • Sugiere que este método puede ser mejor en juegos donde no se necesita modificar el terreno
  • Se menciona que la física del agua en el juego Timberborn es un elemento importante del juego y lo recomienda

    • Encontrar formas de represar el agua y usarla para motores y campos es una parte esencial del gameplay
  • Comparte la experiencia de haber experimentado con un algoritmo implementado en 3D usando o3-mini-high

    • Menciona que implementó Perlin noise desde cero y lo usó para generar terreno
  • Presenta una simulación educativa de inundaciones que usa WebGL para calcular los valores de las celdas basándose en las celdas adyacentes

    • Explica que cambiar los valores del modelo puede producir efectos grandes
  • Propone una forma de resolver el problema de la falta de inercia y difusión de velocidad en la simulación del agua

    • Explica que puede resolverse promediando los valores de las flechas de flujo con los de las flechas vecinas
  • Comparte su curiosidad por una simulación de erosión que comenzó como un proyecto personal

    • Menciona que el proyecto se detuvo porque no lograba entender la erosión
  • Menciona la idea de simular agua en el juego Creeper World y luego lanzar bombas