流体と気体をモデル化できる2D物理エンジンはありますか?[閉まっている]


20

この時点で、プラットフォームとプログラミング言語は関係ありません。このために何かが存在するかどうかを知りたいだけです。どんな助けも大歓迎です。


カスタム2D流体エンジンを実装しました。粘弾性流体に関するこの論文と、Flui°D°emoのコードをテンプレートとして使用して、実用的な例を得ることができました。ただし、流体は私が望むほど安定しておらず、コードは多くの最適化の愛(マルチコア処理、キャッシュの使いやすさなど)を使用できます。私が欲しいのは、すでにすべてのことを行っているライブラリです。そのため、Box2dとゲームに統合するだけで済みます。
deft_code

回答:


8

Q-GamesがPixeljunk Shooterに使用したものを調べてください。それはかなり複雑な流体物理学を持つ2Dゲームです。彼らが自家製またはミドルウェアの物理エンジンを使用したかどうかはわかりませんが、情報はおそらくどこかにあるでしょう。


8
独自のエンジンを使用していますが、任意の物理エンジンを使用してカスタムコードに適用できる手法が含まれています。実際に(ここではスライド:GDCで彼らの流体力学について非常に有益な講演を行ったgdcvault.com/play/1012447/Go-With-the-Flow-Fluid
ゴースト

6

さて、私はこれを検討していませんが、ほとんどすべての物理エンジンがアイデアをエミュレートできるという事実を知っています。Box2Dなど

基本的に、粒子が跳ね回ったり、表面から離れたり、互いに離れたり(ガスに対しては速い)しますが、一定の重力のような効果も与えます(液体はすべて同じですが、一部のガスはゆっくりと上昇させることができます)。

外側の粒子をリンクすると、質量を表す多角形が得られます

または

単純に各粒子の上にピクセルまたは粒子のグラフィックを描画すると、代わりに質量のクラウド効果を実現できます。


4
この答えは、実用的なサイズのリアルタイムゲームには適していません。
AttackingHobo

3
流体力学は非常に多くの場合粒子としてモデル化されるため、なぜそう言うのかわかりません。例については、youtubeの流体粒子に関するnvidiaの技術ビデオ、Algodoo(以前のPhun)プログラム、またはQ-GamesがPixelJunk Shooterゲームについて語ったトーク(gdcvault.com/play/1012447/Go-With-the-フロー流体)。後者の場合、Q-Gamesはパーティクルの集合からポリゴンを構築する方法を示します。これは、この答えがリアルタイム実装IMHOに非常に有効であることを検証すると思います。
ゴースト

うわー、なぜダウン投票するのですか?私は荒れ狂っていません、ただ理由を知りたいです。これは現実的な手法であり、使用されています。
ジョエル

分子レベルで流体を説明しているように聞こえる「表面を飛び跳ねる粒子(ガスの場合は速い)」。素朴なアプローチはベイクドシミュレーションでは機能しますが、リアルタイムゲームではうまく機能しません。長いタイプのシミュレーションが正しい限り、パーティクルは問題ありません。「バウンドアラウンド」はマクロパーティクルで動作するようです。また、密度をシミュレートする方法を著しく誤って伝えました。
AttackingHobo

Particlesはen.wikipedia.org/wiki/Smoothed-particle_hydrodynamicsで十分に機能します。directtovideo.wordpress.com/2011/05/03/numb-resで説明されているように、FLT:sの最新のデモで使用されていました。この実装は少し重いかもしれませんが、Pixel Junk Shooter GDCトークのように簡単に近似できます。
ボイド

6

具体的に流体を扱う唯一のライブラリは、Fluidicです。ただし、かなりアルファ版であり、リリースは1つだけです。物理ライブラリBulletは、流体のモデリングに使用される手法である「平滑化粒子流体力学」をサポートしています。ライブラリは3D向けですが、1つの軸に制約を適用して2Dで機能させることもできます。

私の推奨事項は、他の回答に関するいくつかのコメントですでに述べたように、Box2DやChipmunkなどの標準的な物理エンジンを使用し、いくつかの円を使用して水(重力あり)または気体(重力なし)をモデル化し、これらを組み合わせることです1つの水またはガスのボディに。粘性をシミュレートできるように、個々のボディにいくつかの制約を適用して、それらを「塊にする」ことができます。見ていこのビデオ(ビデオでは正方形としてモデル化)、個々の体がどのように連携するかを確認するが。ただし、このビデオで使用されている手法は、この段落で説明した手法とは異なります。このビデオを使用して、円が互いにどのように相互作用するかを把握し、使用する物理ライブラリに存在する制約でこれを模倣しようとすることができます。

おもしろいのは、複数の円を水域に結合する場合です。私が思いつく最も簡単な解決策は、各円をメタボールとして描画して、より大きな体の一部として表示することです。ここで、これらのボディの背後にある数学といくつかのサンプルコードを見つけることができます。


あなたがリンクしたビデオは、単にたくさんのサークル以上のものを使用しています。彼はSPHとして知られる手法を使用しています。Flui °D°emoブレイズポートは、Box2dを使用して衝突を検出し、力を適用しますが、SPHメソッドを使用してBox2dの剛体ではなく力を計算します。
deft_code

あなたはその点で絶対に正しいです。このビデオは、実装例ではなく例証を目的としたものです。私の間違いについてお話しいただきありがとうございます。さらなる誤解を防ぐために回答を更新しました。
ゴースト

3

この質問が投稿されてから数年が経ちましたが、検索中に出くわしたので、更新するつもりでした。

GoogleはBox2Dシステム用のLiquidFun(オープンソース)をリリースしました。いくつかの制限がありますが、液体、砂などのパーティクルをかなりまともなパフォーマンスで始めるための簡単な方法です。

https://github.com/google/liquidfun

PixelJunkには素晴らしいアプローチがありますが、プライベートライブラリです。彼らは、GCD 2010での講演で驚くべき詳細レベルを共有しました。

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