2D粒子を流体としてレンダリングする方法は?


45

流体(水のような)をシミュレートするために、2Dパーティクルを移動する良い方法があるとします。レンダリング方法に関するアイデアはありますか?

これは、このように視点が横から見られる2Dゲーム用です。水は、落下して他のオブジェクトと相互作用するために壊れる可能性のあるボックスに含まれます。私の頭に浮かぶ最も簡単な方法は、各粒子に小さな画像を使用することです。水をレンダリングするより多くの方法を聞くことに興味があります。

回答:


28

GDC2010 でのこのプレゼンテーション(PDF)PixelJunk Shooterがどのように行ったか(シミュレーションを含む)を確認してください。


PixelJunk Shooterイメージのサンプル


1
PixelJunkを知りませんでした...本当に素晴らしいプレ。ありがとうございました!
ルーク

トレーラーへのリンク :)
デヴィッドゴーベイ


SPU、PPU、SPURSとは何ですか?
マーティンコートー

@MartjinCourteaux:それらはPS3のCell CPUの一部です。いくつかの重要な違いはありますが、GPUシェーダーのように考えてください。
ショーンミドルディッチ

12

ゲームで完全にシミュレートされた水が必要な場合、George Duckettの答えははるかに直接的であり、非常によく提示されています。最小限の精度(浅い現実感、より遊び心のある)でシミュレートされた浅海物理学の場合、この画像は私に信じられないほどの明瞭な瞬間を与えました:

http://www.patrickmatte.com/stuff/physicsLiquid/


シンプルで素敵!このような単純な後処理ステップを実際に使用することを考えていませんでした... iPhoneのようなデバイスがこれを処理するかどうか疑問に思います。それは良い出発点のようです。どうも。
ルーク

このアプローチを保証できます。私は一度プロジェクトでそれを使用し、それは美しく働きました。ベベルフィルターを追加すると、ブロブにも素敵なメニスカスを付けることができます。
scriptocalypse

超クール!しかし、私はそれがキャラクターを散歩するのにどれほどうまく適応するかわかりません。すべての球体を片側に押しますよね?
マックス

6

または、すばやく簡単なアプローチ:メタボールを使用してください!

3Dメタボール


5

Grant Kotは、Javascript(canvas)とOpenFrameworksを使用したC ++の両方の実装を使用して、Githubに流体シミュレーションコードの一部を掲載しています。https//github.com/kotsoft

彼は、YouTubeアカウントでいくつかのデモを公開しています:http : //youtu.be/HqWheJSEiaw

私はそれがどのように機能するのか分かりませんが、それは高速で動作し、それを使って構築するあらゆる種類のバリエーションがあることを知っています。検索するのに適したキーワードは「マルチグリッドパーティクル」です。


Grant Kotが流体をシミュレートする方法がとても気に入っています!レンダリングが最小限であっても、少なくともそのWebページのアプレットでは。シミュレーションを制御する多くのパラメーターとして。もっと詳しく見る価値がある。どうも。
ルーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.