A tecnologia para simular fluidos, fogo e fumaça em tempo real
(andrewkchan.dev)- Notas e código-fonte (GitHub) sobre a matemática, os algoritmos e os métodos envolvidos na simulação em tempo real de fluidos como fogo e fumaça
1. Simulação de fluidos
- Antes de simular fogo, é preciso simular fluidos
- Se assumirmos que o fluido é incompressível e não viscoso, o problema fica muito mais simples
1.1 Dinâmica básica dos fluidos
- Um fluido preenche uma região DDD do espaço, e no tempo ttt a velocidade do fluido é u(x,t)
- O campo de velocidade 2D u pode ser representado em uma grade N×N
- O que acontece se soltarmos uma gota de corante no fluido?
- Definimos um campo escalar ψ(x,t) que representa a densidade do corante, e o fato de ele se mover pela velocidade do fluido é chamado de advection
- O Naive Method para calcular a advection move cada ponto da grade e atualiza o ponto de grade mais próximo, mas é difícil de paralelizar e instável
Equação diferencial parcial para advection
- Para derivar a advection de forma estável, é necessária uma expressão explícita em PDE
- A massa total de corante dentro de uma região espacial fixa WWW é ∫WψdV, e a variação dessa massa ao longo do tempo é ddt∫Wψ(x,t)dV
- Pela lei de conservação da massa, temos ddt∫WψdV=−∫Sψu⋅ndA
- Aplicando o teorema da divergência, obtemos ∫W[∂ψ∂t+∇⋅(ψu)]dV=0 e, para uma sub-região unitária W=dV, temos ∂ψ∂t+∇⋅(ψu)=0
- Isso fornece a PDE explícita que precisamos resolver
Método estável para advection
- Observando a eqn. (1) de perto, o lado direito é a derivada direcional na direção de −u
- Esse método, chamado de advection semi-Lagrangiana, foi inventado por Jos Stam em 1999
- Como cada ponto da grade é atualizado apenas uma vez, ele é muito fácil de paralelizar e incondicionalmente estável
1.2 Equações de Navier-Stokes
- Encontramos um modelo para como as propriedades escalares do fluido evoluem ao longo do tempo, mas e o próprio escoamento do fluido?
- As equações de Navier-Stokes definem como o campo de velocidade u em qualquer ponto do fluido muda com o tempo
- Como assumimos que o fluido não é viscoso, μ=0, e também podemos ignorar por enquanto as forças externas
- Portanto, restam apenas dois termos: self-advection e pressão
- Se calcularmos numericamente esses termos a cada passo de tempo e os somarmos, podemos simular o fluido
Resolução da pressão
- Como não sabemos se o novo campo de velocidade satisfaz a restrição de incompressibilidade, o termo de pressão p deve corrigi-lo
- Para isso, precisamos resolver a equação de Poisson
- Para resolver a equação de Poisson, podemos usar algoritmos iterativos como o método de Jacobi
- O método de Jacobi pode ser executado em paralelo na GPU, então sua implementação é muito simples
Resumo: simulação de Navier-Stokes
- A matemática de Navier-Stokes pode ser um pouco complexa, mas simular fluidos resolvendo as equações pode ser resumido a alguns procedimentos principais de atualização
1.3 Confinamento de vorticidade (Vorticity Confinement)
- Usar uma grade para armazenar o campo de velocidade é muito conveniente, mas ao interpolar os valores entre os pontos da grade ocorre um suavizamento numérico indesejado
- Isso faz com que os redemoinhos turbulentos do escoamento desapareçam, resultando em um fluxo de fluido excessivamente suave e geralmente "sem graça"
- O confinamento de vorticidade é um processo para amplificar essa vorticidade perdida
- O confinamento de vorticidade foi projetado para resolver campos de escoamento muito complexos, como os das pás de helicópteros
- A vorticidade é calculada em cada ponto tomando o rotacional de u, e para amplificá-la adiciona-se um fluxo circular em cada ponto
Turbulência com Curl-Noise
- Curl noise é um método semelhante ao confinamento de vorticidade, mas em vez de medir e amplificar a vorticidade do campo de velocidade, ele usa uma função de ruído para criar desde o início um campo escalar de vorticidade
- Fluidos muito rápidos e altamente turbulentos são os que mais se beneficiam do confinamento de vorticidade e do curl noise
2. Simulação de fogo
- Para simular fogo e fumaça, é preciso adicionar canais que representem combustível e temperatura, e modelar a combustão do combustível para gerar calor
- Também é necessário tratar a subida das partes mais quentes do fluido de acordo com um modelo de empuxo térmico e renderizar as chamas corretamente
2.1 Modelo básico de combustão
- Quimicamente, o fogo surge devido à reação de oxidação de um material combustível, liberando calor e luz
- Definimos um campo escalar ρ que representa a densidade do combustível e um campo escalar T que representa a temperatura
- O combustível queima e adiciona temperatura ao sistema, e a temperatura se difunde das regiões quentes para as frias
- A convecção térmica é definida pela combinação desses dois processos, e já temos um modelo matemático para isso: advection!
Opinião do GN⁺:
- Este texto explica o processo complexo de simular em tempo real fluidos como fogo e fumaça, um tema muito importante em computação gráfica e desenvolvimento de jogos.
- Com os avanços recentes das GPUs, passou a ser possível processar simulações complexas de fluidos em tempo real, o que contribui para criar jogos visualmente atraentes e efeitos especiais em filmes.
- O texto aborda conceitos matemáticos avançados, como as equações de Navier-Stokes e o confinamento de vorticidade, oferecendo informações úteis para engenheiros de software iniciantes interessados nessa área.
1 comentários
Comentários do Hacker News