Unityで簡単に機械学習を用いた流体表現が可能な「Zibra Liquids」
現代の3DCGを用いたゲームにリアリティを持たせるのに重要な役割を果たすのが川や海、水たまりといった流体の表現です。ゲームにおいて流体の表現をするにはいくつかの方法があり、例えば、二次元のポリゴン上で疑似的に波動方程式を解いたり、シェーダーなどを用いてそれらしい屈折を当たるなどの様々な技法が用いられています。
これらの表現を全て自作でやろうとすると数値計算やGPUによる並列処理、メッシュ生成に伴う幾何学など、非常に多くの知識が必要となり、大変です。今回は特に3次元上でインタラクション性を持った流体を表現する際に用いられる流体シミュレーションをUnity上で簡単に利用することができるZibra Liquidsを紹介します。
Zibra LiquidsはZibra AIによって提供されるGPUを用いた流体表現用のUnity向けプラグインで、多くのパラメータによって制御可能な3次元の流体シミュレーション及びメッシュ生成を行うものです。
Zibra Liquidsの各設定はUnityのインスペクタを通して行うことが出来て、Emitter(粒子の放出元)、Void(粒子が消滅する場所)、障害物などをUnity上で配置していくことによって簡単に流体シミュレーションの設定を作ることができます。
設定可能なパラメータは多岐にわたり、シミュレーションの精度から、流体の性質、シミュレートした流体をどのようにレンダリングするのかについてまで、流体シミュレーションのシステムを直接に理解する必要なく簡単に設定することができます。
障害物と流体の衝突判定については、機械学習ベースで事前に生成した距離関数と呼ばれる関数に沿わせてGPUベースのパーティクルを動かすシステムを採用しており、Unityエディタ上で事前のベイクが必要になるもののかなり高速に流体シミュレーションを行うことができます。また、障害物の位置の変更など簡単な変化についてはラシミュレーション実行中でも反映させることが可能となっており、若干カクつくものの比較的柔軟にシミュレーションの環境を変化させることができます。
Zibra Liquidsでは流体シミュレーションだけでなく、流体とその他オブジェクトのインタラクションについても表現することが可能となっているため、例えば激流に流される丸太や、オブジェクトによって枝分かれする水流などの表現を行うことができます。
Zibra Liquidsはまだ開発中のプロジェクトで、最終的にはUnityAssetStoreにてリリースするとのことです。現在βテスト向けのパッケージなどの頒布は停止していますが、詳しい情報や開発の様子を知りたい方は、ぜひ公式サイトからDiscordサーバに参加してみると良いかもしれません。
Zibra.aiの公式サイトはこちら