2D雨の作成(および流体力学)


11

私は私のゲームで気象条件を実験していますが、Starboundが雨を処理する方法に感銘を受けました。基本的に、雨が地面に当たると、それは水平方向に分散して(そして地面に吸収されて)、または(雨滴が地面の穴の中に落ちたときに)水の山を作成します。

このビデオはこれを明確に示しています:http : //imgur.com/gallery/CKCGKbG

私は雨を降らせて、それが地面に当たる場所を確認する方法を知っていますが、それが私が行き詰まるところです。私の質問は、これはどのように作成されたのでしょうか?そして、パフォーマンスを損なうことなく、水流をどのように完璧にモデル化できるでしょうか?

前もって感謝します!


1
重要なのは流体力学システムです。雨滴が地面に当たると、その位置に少量の水が生成され、通常どおり流体力学システムによって処理されると思います。平らな表面では蒸発によって打ち消されますが、傾斜によって水がエリアに集中すると、流入が蒸発よりも強くなり、水たまりが形成され始めます。
Philipp、

回答:


9

Starboundの水システムは、実際には2Dタイルベースのセルオートマトンです。フロントタイルレイヤーを含まない画面上の各タイルは、水を保持できます。水の量はセルオートマトンによって計算されます。

このテクニックの詳細はこちら:

http://www.gamasutra.com/view/feature/134736/an_intro_to_cellular_automation.php

http://www.jgallant.com/2d-liquid-simulator-with-cellular-automaton-in-unity/

雨粒は粒子です。彼らは主に、実際には空から水が流れ落ちているという偽物に役立ちます。水がたまるのは、現在雨が降っていることをゲームが知っているからです。個々の滴は、実際の水のプールの形成とは関係ありません。

彼らがそれを蓄積させる方法は、地面の最上層に穴がある場所を決定することです。水を蓄積できる領域がある場合、その領域のセルはそれに応じて水位を増加させます。

Starboundは水圧も扱い、そのレンダリング手法はかなり驚くべきものです。彼らは、私が今まで見たセルオートマトンを使用した水シミュレーション物理学の最高の2D実装を持っています。

これは、上記のセルラーオートマトンテクニックを利用した、液体物理エンジンの基本的なビューです。水は数値で表されるため、レンダリング部分はもう少し複雑になります。

http://www.jgallant.com/images/pressuretest.gif

この例では、非常に単純な改善は、タイルの下に水が1単位未満の水セルを非表示にして、その下に固体タイルがない場合です。しかし、あなたは水の流れを隠しています。それを非表示にする代わりに、水がどのように流れているかを判断し、適切なウォータースプライトをその場所に描画する必要があります。


2
雨粒が水の落下効果を偽造しているという事実に加えて、表面に小さな水しぶきも実際の雨粒とは関係なく、別の効果です。組み合わせにより、液滴が水しぶきを作るように見えます
Felsir

うわー、まさにそれが私が探していたものです。粒子に基づく非常に複雑な流体システムに頼らなければならないと思いましたが、グリッドシステムも同様に機能しているようです。しかし、水圧を追加するには、圧力値を格納し、高圧から低圧の場所に流れる2番目の配列が必要なだけでしょうか。もしそうなら、それはそれでもコンピュータにとってそれほど難しくないはずです。
Pandaqi 2016年

いいえ、圧力に関係する必要があるのは、タイルに1ユニット以上の液体を含めることができるなどのルールを追加することです。そのタイルに液体のフルユニットが1つ以上あり、通常のルールセットに従ってフローできない場合は、上にフローさせます。そのタイルの圧力値に基づいて、より多くの水が流れるように調整します。
jgallant

3

これに対処する方法はたくさんあります。いつものように

そして、私は1つの方法がこの方法であろうと思います。地面とウォーターボックスはレイヤーで描画されるため、地面が最初に表示され、その後ウォーターボックスが表示されます。

水滴が地面のくぼみに当たるたびに、ウォーターボックスに1つ追加します。ウォーターボックスがマジックナンバーに達したら、水を入れます。つまり、ディップに10滴の土地があるとすると、ウォーターボックスに1行追加されます。

つまり、ウォーターボックスが32X32ピクセルだとします。0、31〜31、31から1行の水彩画を追加します。さらに10滴、0,30-31,30の線を引きます。したがって、水滴が蓄積するにつれて、ウォーターボックスを底からいっぱいになるまで積み上げます。

それが理にかなっていると思います。

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