Physique et simulation eau / océan


42

Je cherche des références sur la simulation de l'eau et sur la manière de modéliser son interaction avec des corps (comme des bateaux, des navires, des sous-marins).

J'ai trouvé beaucoup de références sur les aspects visuels de l'eau (ondes, réflexion, etc.), mais très peu sur la manière de gérer la manière dont elle devrait interagir avec les corps. Mon expérience en développement de jeux est très limitée et je suis vraiment coincé ici.

En gros, j'aimerais pouvoir faire varier la position d'un navire en fonction des vagues. Comment puis-je faire ceci?

J'utilise Panda3D, mais j'espère entendre parler des techniques et des implémentations utilisées dans toutes les technologies disponibles.

Réponses:


79

Fondamentalement, vous envisagez de modéliser 6 choses pour un navire: tangage, tangage, roulis, soulèvement, balancement et surtension.

texte alternatif

Le tangage, le mouvement de lacet et le roulis sont des rotations que le navire peut effectuer lorsqu'il tourne sur lui-même et monte et descend la pente des vagues. Le soulèvement, le balancement et la surtension sont des mouvements induits par les vagues qui poussent le navire et / ou qui glissent le long d’une vague.

"Comme une voiture qui roule sur des collines ..."

Imaginez un bateau sur l'eau comme une voiture roulant sur un terrain accidenté. Si la voiture roule sur des collines (comme un bateau sur des vagues), elle va s'incliner et s'incliner à mesure qu'elle monte et descend. C'est le tangage et le roulis. Si les collines sont grandes, la voiture va monter et descendre en tanguant, en lacet et en roulant au fur et à mesure. Si les collines (les vagues) sont vraiment petites (plus petites que la voiture / le navire), la voiture (le navire) va simplement les traverser et ne pas tanguer, rouler ou rouler beaucoup.

Un grand navire ne peut que traverser de petites vagues, alors qu'un petit navire montera et descendra les vagues. Prenons l'exemple de notre voiture. Imaginons quelqu'un qui fait du vélo (petit bateau) sur une série de petites collines (vagues). Ils vont rouler comme ils vont. Puis quelqu'un conduit un gros camion (bateau) sur eux. Le camion est plus grand que les collines, il ne faut donc pas vraiment monter et descendre lorsqu'il passe au-dessus d'eux.

Contrairement à la voiture cependant, un navire est à mi-chemin dans l'eau et ses mouvements vont donc être quelque peu amortis. Imaginez une voiture avec des pneus spongey vraiment mous. Quand il roule sur de minuscules collines, les pneus spongey l’aplanissent. Les mouvements d'un navire sont également amortis, de sorte que de petites vagues ne le feront pas rebondir comme une voiture sur une route rocheuse. Un sous-marin est en quelque sorte le navire amorti ultime, car une fois submergé, il est pratiquement à l’abri des vagues de surface. Mais si c'est à la surface, ça va être déplacé par les vagues.

Un navire va également glisser sur les vagues. Un navire en train de déferler face à une vague fera un bond en avant, par exemple. Donc, pour étendre notre exemple de voiture, faites-en une voiture avec de grosses roues en mousse menant sur une surface un peu glissante. À moins que la voiture ne tourne le moteur pour compenser le glissement, elle va glisser sur le flanc d'une colline. Même si le moteur tourne, il y aura des glissades.

Le seul endroit où l'analogie voiture / colline présente des problèmes est le fait que les vagues changent de forme avec le temps. Un navire en stationnement va et vient à mesure que les vagues montent et descendent.

Vagues déplaçant le navire

S'il n'y a pas de vent sur le navire pour le déplacer, et que les vagues ont une forme sinusoïdale parfaite, le navire ne bougera pas fondamentalement, car il est secoué par les vagues. Il glisse dans un sens quand il monte le visage d'une vague, puis dans l'autre sens lorsqu'il glisse sur le dos d'une vague.

Cependant, si les vagues ne sont pas symétriques (comme sur l'image ci-dessous), elles bougeront le navire. Parce qu'un côté de la vague est raide, le navire va glisser rapidement sur cette face et être poussé par la face de la vague. La pente douce de la vague n’aura cependant pas beaucoup de mouvement.

texte alternatif

Ce n'est pas le modèle le plus parfait du mouvement et de la forme des vagues affectant le mouvement d'un navire, mais il conviendra probablement pour une simulation approximative.

Effets du vent

Le vent va également pousser votre vaisseau de manière indépendante du mouvement des vagues ou du bateau. La direction et la force du vent peuvent être différentes de la direction et de la force des vagues.

Flottabilité

La flottabilité est à quel point votre navire flotte. Les navires très flottants flottent haut dans l’eau, et ceux qui ne sont pas flottants coulent. Les navires (sous-marins) neutres à la flottabilité peuvent fondamentalement «planer» à n’importe quel point sous l’eau, sans couler ni se lever. Si vous voulez simuler un navire en train de couler, faites-le devenir négativement flottant et il commencera à couler.

La flottabilité influe également sur l’amortissement du mouvement du navire. Un navire extrêmement flottant fera des vagues sur la surface de l'eau et sera fortement affecté par les vagues. Un navire moins flottant sera partiellement submergé et ne sera pas autant affecté. Pensez à la différence entre une balle de ping-pong flottant à la surface et une pomme, qui flotte mais est partiellement submergée. La balle de pingpong monte et descend à chaque mouvement de vague. La pomme, par contre, ne répond pas à tous les détails de la vague.

Chavirement

Si le tangage, le roulis et / ou le roulis dépassent une certaine valeur, votre navire va basculer. Quand il bascule, il peut se remplir d’eau, ce qui réduit la flottabilité, le faisant ainsi ne plus flotter.

Tomber malade: o ~

Un navire qui se déplace parallèlement à la direction des vagues est "dans le creux" et produira les effets les plus nauséabonds au moins de mon expérience :) Si vous voyagez dans la direction des vagues, vous pouvez avoir une douceur de roulement - comme avoir le vent dans le dos. Si vous voyagez dans la direction opposée à celle des vagues, vous ferez une dure virée car vous frapperez chaque vague de "colline" à mesure qu’elle s’attaque à vous. Fait pour un tour assez excitant cependant!

Lectures complémentaires

Voici trois articles qui couvrent la science derrière cela, ce qui pourrait vous donner quelques idées. Bien que lourds en mathématiques et en sciences, ils pourraient vous donner une idée de ce que sont les différents facteurs.

Article 1: Modélisation de la dynamique de roulis des navires et de son couplage avec soulèvement et tangage

Article 2: Modélisation et simulation de la dynamique des navires de surface en mer

Article 3: Modélisation et simulation de la dynamique des navires de surface en mer

L'auteur faisant des recherches sur le terrain

Voici moi il y a environ 15 à 20 ans lorsque j'ai travaillé sur des navires de recherche :)

texte alternatif


13
Comment est-il possible que vous ayez exactement la même apparence que le chien dans votre profil? :-P
Notabene le

lol je n'avais pas remarqué cela mais ...
Tim Holt

C'est hilarant!
BlueTrin

4

Avez-vous une simulation d'eau?

Mes suggestions sont

  • simulez avec des ressorts. Chaque sommet de la surface de l’eau est couplé dans un maillage de source. Abaissez un et ils commencent tous à osciller. Vous pouvez limiter le mouvement x, z et n'autoriser que y (ou mouvement haut / bas)
  • simulez-le en additionnant des ondes sinusoïdales d'amplitudes et de fréquences différentes. Quelque chose comme ça:

    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);
       }
    
  • simuler l'équation d'onde 2D, cela peut être très rapide sur le GPU. Voir cette page pour une applet Java et un pseudo-code . Vérifiez également cette version, la même mais encore plus simple. Une esquisse de traitement avec du code.

À partir de l'équation d'onde sim, vous pouvez obtenir la direction (dx, dz) de la vague se propageant dans

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

où ha tableau 2D avec la hauteur de la vague à [x] [z]

Vous pouvez ajouter ceci à la position du bateau pour le faire voyager avec la vague ... J'ai essayé, mais le mouvement devient saccadé, alors je l'ai lissé avec un simple filtre de boîte 3x3 (lissant les différences / vitesses dx dz)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.