水/海のシミュレーションと物理学


42

水のシミュレーションに関する参考資料と、それが体(ボート、船、潜水艦など)との相互作用をモデル化する方法を探しています。

私は水の視覚的側面(波、反射など)に関する多くの参考文献を見つけましたが、身体との相互作用の仕方をどう扱うかについてはほとんどありません。ゲーム開発での私の経験は非常に限られており、私は本当にここで立ち往生しています。

基本的には、波に応じて船の位置を変化させたいと思います。これどうやってするの?

私はPanda3Dを使用していますが、利用可能な技術で使用されている技術と実装について聞いてみたいです。

回答:


79

基本的に、船の6つのもののモデリングを検討しています:ピッチ、ヨー、ロール、ヒーブ、スウェイ、サージ。

代替テキスト

ピッチ、ヨー、およびロールは、船が波の傾斜を上下にねじって回転するときに行うことができる回転です。ヒーブ、スウェイ、サージは、波が船を押しのけたり、船が波の表面を滑り落ちることによって引き起こされる動きです。

「丘を走る車のように...」

丘陵地を走る車のように、水上でボートを想像してください。車がなだらかな丘の上を運転する場合(波を通過する船のように)、丘を上下に移動するときに傾斜および角度を付けます。これがピッチ、ヨー、ロールです。丘(波)が大きい場合、車(船)は上下に動き、ピッチング、ヨーイング、ローリングを行います。丘(波)が本当に小さい(車/船よりも小さい)場合、車(船)は、ピッチ、ヨー、ロールではなく、単にそれらの上を走行します。

大きな船は小さな波をすり抜けることができますが、小さな船は波を上下に移動します。私たちの車を例にとると、誰かが自転車(小さな船)に乗って小さな丘(波)を乗り越えていると想像してください。彼らは行くと上下に転がります。その後、誰かが大きなトラック(船)を運転します。トラックは丘よりも大きいので、それらが上を通過するときに実際に上下にピッチングしません。

ただし、車とは異なり、船は水の中にあるため、動きが多少抑えられます。本当に柔らかいスポンジのようなタイヤの車を想像してください。小さな丘の上を走るとき、スポンジのようなタイヤはそれを滑らかにします。船の動きも弱められているので、小さな波は岩だらけの道の車のように上下に跳ね返ることはありません。潜水艦は、潜水時には表面波の影響をほとんど受けないため、一種の究極の減衰船です。しかし、それが表面上にある場合、波によって動かされます。

船は波の上を滑るでしょう。たとえば、波の表面を下る船は前に押し寄せます。したがって、自動車の例を拡張するには、多少滑りやすい路面を走行する大きなスポンジホイールを備えた自動車にします。車がスリップを補うためにエンジンを動かしていない限り、丘の側面を滑り落ちます。エンジンを運転していても、多少のスリップが発生します。

車と丘の例えに問題がある1つの場所は、時間の経過とともに波が形を変えるという事実です。静止した船は、波が上下するにつれて上下に動きます。

船を動かす波

船に沿って吹く風がなく、波が完全な正弦波の形である場合、船は基本的に波の中で揺れ動くためどこにも移動しません。波の表面を上に移動するときに一方の方向にスライドし、波の裏面を下るときに逆方向にスライドします。

ただし、波が対称的でない場合(下の図のように)、波は船を動かします。波の片側は急勾配であるため、船は波の面に押し付けられるだけでなく、その面をすばやく滑り落ちます。しかし、波の緩やかな後部の傾斜はあまり動きません。

代替テキスト

これは、船の動きに影響を与える波の動きと形状の最も完璧なモデルではありませんが、おそらく大まかなシミュレーションには役立ちます。

風の効果

風はまた、波の動きや船の動きとは独立した方法で船を動かします。風の方向と力は、波の方向と力とは異なる場合があります。

浮力

浮力は、船がどれだけ浮くかです。非常に浮力のある船は水面に浮かび上がり、浮力のない船は沈みません。中立的に浮力のある船(潜水艦)は、基本的に水中のどのポイントでも「ホバリング」でき、沈むことも上昇することもありません。船の沈没をシミュレートする場合は、船が負の浮力になると沈み始めます。

浮力は船の動きの減衰にも影響します。極端に浮力のある船は、水面で浮き上がり、波の影響を強く受けます。浮力の低い船は部分的に水没し、それほど影響を受けません。表面に浮かぶピンポンボールと、浮くが部分的に水中にあるリンゴとの違いを考えてください。ピンポンボールは、すべての波の動きで上下に動きます。一方、リンゴはすべての波の詳細に応答するわけではありません。

転覆

ピッチ、ヨー、ロールが何らかの値を超えると、船は転倒します。ひっくり返ると、水で満たされ、浮力が減り、浮かないようになります。

海酔い:o〜

波の動きの方向と平行に移動する船は「トラフ内」にあり、少なくとも私の経験では最も吐き気を催す効果を生み出します:)スムーズな乗り心地-背中に風が吹くように。波とは反対方向に移動している場合、波が「丘」に当たって来るので、かなり厳しい乗り心地になります。しかし、かなりエキサイティングな乗り心地になります!

参考文献

この背後にある科学をカバーする3つの記事があります。これらの記事は、いくつかの洞察を与えてくれるかもしれません。数学と科学に重きを置いていますが、さまざまな要因が何であるかを知ることができます。

記事1:船の横揺れのダイナミクスのモデル化とヒーブおよびピッチとの結合

記事2: 海上船舶のダイナミクスのモデリングとシミュレーション

記事3: 海上船舶のダイナミクスのモデリングとシミュレーション

フィールド調査を行う著者

ここに私が研究船で働いていた20年前の約15があります:)

代替テキスト


13
プロフィールで犬とまったく同じに見える可能性はありますか?:-P
ノタベン

笑私は気づいていなかったことが、...
ティム・ホルト

こりゃ愉快だ !
ブルートリン14年

4

水のシミュレーションはありますか?

私の提案は

  • スプリングで偽造します。水面上の各頂点は、スプリングメッシュに結合されます。片方を引くと、すべてが振動し始めます。x、zモーションを制約し、y(または上下のモーション)のみを許可できます。
  • 異なる振幅と周波数の正弦波を合計することで偽造します。このようなもの:

    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);
       }
    
  • 2D波動方程式をシミュレートします。これはGPUで非常に高速です。Javaアプレットと疑似コードについては、このページを参照してください。また、このバージョンも確認してください。同じですが、さらに簡単です。コード付きの処理スケッチ。

波動方程式simから、波が進む方向(dx、dz)を取得できます。

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

ここで、[x] [z]の波の高さを持つ2D配列

これをボートの位置に追加して波で移動させることができます...私は試しましたが、動きがぎくしゃくするので、単純な3x3ボックスフィルターで滑らかにしました(差/速度dx dzを平滑化)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.