Unreal Engine 5 にはリアルタイムで流体のエフェクトをシミュレーションするツール セットが含まれています。
アーティストが使いやすいようデザインされたこのツールセットは、さまざまな GPU ベースのシミュレーターや再利用可能なモジュールが含まれており、データ構造は堅牢で、すべて Niagara エディタ内で使用することができます。上級ユーザーは、幅広い公開パラメータを活用して、ニーズに合わせてシミュレーションを修正できます。
流体シミュレーション システムは、ゲームやシネマティクスで使用可能なリアルタイム環境のための複雑な流体エフェクトを生成するようデザインされています。システムは、さまざまなユース ケースを対象として、フリップブック テクスチャに複雑なシミュレーションをベイクするためにも使用できます。
対象ユーザー
これらのさまざまな流体 (ガスと液体) シミュレーターは、グラフィック リサーチャーからエフェクトアーティストなど、あらゆるユーザーに向けて役立つ機能を提供するものです。次は、これを適用できる役割別のユースケースです。
エフェクト アーティスト
- 特定のゲーム要素やシネマティック ショットに向けてマップ内にシステムを迅速に配置する。
- ブループリントを介してアクタによって公開されたさまざまなユーザー パラメータを編集、キーフレーム化、または駆動する。
- 目的の外観を得るためにいくつかのシステム パラメータを調整する。
- 適切なフォース (力) とコリジョン オブジェクトを追加して、流体をワールドに反応させる。
- 流体ソルバへの流体の注入方法にシンプルな変更を加える。
エフェクト デベロッパー
- 目的の外観を得るために、事前定義されたテンプレートからカスタム システムをビルドする。
- 新しいフォース、ソーシング方法、またはカスタム境界条件を組み込む。
- システム内の流体エミッタおよびソーシング エミッタにモジュールを追加したり、既存のモジュールを変更したりする。
- 特定のシステムのパフォーマンスを向上するために、プロファイリングしたり変更を加えたりする。
- チームのアーティストに向けた支援を強化するために、システムを構築または変更して、ユーザー パラメータを公開する。
R&D デベロッパー
- ベース エミッタを拡張するために、HLSL シェーダー コードを記述して複雑な流体動作をデザインする。
- 既存のモジュールを変更または置き換えることで、シミュレーション アルゴリズムのすべての側面を変更する。
- 新しいアルゴリズムを試して、これらを Niagara エディタまたはマップで簡単にテストする。
- 新しいシステムをビルドして、ユーザー パラメータと概要ビューを使ってパラメータをパッケージ化する。
流体シミュレーションの重要なコンセプト
概要
流体シミュレーションは、ガスや液体などの流体の動きを表すデータをアルゴリズムによって生成するプロセスです。このシミュレーション データは、使用するアルゴリズムによってグリッドまたはパーティクルとして表すことができます。
Unreal Engine の流体シミュレーション システムではグリッドを使ってガスを、パーティクルとグリッドを併用して液体をシミュレートします。
グリッド
ガスのシミュレーションはグリッドで表され、各セルはその場所での媒体の密度、温度、速度を表すデータを含みます。グリッド セル サイズが小さいほど高品質なシミュレーションになりますが、品質向上は計算コストの上昇を伴います。
煙のシミュレーションをレンダリングする場合は、一般的に密度グリッドを視覚化しています。密度が高い領域は低い領域より不透明です。炎のシミュレーションも同様に機能し、温度が各グリッド セルの炎の色を制御します。炎のシミュレーションでは、温度が高くなると浮力によってガスの上昇が早くなります。
流体の運動
リアルな動きで流体をシミュレーションするための主要な要素の 1 つは、「圧力の解決」のプロセスです。この手法では、流体がオブジェクトの周りを正しく流れ、リアルな旋回運動が起こるように立てられた連立方程式を解きます。
このシミュレーションには反復プロセスが含まれ、イテレーションが多いほどシミュレーションの精度は向上しますが、計算コストは高くなります。「圧力の解決」の手法は、シミュレーションに加えられた力に影響し、その効果を減退する場合がある点に注意してください。
コリジョン オブジェクト
流体を近くのオブジェクトに反応させるためには、まず「境界条件」と呼ばれるものを設定しなければいけません。
シミュレーションの境界条件の設定では、シミュレーション領域内のオブジェクトがある領域をマスクして、流体が同じ空間を占有できないようにします。このコリジョン オブジェクトはシーン内で移動でき、その速度は周りの流体を移動するのに使用します。
一般的な例としては、液体の中にオブジェクトが落下し、オブジェクトの周りに水しぶきや波紋が発生するというものがあります。システムはスタティック メッシュ、ジオメトリ コレクション、深度マップなど多くのオブジェクトタイプをコライダーとして使用できます。
液体
Niagara Fluids は、流水などの液体のシミュレーションに FLIP (Fluid-Implicit-Particle) と呼ばれるハイブリッド パーティクル & グリッド アルゴリズムを使用します。このシステムでは、流体の速度はグリッド上で解かれ、サンプリングして流体の形状を表すパーティクルに戻します。
ガスと液体のシミュレーションには類似点がいくつかあるため、コリジョン オブジェクトと流体の運動のセクションは液体にも適用されることに注意してください。
Niagara のコンセプトのポイント
すべての流体シミュレーターは Niagara エディタからアクセス可能で、Niagara のさまざまな機能を利用します。
Niagara VFX システムの詳細については、こちらのドキュメント を参照してください。
グリッド データ インターフェース
Grid 2D Collection と Grid 3D Collection は、それぞれ 2D と 3D のグリッドに名前付き属性を格納するためのデータ インターフェースです。これは、流体を解くときに必要なすべての計算に使用されます。
シミュレーション ステージ
ガスまたは液体シミュレーション アルゴリズムについては、Unreal Engine の流体シミュレーション システムにより、次のステップに進む前にすべてのグリッド セルが確実に処理されます。システムでは、このために シミュレーション ステージ と呼ばれる機能を Niagara 内で使用します。シミュレーション ステージは、ステージの Num Iterations 属性を変更することで、次のステージに進む前に複数回実行することができます。
再利用可能なモジュール
流体の動作の大部分はモジュールで定義されており、これは Niagara システムのスタック内で移動することができます。モジュールの中には、2D、3D、ガス、そして液体のシミュレーターにまたがって使用されるものがあり、通常、非常に汎用的に書かれています。上級ユーザーは、さまざまなモジュールを修正したり置き換えたりすることで、コア流体ソルバの動作を変更できます。
流体パラメータ
[New Niagara System (新しい Niagara システム)] メニューに公開されるすべてのテンプレート システムには、マップへの配置時にアクタの変更を可能にするユーザー パラメータを含める必要があります。それぞれの値は [Details (詳細)] パネルで直接編集できます。流体エミッタの 概要ビュー には追加のパラメータが公開されており、これらは Niagara エディタで変更できます。
シミュレーター タイプ
2D Gas
これは流れが二次元空間のみで発生するガス シミュレーションです。通常このシミュレーションは 3D シミュレーションよりも速く、ゲームやリアルタイムでの使用に最適です。ただし、このシミュレーションでは、3D シミュレーションで表現可能な複雑な乱流が全般的に欠けています。
3D のオブジェクトは 2D のシミュレーションと相互作用できる点に注意してください。これらのタイプのシミュレーションは、常にカメラの方を向き、3D の動作を模倣するように設定することができます。これはトーチなど奥行きが必要な炎のエフェクトを作成するときによく使用します。
2D Gas シミュレーションは、カメラに向いた平面、またはワールド内の平面のいずれかでレンダリングされます。
3D Gas
これは最も一般的なタイプのガスのシミュレーションです。2D のものと比較すると、3D Gas は、より高いメモリとGPU コストで奥行とより複雑な流れをシミュレーションします。
このタイプのシミュレーターはリアルタイム アプリケーションのヒーロー エフェクトやシネマティックに最適です。結果をテクスチャにベイクすることでリアルタイムにパフォーマンスを向上することもできます。
ベイクしたライティングを使用するガス シミュレーションは、グリッドにシャドウをベイクすることでセルフ シャドウイングを実現します。このデータはレンダリングのためにマテリアルに渡されます。レイ マーチング マテリアルは、可視の密度と温度を累積することで、ボリュームの画像を生成する役割を担います。
2D FLIP
2D FLIP は、3D パーティクルをサンプリングして 2D シミュレーション ドメインを生成します。そして FLIP アルゴリズムを適用してパーティクルを更新します。通常、領域はカメラと揃って配置されるため、2D の流体力を使用しても 3D に見える複雑な流れが可能になります。これはリアルな水しぶきのエフェクトには使用できますが、水たまりには使用できません。
通常、2D FLIP シミュレーションは 3D パーティクルとしてレンダリングされます。
Shallow Water
2D FLIP とは異なり、Shallow Water は水しぶきのエフェクトをあまり含まない水たまりをシミュレートする場合に適しています。船の航跡や、水中を移動するオブジェクトとのシンプルなインタラクションをシミュレートする際に使用できます。
Shallow Water シミュレーションは、水面に対する変位 (ディスプレイスメント) としてレンダリングされる高さフィールドです。
3D FLIP
3D FLIP シミュレーションは、浜辺の波や川、複雑なオブジェクト インタラクションなどの広範なエフェクトをシミュレートできる強固な液体シミュレーションです。この複雑なシミュレーションは計算コストが高くなる場合があることに注意してください。これは、流体が圧縮されないことを確実にするグリッド ソルバによって速度が定義されるパーティクル シミュレーションです。
3D FLIP シミュレーションは、パーティクルをグリッドにスプラッティングし、レイ マーチングによってそのグリッドをサーフェスとしてレンダリングすることでレンダリングされます。