【LiquiGen】LiquiGen × Niagaraで作るゲーム用飛沫エフェクト

この記事では、作例をもとに LiquiGen の設定方法 と、Unreal Engine(UE)の Niagara へ連携するまでの一連の流れを解説します。併せて制作を通して感じた所感についても紹介します。

対象読者

・エフェクトデザイナー
・LiquiGen に興味がある方
・Unreal Engine / Niagara の基本操作ができる方

環境

・LiquiGen 1.0.6
・Unreal Engine 5.7

LiquiGen とは

LiquiGen は、JangaFX が提供する液体表現に特化したリアルタイムシミュレーションツールです。
水しぶきや液体の流れ、粘性のある質感などをノードベースで効率よく制作でき、Unreal Engine(UE)などのゲームエンジン向けに、スプライトシートやVAT(Vertex Animation Texture)、メッシュデータとして書き出すことも可能です。

●公式サイト
https://jangafx.com/software/liquigen

基本的な使い方

LiquiGenを起動するとプロジェクトマネージャーが表示されるので「+New Project 」ボタンを押し新規シーンを開きます。(豊富なプリセットも揃っているので、求めている表現に近いものから始める事も出来ます。)

新規シーンと各種ウィンドウ

新規シーンでは基本的な構成がされているので、基本的にはここから編集していく流れになっています。


様々なウィンドウがありますが代表的なのは以下4つになります。
①ビューポート 
シミュレーションされている液体を確認する事が出来ます。

②タイムラインエディター
時間が左から右に進むので、シミュレーションを一時停止させたりコマで進める等する事が出来ます。
またノードのパラメーターに対してキーアニメーションを設定する事が出来ます。

③ノードグラフ
LiquiGenはノードベースのシミュレーションツールの為、ここで必要なノード追加や削除を行います。

④ノードグラフ詳細
ノードグラフで選択中のノードが持っているパラメーターをここで変更する事が出来ます。


他ウィンドウについては実践パートの方で解説します。

ノード編集とパラメーター調整

必要なノード追加や削除を行い、各ノードにあるパラメーターを変更して進めていきます。

出力

Export と付いているノードから画像やメッシュ、VDBを出力する事が出来るのでここから必要に応じた素材を出力していきます。

飛沫エフェクトを作成

ここからは実践パートとしてゲームで良く使われてそうな「汎用飛沫エフェクト」を作成していきます。
※解説の為、少し粘り気のある液体にしています

ワンショット用ベースシーン構築

今回はループではなくワンショット、つまり1回だけ発生する飛沫エフェクトを作成します。
その為、まずは作業し易い様にベースとなるシーンを構築しています。

「+New Project 」ボタンを押し新規シーンを開く

基本的な使い方で説明した様にプロジェクトマネージャーから「+New Project」ボタンを押し新規シーン(水が流れているシーン)から始めていきます。

リピート再生とVsync設定

流体計算を管理する Simulation ノード の Reset Simulation にチェックを入れ、続けて Reset Time を 1s に設定します。これにより、タイムラインを再生するとシミュレーションが1秒ごとにリセットされ、再び0秒の状態から再生されるようになります。この設定を行っておくと、パラメーターを変更した際の挙動の違いをすぐに確認できる為、以降の調整作業が進めやすくなります。

もしタイムラインの再生速度が速く感じる場合は、Settings → Preferences → General にある Vsync を有効にします。これにより、再生がモニターのリフレッシュレートに同期され、適切な速度で再生されるようになります。なお、この設定は一度有効にすれば保持されるため、作業のたびに設定し直す必要はありません。

不必要なノードを削除

Collider ノードは他のメッシュとの衝突判定に使用するもので、Drain ノードは範囲外に出た液体を削除するためのものですが、今回は使用しないため関連するノード群を囲って Delete キーで削除します。また、グレーアウトしている Whitewater は、海などで見られる白波を生成するためのノードですが、こちらも今回は不要なので削除します。他に今回は画像、つまりスプライトシートとして出力するため、Export:image 以外の Export と付いているノードも削除しておきます。(赤枠で囲っているものが、今回削除するノードです)

液体に対して寿命を設定

本来は液体に寿命というものは無いのですが、ゲーム用に消えてほしい為寿命を設定していきます。
設定方法ですが2か所あります。まずSimulation ノードにある「Simulate particle lifetime」にチェックを入れ有効にします。


その次にEmitter ノードを編集していきます。 このノードは液体の発生源を制御する為のノードで寿命の他流量等も調整する事が出来ます。なおそこから繋がっている Shape :Primitive ノードにある形状(球体)を元に発生しています。Behavior カテゴリーにある「Lifetime range 」で最小値(min)を0にして、最大値(max)を0.6s(秒)にします。


目的によって適切な秒数は異なりますので、他パラメーターを調節しながら再度見直したりします。


途中で発生が止まる様にする

現状だと蛇口から出た水道水の様に絶え間なく液体が出ているので、途中で発生自体止まる様にします。
Emitter ノードに Emitter activity という発生を有効・無効に切り替えるパラメータがあるので、左横のピン「〇」をクリックします。そうすると下図の様にひし形「◇」に変わると同時に タイムラインにも項目が追加されます。 この状態で Emitter activity の右横にあるチェックボックスをクリックするとキーを設定する事が出来るので、2Fまでをチェックありにして3Fでチェックが外れる様にします。

これで液体の発生が途中で止む様になりました。


(補足)
Emission Mode を Continuous Generation (持続発生)から Fill に変更すると即座に発生が止まるのですが、流量を調節したかったので上記方法で調節しています。

視認性を上げる為質感変更

初期シーンだと水の質感になっている為少し見辛いので、Simulationノードにある Appearance Preset から Plastic を選び質感を変更します。

これでワンショット用のベースシーンが出来たので、シーンを保存しておきます。

目的の動きになる様にパラメーター調整

ここからは目的の動き(飛沫)になる様に主にEmitter ノードとSimulationノードにある各パラメーターを調節していきます。液体の挙動を見ながら行ったり来たりしますが、変更したパラメーターについてはなるべくどのノードのパラメータかは記載していく様にします。

適切なスケールを意識することが重要

調節する前に意識しておく事があります。液体シミュレーションは実際の物理現象をもとに計算されるため、作成したい液体のサイズ感を考慮しないと、狙った挙動になりにくい場合があります。下の動画では、片方は半径0.2m、もう片方は半径2mの発生範囲から液体を放出していますが、スケールの違いによって流れ方にも差が出てしまうので何を作ろうとしているのかイメージしながら作業すると良いと思います。

発生範囲の調整

Emitter ノードから繋がっている Shape : Primitive が液体の発生範囲を制御しているノードになります。現状半径0.4mになっている為、Radiusに0.15mと入れます。

流量の調整

発生範囲を小さくする事により液体の流量が減ってしまったので、Emitter ノードにある Volume flow rate density の値を 35 m³/(m³·s)にします。

値が大きければ大きいほど流量が多くなります。

上方向に飛ぶようにする

Emitter ノードにある Speedを1m/sにして Fixed direction を X:0 , Y:0 ,Z:1にします。これにより+Z方向つまり上方向に速度1m/s で液体が飛ぶようになります。

計算精度を上げる

ここからはより緻密な調整を行っていく為、Simulation ノードの Voxel Size を 0.015m に変更します。これにより計算精度を上げる事が出来ます。

値を大きくすると処理負荷は軽くなりますが、シルエットは大まかな形になります。一方で、値を小さくすると処理負荷は高くなりますが、より細かなシルエットを表現できます。

フォース設定

LiquiGenには指定方向(Constant)の他、抵抗(Drag)や乱流(Turbulence)、環状体(Toroidal)等液体の振る舞い自体を変える「力」を与えるノードが揃っており、今回作る飛沫についてもこれらを使って動き自体を制御していきます。

Constant:重力の設定

Force:Constant は X、Y、Z方向に対して液体を飛ばす事が出来るノードで初期設定だとZに-9.8の値、つまり下方向に力が設定されています。
この-9.8は重力加速度の値になっているので重力として機能しています。基本は初期値で良いのですが、今回は空中に留まる時間を長くしたかったのでZを-5に変更しています。

Turbulence:乱流の設定

次は乱流を追加していきます。ノードを作る必要があるので、Simulation ノードの入力ピン「Forces」をマウスドラッグすると候補のノードがリストアップされるので、その中にある Force:Turbulence を選択します。

パラメーターを変更する事によって乱流のスケールや強度等を変える事が出来るので、以下を参考に値を調節していきます。
Scale : 3
Seed : 4111
Octaves : 2
Lacunarity : 1.2
Gain : 0.4467
Strength : 70

液体が四方に広がる様になりました。

ただ乱流が掛かり続ける為、霧散した動きになっているので Force: Turbulence の入力ピン【Mask Shapes】を Shape: Primitive の出力ピン【Shape】に繋げます。

これをする事によって Shape 表面から遠ざかるにつれて乱流の掛かり方を弱くする事が出来ます。

Drag:抵抗の設定

Force : Turbulence と同様に Simulation ノードの【Mask Shapes】をドラッグして、候補の中にある Force: Drag ノードを追加します。次に Strength(強度)を1にします。これにより徐々に減速した動きを作る事が出来ます。


メッシュ設定

Simulation ノードの Mesh カテゴリーにあるパラメーターを変更する事で、メッシュのシルエットを変更する事が出来ます。まず、Higher quality meshing にチェックを入れます。 これは解像度が2倍になる為負荷は増えますが手軽に品質を上げる事が出来ます。次に Smoothing iterations を0.6にします。

また Erosion /Dilation amount と Open/Close amount にキーアニメーションを設定して動的に変化する様にしています。
● Erosion /Dilation amount
・0.38s 0.8voxels
・0.55s 0.55voxels

●Open/Close amount
・0.38s 2.5voxels
・0.53s 0voxels

形状がより液体に近づきました。

粘性を設定する

少し粘り気のある液体にするため、粘性(Viscosity) を設定していきます。

Dynamic viscosity coefficient を設定

まず、Simulationノードの Viscosity カテゴリーにある Simulate viscosity をチェックして有効にします。

次に Emitter ノードにある Dynamic viscosity coefficient を300mPa·s 入れます。

PIC/FLIP ratio の調整

Simulationノードの Solver カテゴリーにある PIC/FLIP ratio を40%に変更します。

PIC/FLIP ratio とは文字通り PIC計算とFLIP計算の比率を変更するもので、PIC寄り(0~40%)だと滑らかな動きに、FLIP寄り(60%~100%)だと細かい動きになります。表現したいものによりますが、今回は粘性を強くしたかったので40%にしています。

表面張力を設定する

Simulationノードの Surface Tension を 2000mN/m に変更します。

Surface Tension (表面張力)の値が低いと水滴がばらけたボソボソとした形になり、高いと水滴同士が繋がった形になります。

目的の動きが出来たので次はUE用に素材を出力していきます。
なお公式ドキュメントでは、各パラメーターの値を変更した際の挙動が動画付きで紹介されているため、併せて確認していただくのがおすすめです。

●LiquiGen Documentation
https://docs.jangafx.com/liquigen/

Unreal Engine(UE) 用に素材を出力

UEではスプライトシート画像の他、VAT(vertex animation texture)やFBX, Alembic 等のメッシュデータを扱う事が出来ますが、今回はスプライトシートを出力します。

レンダリング(出力用)カメラを設定

ビューポートの表示パネルを【Preview】に変更すると出力時に使用するカメラに切り替わります。ちなみにですが、Export:Image ノードの Camera からどのカメラを使用するか決める事が出来ます。

現状だと大きくカメラから外れているので Camera ノードを選択し位置と回転を調節します。

●Position
X:0.2375m , Y:0.3638m , Z:2.9m

●Rotation
Yaw angle : 151.2
Pitch angle : -16.8
Roll angle : 0

また、投影方法を Orthographic に変更し Orthographic width を 1.4m にします。

出力用に質感変更

動きを調整する際に視認性を上げる為質感を Plastic に変更しましたが、意図した素材が出る様に Water に変更します。

出力する要素を確認

Preview 右横にあるプルダウンから各要素を確認する事が出来るので、今回出力するものが意図した見え方になっているか確認します。

●出力する要素
・Alpha(アルファ)
・Normal Map(ノーマル)
・Reflect(rasterized):反射   ※rasterized と付いていないReflect は、Path Tracing での反射になります。
・Refract(rasterized):屈折  ※rasterized と付いていないRefract は、Path Tracing での屈折になります。

出力設定と出力

Export:Image ノードから出力したい要素の設定やスプライトの形式、保存場所・名前を設定する事が出来ます。

出力する要素を設定

Render Passes カテゴリーで出力する要素を設定する事が出来ます。新規シーンでは「Render All(Rasterized)」と「Alpha」が設定されていますが、【+Add Render Pass】から表示される項目をクリックする事によって、出力する要素を追加する事が出来るので「Normal Map」「Reflect(rasterized)」「Refract(rasterized)」を追加します。

出力範囲・形式を設定し出力

Flipbook Columns/Rows を「X:6、Y:6」 入力します。また、First Frame に 3、Number of Frames に36を入力します。これにより3フレーム目から36フレーム分レンダリングされた画像が6×6のスプライトシートとして出力されます。 Directory で保存先、Filename でファイル名を設定する事が出来るので問題無かったら【Export Now】ボタンを押して出力します。

以上で LiquiGen 側の調整は完了になるので、次は UE 側の調整に移ります。

マテリアルとNiagara 作成

テクスチャの読み込み

UEのコンテンツブラウザから出力したテクスチャを読み込みます。

水用マテリアル

ノード1つ1つの説明は今回割愛させて頂きますが、マテリアルの全体像としては下図の構成にしています。


Niagara設定

スプライトシートを使用したエフェクトでは、どのフレームを再生するかを指定する必要があるため、Sub Animation モジュールを追加します。また、Renderer の Sub Image Size にはスプライトシートの分割数を設定する必要があります。(今回の例では 6 を入力します。)この設定を行わないと正しく再生されないため、忘れずに設定しておきましょう。

以上で水飛沫エフェクトの完成になります。

バックライト表現

LiquiGen では液体の「厚み(Thickness)」を要素として出力する事が出来るので、ライトの方向(Atmosphere Sun Light Vector)と法線(Vertex NormalWS)を内積計算させた結果と組み合わせる事で疑似的なバックライト表現をする事が可能です。

まとめ

個人的にシミュレーション結果の良し悪しを大きく左右するのは「イテレーションのしやすさ」、つまりどれだけ素早く結果を確認しながら調整を重ねられるかだと思っています。その点、LiquiGen はリアルタイムで結果を確認できるため、非常にパワフルなツールだと感じました。一方で部分的な粘性変化に対応していなかったりエレメントの出力で少し意図と異なる結果になる場面もあったため、今後のアップデートでさらに改善されていくことを期待しています。とはいえ今後もかなりお世話になりそうです。

以上で終わりたいと思います。最後までご一読いただき、ありがとうございました。

VFXVelocity

エフェクトデザイナー
UE5で主にリアル系のエフェクトを作っています。
趣味はキャンプ、自転車です!

投稿者記事

  1. READ MORE

    【Houdini/UE5】Houdini Niagara Plugin × Niagaraで作る破壊エフェクト

    2026-01-29

  2. READ MORE

    【Houdini/UE5】コペルニクスの Cop Pyro で作った煙をUE5のNiagaraに組み込んでみよう

    2025-11-27

関連記事

  1. READ MORE

    【Maya : Bifrost】プロシージャルなUV制御|業務効率化

    2024-08-02

  2. READ MORE

    【Maya : Bifrost】Dual Mesh(バリア形状)ノードを自作しよう

    2025-11-12

  3. READ MORE

    【Maya : Bifrost】カーブにメッシュを添わせる(Curve_Warp)|業務効率化

    2024-09-10

  4. READ MORE

    【Maya : Bifrost】スパイラルカーブ(ストランド)作成方法

    2024-11-14

ページ上部へ戻る