7

ハイトマップ上を移動する流体の量を概算する方法を探しています。私が考えることができる最も簡単な解決策は、小さな直径(<0.1m)の多数の描画されていない球として近似することです。次に、水面を表す目に見える平面を、球体の「上」の静止位置に配置します。私の知る限り、管理された物理エンジンには流体シミュレータが組み込まれていないため、質問があります。

実装には、球体の動きをシミュレートできる JigLibX などの物理エンジンを使用する必要があります。平面の高さを決定するために、グループの最上層にある各球体の最大高さを平均することを考えていました。

パフォーマンスが優れているとは思いませんが、リアルタイムで親しみやすいでしょうか? そうでない場合、このシミュレーションを使用して、動線を事前にベイクできますか?

これが理にかなっていることを願っています。これが実現可能かどうか、またはこれにアプローチするより良い方法があるかどうかについて、意見/提案が本当に欲しいです。

助けてくれてありがとう、ヴェナトゥ

(関連する場合、私のターゲット プラットフォームは C# を使用する XNA 4.0 です。現時点では Windows のみであるため、PhysX/Havok はシミュレーションの可能性がありますが、管理されたソリューションを好むでしょう)

4

2 に答える 2

2

私はまだ PhysX のようなものを使わずに現実的な流体力学をリアルタイムで見たことがありません - おそらく必要な計算が非常に複雑だからです! 私が見ているあなたのアプローチの問題は、これらすべての球体が落ち着いたときに静止接触することで発生し、多くの処理能力を消費します。多くの静止接点は、最も強力なデスクトップ上でさえ、パフォーマンスを非常に迅速に侵食することで有名です.

このルートをたどる場合は、ばねベースの物理学を使用して、流体を弾力性があるが固体としてモデル化することをお勧めします。この場合、水の一部に加えられた力は、ばねを使用して残りの部分に伝播します。これにより、スプリングのブレーク ポイントを設定し、それが発生したときにボディを 2 つ以上のボディに分離するオプションが提供されます (元に戻る場合はその逆です)。これにより、スプレーなどの基礎が得られます。また、モデルを近似するために使用するパーティクルとスプリングの数を選択できるため、パフォーマンスの点でより用途の広いアプローチでもあります。

これは大きくて複雑なトピックですが、少なくともいくつかの洞察が得られたことを願っています!

于 2011-08-05T22:42:25.027 に答える
1

リアルタイムで流体をシミュレートする最も一般的な方法は、平滑粒子流体力学です。

いくつかの便利なリンク:

http://en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics

http://http.developer.nvidia.com/GPUGems/gpugems_ch38.html

http://www.plunk.org/~trina/thesis/html/thesis_toc.html

シミュレーション自体に加えて、スイープ アンド プルーンやハッシング セルなど、特殊なブロード フェーズの衝突検出アルゴリズムも必要になります。

おっしゃる通り、流体力学の完全な 2 次元ソリューションはありません。

于 2011-08-19T12:46:28.433 に答える