5

2D ゲーム用にリアルな流体 (水) を作成することに興味があります。このゲームはテラリアに似ています。衝突するパーティクルの束をシーンに叩きつけ、その上にレンダリングする方法について聞いたことがあります。

Terraria はタイル ベースの水を使用しますが、これはあまり好きではありません。もっと高度なものが必要です。

Bullet 3D physics を使用することを考えました (box2d には限界があります)。非衝突パーティクル エフェクトについては、SPARK のようなものを使用することを考えています。

私が考えている問題は、各ブロックが 16x16 であるため、1600x900 のシーンでは約 5,000 のタイルがあることです。

したがって、これらのタイルが衝突可能であることを物理エンジンに伝える必要があります。もちろん、衝突しないと見なされるボイド タイルもあります。

誰かがこれについてアイデアを持っていますか? 言語は C++ ですが、関連性があるとは思えません。

編集:私は陥没し、グリッドベースの水を使用する必要があると思います. 振り返ってみると、パーティクルベースはすべてをより困難にするだけだと思いますが、何の利益がありますか?

4

1 に答える 1

3

あなたの質問はタイル状の流体に関するものですが、実際には粒子ベースのアプローチについて質問しているようです。

その場合、探しているのは「平滑化粒子流体力学」または SPH です。これは、リアルタイムの状況での 2D および 3D 流体シミュレーションで非常に人気のある手法です。

はい、基本的にはパーティクル システムであり、各パーティクルは環境内の力 (重力、衝突など) に合理的な (数学的に安定した) 方法で応答します。流体は非圧縮性です。

パーティクルが十分にある場合は、パーティクルをポイントとしてレンダリングするか、サーフェスを導出するためのソースとしてそれらを使用できます (たとえば、マーチング キューブを使用しますが、2D ではそれについて心配しません)。

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

コーディングが比較的簡単で、実際に GPU で高速化できるという利点があります。

確かに、ある種のタイルベースのアプローチを試すよりもおそらく優れたアプローチだと思います。スプレーが跳ね上がったり、波がオブジェクトの端を蹴ったりするなど、より興味深い結果が得られます。取得するのはそれほど難しくありません。何か楽しい作業、私はそれを試してみます.

于 2012-12-10T13:09:37.923 に答える