Problemas da água
- A maioria dos jogos não permite modificar o terreno, o que é razoável. Nem todo jogo precisa disso.
- Em jogos com água, é preciso pensar em como lidar com o fluxo da água.
- Os modelos simples existentes não são satisfatórios, e é preciso pesquisar para encontrar um modelo melhor.
Configuração
- A simulação precisa funcionar em uma grade, e é desejável usar a mesma grade do terreno.
- A escala média da simulação deve ser de cerca de 1 metro.
- A água pode ser tratada como um campo de altura sobre o terreno e não flui na vertical.
- A água deve poder fluir e não pode desaparecer magicamente por causa de erros de simulação.
- A simulação deve ter estabilidade controlável e funcionar rapidamente.
Não-soluções
- Smoothed Particle Hydrodynamics produz resultados muito impressionantes, mas resolve outro problema.
- Stable Fluids, de Jos Stam, lida com todo o volume do fluido e não é rápido.
Equações de águas rasas
- As equações de águas rasas fazem uma média na direção vertical e deixam equações em 2D.
- A parte "rasa" assume que a dimensão vertical típica da coluna de água é muito menor que a escala horizontal.
Grade
- Em dinâmica dos fluidos, a grade é importante, e normalmente se usam staggered grids.
- Em staggered grids, altura/densidade da água e afins são armazenadas em células quadradas, enquanto a velocidade é armazenada nas bordas entre as células.
Método dos canos virtuais
- O fluxo de água é simulado assumindo que as células de água estão conectadas por canos virtuais.
- Ele é composto por três etapas: aceleração do fluxo, escalonamento da vazão de saída e atualização da coluna de água.
Aceleração do fluxo
- O fluxo é acelerado de acordo com a diferença de altura da água entre células de água vizinhas.
- Adiciona-se atrito para que a simulação convirja para um estado estável.
Atualização da coluna de água
- Para cada célula de água, a água é adicionada ou removida de acordo com os fluxos vizinhos.
Escalonamento da vazão de saída
- O fluxo de saída é ajustado para que a quantidade de água na célula não fique negativa.
Elevação do terreno
- A elevação do terreno é adicionada para que a água se mova sobre o terreno.
Condições de contorno
- É preciso considerar o que acontece nas bordas da simulação.
- Definem-se condições como parede, entrada e saída configurando os valores de fluxo nas bordas.
Viscosidade
- Adiciona-se viscosidade para que pequenas camadas de água tenham mais dificuldade para se mover.
Código completo da simulação
- O código da simulação consiste em 4 loops
for sobre alguns arrays 2D.
Desvantagens do modelo
- Não há inércia nem difusão de velocidade, e quando um fluxo rápido de água entra em um lago, ele se espalha em todas as direções.
Bônus: grades hexagonais/triangulares
- É possível simular água usando uma grade triangular, que pode ser vista como o dual de uma grade hexagonal.
1 comentários
Comentários do Hacker News
Menciona o problema de, em simulações de fluidos, a água se acumular e afetar células adjacentes. Isso é um dos motivos pelos quais a paralelização é difícil em jogos gerados proceduralmente
Menciona o grande risco de perder tempo admirando resultados bonitos ao desenvolver simulações de fluidos
Menciona que a forma de coleta de recursos de Animal Crossing é eficiente sem exigir manipulação de terreno
Recomenda o jogo Timberborn, mencionando que a física da água é um elemento importante do jogo
Compartilha a experiência de testar em 3D um algoritmo implementado com o o3-mini-high
Apresenta uma simulação educacional de enchente que usa WebGL para calcular valores das células com base nas células adjacentes
Sugere uma forma de resolver a falta de inércia e difusão de velocidade em simulações de água
Compartilha curiosidade sobre uma simulação de erosão que começou como projeto pessoal
Menciona a ideia de simular água no jogo Creeper World e depois lançar bombas nele