Simulação água / oceano e física

42

Estou procurando algumas referências sobre simulação de água e como modelar sua interação com corpos (como barcos, navios, submarinos).

Eu encontrei muitas referências sobre os aspectos visuais da água (ondas, reflexão, etc.), mas muito pouco sobre como lidar com a maneira como ela deve interagir com os corpos. Minha experiência com o desenvolvimento de jogos é muito limitada e estou realmente preso aqui.

Basicamente, eu gostaria de poder variar a posição de um navio de acordo com as ondas. Como posso fazer isso?

Estou usando o Panda3D, mas espero ouvir sobre as técnicas e implementações usadas em qualquer tecnologia disponível.

Alexandre
fonte

Respostas:

79

Basicamente, você está procurando modelar 6 coisas para um navio: arremesso, guinada, rotação, movimento, oscilação e oscilação.

texto alternativo

Inclinação, guinada e rotação são rotações que o navio pode fazer enquanto gira e gira subindo e descendo a inclinação das ondas. Heave, balanço e oscilação são movimentos induzidos pelas ondas que empurram o navio e / ou o navio desliza pela face de uma onda.

"Como um carro dirigindo em Hills ..."

Imagine um barco na água como um carro dirigindo por um terreno montanhoso. Se o carro passa por colinas ondulantes (como um navio passando por cima de ondas), ele se inclina e se inclina conforme sobe e desce as colinas. Este é o tom, guinada e rolagem. Se as colinas (ondas) são grandes, o carro (navio) vai subir e descer, lançando, guinando e rolando. Se as colinas (ondas) são realmente pequenas (menores que o carro / navio), então o carro (navio) vai passar por cima delas e não tombar, guinar ou rolar muito.

Um grande navio pode simplesmente atravessar ondas menores, enquanto um pequeno navio se move para cima e para baixo nas ondas. Tomando nosso exemplo de carro, imagine alguém andando de bicicleta (pequeno navio) por um conjunto de pequenas colinas (ondas). Eles rolam para cima e para baixo à medida que avançam. Então alguém dirige um grande caminhão (navio) sobre eles. O caminhão é maior do que as colinas, por isso realmente não sobe e desce à medida que passa por cima deles.

Ao contrário do carro, porém, um navio é parte do caminho para a água, então seus movimentos serão um pouco prejudicados. Imagine um carro com pneus esponjosos realmente macios. Quando ele dirige sobre pequenas colinas, os pneus esponjosos apenas suavizam. Os movimentos de um navio também são atenuados, de modo que pequenas ondas não o fazem saltar para cima e para baixo como um carro em uma estrada rochosa. Um submarino é uma espécie de navio amortecido, como quando submerso, é praticamente imune às ondas da superfície. Mas se estiver na superfície, será movido pelas ondas.

Um navio também escorregará nas ondas. Um navio que afunda a face de uma onda avançará, por exemplo. Então, para estender nosso exemplo de carro, faça dele um carro com grandes rodas esponjosas dirigindo em uma superfície um pouco escorregadia. A menos que o carro esteja funcionando com o motor para compensar a derrapagem, ele deslizará pela encosta de uma colina. Mesmo que esteja funcionando o motor, haverá algum escorregão.

O único lugar em que a analogia do carro e da colina tem problemas é o fato de as ondas mudarem de forma ao longo do tempo. Uma nave estacionária balança para cima e para baixo conforme as ondas sobem e descem.

Ondas movendo o navio

Se não houver vento soprando no navio para movê-lo, e as ondas tiverem uma forma perfeita de onda senoidal, então o navio basicamente não se moverá em lugar algum, pois balança nas ondas. Ele desliza para um lado à medida que sobe na face de uma onda, depois desliza para trás na direção contrária à medida que desce para a face traseira de uma onda.

No entanto, se as ondas NÃO forem simétricas (como na figura abaixo), as ondas irão mover o navio. Como um dos lados da onda é íngreme, o navio desliza rapidamente por esse rosto e é empurrado pela face da onda. A suave inclinação das costas da onda, no entanto, não terá muito movimento.

texto alternativo

Este não é o modelo mais perfeito de movimento e forma de onda que afeta o movimento de um navio, mas provavelmente servirá para uma simulação aproximada.

Efeitos do vento

O vento também vai impulsionar o seu navio de maneiras independentes do movimento das ondas ou do navio. A direção e a força do vento podem ser diferentes da direção e da força das ondas.

Flutuabilidade

Flutuabilidade é o quão bem o seu navio flutua. Navios muito flutuantes flutuam alto na água, e aqueles que não são flutuantes afundam. Navios flutuantes neutros (submarinos) podem basicamente "pairar" em qualquer ponto debaixo d'água, nem afundando nem subindo. Se você deseja simular um navio afundando, faça com que ele fique flutuando negativamente e ele começará a afundar.

A flutuabilidade também afeta o amortecimento do movimento do navio. Um navio que é extremamente dinâmico flutua na superfície da água e é fortemente afetado pelas ondas. Um navio menos flutuante será parcialmente submerso e não será afetado tanto. Pense na diferença entre uma bola de pingue-pongue flutuando na superfície e uma maçã, que flutua, mas está parcialmente debaixo d'água. A bola de pingue-pongue balança para cima e para baixo a cada movimento de onda. A maçã, por outro lado, não responde a todos os detalhes das ondas.

Inversão

Se o tom, a guinada e / ou a rotação excederem algum valor, seu navio tombará. Quando tomba, pode encher com água, reduzindo a flutuabilidade, fazendo com que não flutue mais.

Ficando doente do mar: o ~

Um navio que esteja viajando paralelamente à direção do movimento das ondas está "na vala" e produzirá os efeitos mais repugnantes pelo menos na minha experiência :) Se você estiver viajando na direção em que as ondas estão indo, poderá ter passeio suave - como ter o vento nas costas. Se você estiver viajando na direção oposta à das ondas, terá uma viagem bastante dura ao atingir a "colina" de cada onda quando ela chegar. Faz um passeio bastante emocionante embora!

Leitura adicional

Aqui estão três artigos que cobrem a ciência por trás disso, o que pode lhe dar algumas idéias. Embora pesem na matemática e nas ciências, eles podem dar uma idéia do que são os diferentes fatores.

Artigo 1: Modelagem da dinâmica do rolo de navio e seu acoplamento com o Heave e o Pitch

Artigo 2: Modelagem e simulação da dinâmica de navios de superfície marinha

Artigo 3: Modelagem e simulação da dinâmica de navios de superfície marinha

O autor fazendo pesquisa de campo

Aqui estou eu cerca de 15 20 anos atrás, quando eu trabalhei em navios de pesquisa :)

texto alternativo

Tim Holt
fonte
13
Como é possível que você pareça exatamente o mesmo que o cachorro em seu perfil? :-P
Notabene
lol eu não tinha notado isso, mas ...
Tim Holt
Isso é hilário !
BlueTrin
4

Você tem uma simulação de água?

Minhas sugestões são

  • fingir com molas. Cada vértice na superfície da água é acoplado em uma malha de mola. Puxe um para baixo e todos começam a oscilar. Você pode restringir o movimento x, z e permitir apenas y (ou movimento para cima / para baixo)
  • falsifique-o somando ondas senoidais de diferentes amplitudes e frequências. Algo assim:

    rez = 32;
    for(i=-rez; i<rez; i++)
       for(j=-rez; j<rez; j++)
       {
          yofs = 0;
          yofs += 1.0 * sin( t + j*0.5 + i*0.125);
          yofs += 2.0 * sin( t + (rez-j)*0.125 + i*0.25 );
          yofs += 2.0 * sin( t + (j)*0.125 + (rez-i)*0.125 );
          yofs += 0.5 * sin( t + (rez+j)*0.125 + (rez+i)*0.125 );
          glVertex(i/rez, yofs, j/rez);
       }
  • simular a equação da onda 2D, isso pode ser muito rápido na GPU. Veja esta página para obter um applet java e algum pseudo-código . Verifique também esta versão, a mesma, mas ainda mais simples. Um esboço de processamento com código.

Na equação da onda sim, você pode obter a direção (dx, dz) da onda que está viajando

dx = h[x-1][z] - h[x+1][z] 
dz = h[x][z-1]- h[x][x+1] 

onde ha matriz 2D com a altura da onda em [x] [z]

Você pode adicionar isso à posição dos barcos para fazê-lo viajar com a onda ... Eu tentei, mas o movimento ficou instável, então eu o alisei com um simples filtro de caixa 3x3 (suavizando as diferenças / velocidades dx dz)

Torbjørn
fonte