2 pontos por GN⁺ 2025-02-08 | 1 comentários | Compartilhar no WhatsApp

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

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

    • A geração procedural é adequada para paralelização, mas em domínios infinitos a paralelização é difícil
    • Aponta que esse tema não foi muito explorado
    • Elogia o trabalho de Nick McD e menciona que o trabalho dele também tem restrições de domínio devido ao design da simulação
    • Propõe gerar proceduralmente os limites das bacias hidrográficas para permitir a paralelização e simular toda a bacia de uma só vez
  • Menciona o grande risco de perder tempo admirando resultados bonitos ao desenvolver simulações de fluidos

    • Compartilha sua experiência de 2011 implementando dinâmica de fluidos baseada em GPU
    • Explica que o fluido (sangue) era simulado em 2D sobre uma superfície (tecido) e projetado na malha levando em conta a gravidade e a inclinação da superfície
  • Menciona que a forma de coleta de recursos de Animal Crossing é eficiente sem exigir manipulação de terreno

    • Corta-se a árvore para obter toras, mas depois de certa quantidade é necessário um tempo de recarga
    • Sugere que, em jogos que não exigem manipulação de terreno, esse método pode ser melhor
  • Recomenda o jogo Timberborn, mencionando que a física da água é um elemento importante do jogo

    • Descobrir como barrar a água e usá-la em motores e plantações é uma parte essencial da jogabilidade
  • Compartilha a experiência de testar em 3D um algoritmo implementado com o o3-mini-high

    • Menciona que implementou Perlin noise do zero e o usou para geração de terreno
  • Apresenta uma simulação educacional de enchente que usa WebGL para calcular valores das células com base nas células adjacentes

    • Explica que alterar os valores do modelo pode produzir grandes efeitos
  • Sugere uma forma de resolver a falta de inércia e difusão de velocidade em simulações de água

    • Explica que isso pode ser resolvido fazendo a média dos valores das setas de fluxo com os das setas vizinhas
  • Compartilha curiosidade sobre uma simulação de erosão que começou como projeto pessoal

    • Menciona que o projeto foi interrompido por não entender erosão
  • Menciona a ideia de simular água no jogo Creeper World e depois lançar bombas nele