Eu estou procurando qualquer entrada na simulação de água em 2D, contra uma matriz bastante grande (chame) bloqueada / não bloqueada (vista de lado). Eu tenho as seguintes idéias:
Cell Automata
Faça uma simulação massivamente parralel na CPU, usando autômatos celulares . Com regras simples como:
- Se houver uma célula aberta na parte inferior, vá para ela.
- Verifique as células esquerda e direita, escolha uma aleatória dentre as duas e vá para ela.
Prós
- Simples de implementar.
- Significativo / determinístico em um sistema multiplayer.
Contras
- Provavelmente muito lento.
- Não convincente.
Dinâmica de Fluidos na GPU
Execute uma aproximação aproximada da dinâmica de fluidos na GPU contra uma textura como a seguinte:
+------+-----+-----+-------+
|R |G |B |A |
+------+-----+-----+-------+
|vX |vY |NULL |Density|
+------+-----+-----+-------+
Prós
- Provavelmente muito rápido.
- Pode ser bastante convincente.
- Um sombreador de pixel adicional pode renderizá-lo diretamente.
Contras
- Difícil de implementar.
- Difícil de ajustar.
- Não consigo alocar uma única textura do tamanho do meu nível.
- Eu poderia sobrepor as áreas da grade, mas isso aumentaria a complexidade.
Partículas
Use partículas para simular a água. Durante a renderização usando mistura aditiva e, em seguida, aplique uma função de multiplicação ao canal alfa para obter as bordas nítidas da água.
Prós
- Provavelmente ficará bonito.
- Fácil de implementar.
- Fácil de renderizar.
- Significativo em um sistema multiplayer, embora exija bastante largura de banda para ser transferido.
Contras
- Os efeitos entre partículas provavelmente serão lentos (pesquisa na vizinhança).
- Pode causar vazamento de água através de espaços sólidos (porque o espaço sólido é pequeno, por exemplo, 1px).
- Pode levar a buracos estranhos na água, dependendo do tamanho da partícula.
- Ambos os itens acima podem ser mitigados, permitindo que as partículas se aproximem mais do que seu tamanho real; no entanto, causariam problemas com o desempenho entre partículas e partículas / paisagem.
Alguma idéia adicional?
Nota: Esta é uma aproximação, não estou procurando água fisicamente correta aqui - apenas algo que 'seja bom o suficiente' (pontos de bônus para uma limpeza rápida e suja). O jogo é multiplayer, então, infelizmente, todo o nível precisa ser simulado continuamente.