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

この記事では、Houdini Niagara Plugin を用いた Houdini , Niagara 連携について、作例に沿って一連のフローを解説します。併せて制作時の所感についても解説します。

対象読者

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

環境

・Unreal Engine 5.7
・Houdini 21.0.440

Houdini Niagara Plugin とは

Houdini Niagara Plugin とは、Houdini 側でキャッシュとして書き出したポイント情報(位置・速度・法線・ID・カスタム属性など)を Unreal Engine (UE) の Niagara で読み込むための連携プラグインです。
読み込んだ属性を Niagara のモジュールやマテリアルと組み合わせることで、パーティクルの挙動や色、サイズなどを細かく制御できます。
例えば下の動画の様に、Houdini 側で流体シミュレーションやユニークな動きを作り最終的な見た目は Niagara 側で調整するといった使い方が可能です。

導入方法

外部プラグインの為、以下リンク先よりダウンロードが必要になります。
https://github.com/sideeffects/HoudiniNiagara/releases
バージョン毎に管理さているのですが、今回はHoudini Niagara Plugin v2.7.4 内にあるAsset 「HoudiniNiagara-v2.7.4-UE5.7-Win64.zip」をダウンロードして使用しています。解凍すると HoudiniNiagara というフォルダが出来るので、これをプロジェクト> Plugins 以下に格納します。


次に Unreal Engine 起動しプロジェクトを開き Edit > Plugins 設定を開きます。


PROJECT > FX の中に Houdini Niagara があるので、その横のチェックボックスを有効にしてプロジェクトを再起動します。


これで Houdini Niagara Plugin を使う準備が出来ました。

基本的な使い方

大まかな流れとしては Houdini で形状や受け渡したいデータを作り、Houdini Niagara Plugin によりキャッシュとして出力、Niagara でキャッシュを受け取り見た目を調整していきます。

Houdini で形状作成やキャッシュに受け渡すアトリビュートの作成

球体メッシュに対して Mountain SOP ノードを使い、下の動画の様にジグザグ動く形状にし Color ノードによりランダムなカラーを設定しました。

また今回は1~120フレームでループをさせたかったので Make Loop ノードでループしたアニメーションにしています。


Labs Niagara ROP を使いキャッシュを出力

次に Tabs キーから FX > Particle > Labs Niagara ROP を選択して作成し、make loop ノードの下に繋げます。

この Labs Niagara ROP ノードにある Renderボタンを押す事によりポイントキャッシュを出力する事が出来ます。※予めポイントに出力したいアトリビュートが入っているのが前提になります。

Keep Attributes に入っているものがキャッシュとして出力される情報になります。
Frame Range / Time で出力する期間を設定出来るので、「Start =1 、End =120」にして Render ボタンを押します。


拡張子が「.hbjson」になっているキャッシュが出力されました。
ちなみに Keep Attributes に載っている個数によってファイルサイズが異なってきますので、使わないもはここから削除していった方が良いです。

Niagara でキャッシュの受け取り

ではここからは Unreal Engine での作業に移るので出力したキャッシュデータをUEのコンテンツブラウザから読み込みます。


ちなみに読み込んだアセットをダブルクリックすると出力フレームや時間、ポイント数、内包されているアトリビュート等を確認する事が出来ます。


公式からいくつかプリセットのエミッターが提供されているので、この中にある 「Houdini Niagara Basic 」から進めても良いのですが、minimal から進めていきます。※表示されない場合「Plugin Content」をチェックしてみて下さい。

コンテンツブラウザ右クリック>FX>Niagara System を選択します。専用ブラウザが開くので検索欄に「minimal」と入力し出てきたエミッターを加えたものを作成します。

次に Emitter Update グループからプラス(+)ボタンを押し「 Spawn Particles from Houdini Point Cache 」モジュールを追加します。※Plugins にチェックが入ってないと見つからない為注意して下さい。


参照関係でのエラーが出るのでその中にある「Fix issue」ボタンを押します。それによりEmitter Spawn グループに「Int Houdini Point Cache」モジュールが追加されてエラーが解消されます。


次に読み込んだキャッシュを Spawn Particles from Houdini Point Cache モジュール内にある Houdin Point Cache Asset に充てます。これによりキャッシュが読み込まれます。ちなみにここでは主にパーティクルの発生数やグループ等が読み込まれています。


では今度は Particle Spawn グループで同じ様にプラス(+)ボタンから「Sample Spawned Houdini Point Cache 」モジュールを追加し、同じ様にキャッシュを充てます。 ここでは初期値として反映させたい情報(初期位置、初期カラー、初期速度、初期回転)等が読み込まれています。

今回は時間経過に沿ってパーティクルを動かしたいので Particle Update グループからプラス(+)ボタンを押し「Sample Houdini Point Cache 」モジュールを追加し、同じ様にキャッシュを充てます。ここでは時間経過で変化する情報(変化する位置、カラー、回転値)等が読み込まれています。

これでキャッシュの読み込みが完了したので次にパーティクルに反映していきます。

キャッシュの情報からポイントの位置・カラーに反映

読み込んでいるキャッシュから変化している位置を取得したいので、Particle Update グループからプラス(+)ボタンで Set new or existing parameter directly を選択し、その中にあるプラス(+)ボタンから Potion (位置)パラメーターを追加します。


初期値だと 【ENGINE EMITTER Simulation Position】 が充たっているのですが、横にあるプルダウンボタン(∨)をクリックし検索ボックスから 【PARTICLE HOUDINI Position 】を見つけて選択します。 これによりパーティクル位置が動いているのが確認出来ると思います。ちなみに前に INITIAL と付いているものは初期値になります。また、Sample Houdini Point Cache モジュールの次に このモジュールが無いと情報が引き渡せないので順番にはご注意下さい。

もし途中で思った通りの動きになってない場合は、エフェクト側でのループ尺に対して、キャッシュ側の尺が一致していないのが原因でキャッシュアセットを開いた時に Max Sample Time で確認出来るのでこれをエミッターやシステムの Loop Duration に一致させると直ります。

次にカラーを反映させていきますが、カラーに関しては Color モジュールを追加し Scale Color から【PARTICLE HOUDINI Color 】を充てれば反映されます。※時間による色変化が無いのであれば前に INITIAL と付いているものでも大丈夫です。


スプライトサイズ等見た目を調整して出来上がりです。
※初期に充たっているマテリアルのブレンドモードが「加算」の為、「Translucent」に変更しています。

イベントによる連携

Houdini Niagara Plugin の強みの1つなのですが、キャッシュを受け取ってもパーティクルの為、Generate Location Event 等のイベントを親側で作成して子供に受け渡す事により、親の位置から発生させたりカラー等の親側の情報を子供に引き継げたりします。

初期情報を用いた破壊表現

次に下の動画のような「球状の岩が破壊されるエフェクト」を、Houdini Niagara Plugin と連携して作成していきます。
ポイントは、破片の初期情報(発生位置・回転など)だけを Houdini 側でキャッシュし、アニメーション自体は Niagara 側で制御することです。というのも、Houdini 側で破壊アニメーションまで付けてしまうと、エフェクトの設置位置によって破片が地面にめり込んだり、逆に浮いて見えたりする事があるためです。

Houdini で破片作成とモデル出力

下図の様に球体モデルにUVを適用した後、RBD material fracture ノードで25個の破片モデルを作成しています。

破片毎に個別のFBXデータとして出力する必要があるので、For Each を使い For Each Metadata にある iteration をIDに入れ、それを Blastノードでフレーム番号とイコール関係にする事によってタイムスライダーを動かすとそれぞれに関連する破片モデルが表示される様にしています。

最後に Topネットワークで ROP FBX Outputノードを作り破片1つ1つのFBXを出力しています。

受け渡す初期回転情報の作成とキャッシュ出力

それぞれの破片がバラバラに回転すると説得力に欠ける見た目になった為、球体の法線を90度傾けたベクトルを用意して内部からの速度に沿って回転する様に初期回転情報を作成していきます。 

assemble ノードから Attribute Wrangle ノードを挿し、各位置からのベクターを算出後、rotate でY軸に対してラジアン90度回転させたものを法線(N)にする内容を書いています。
※ポイントだけ必要なので見易くする為、delete ノードでポリゴンだけ削除していますが無くても大丈夫です。

出力するキャッシュですが今回は位置(P)の他、上記で編集した法線(N)と次の工程で使うID(id)をKeep Attributes に入れています。
また初期値だけの反映で良いので、Frame Range Time は「Render Current Frame」にしています。

Niagara でキャッシュ情報から位置に反映

Niagara でキャッシュの受け取り で解説したのと同じ様に、エミッター「Minimal」から初めてポイントキャッシュの連携とポイント位置に反映(Set new or existing parameter directly を作りPosition パラメーターに Houdini Position を充てる)しています。ただ今回は初期値だけ情報を付け取れればいいので、Particle Update グループではキャッシュの連携はしていません。

また、注意したいのが Lifetime です。Sample Spawned Houdini Point Cache にある「Set Life Time 」のチェックを外す事で、Initialize Particle にある Life Time が通る認識でいたのですが、私の設定方法が悪いのかチェックの有無に関わらず通ってない為、Set new or existing parameter directly で Lifetime のパラメーターを作り値を入れ直しています。これについて何か分かりましたら別途ご報告いたします。

複数メッシュの組み込み

Houdini 側で出力した複数の破片メッシュをNiagaraに組み込み元々の形状である球体に構築していきます。
まず、コンテンツブラウザから破片メッシュを読み込みます。(破片の名前は fragment_0 ~ fragment_24 にしています)


次に Mesh Renderer を追加しその中にある「Enable Mesh Flipbook」をチェックします。
※ Enabling the Mesh Flipbook option will replace all meshes currently selected for this renderer. Continue ? (Mesh Flipbook オプションを有効にすると、このレンダラーで現在選択されているメッシュがすべて置き換えられます。続行しますか?)というウィンドウが出ますが、初期登録されているギズモメッシュが外れるだけなので「Yes」を押しても大丈夫です。

First Flipbook Frame に読み込んでいる破片メッシュで1番最初のアセット(作例だと fragment_0)を充て、Num Flipbook Frames にメッシュアセットの総数(作例だと25)を入れると Meshes に連番として全ての破片メッシュを充てる事が出来ます。

ただプレビューで見てみると単一の破片が全て充たっている為、球体のシルエットにはなってないので、Set new or existing parameter directly で MeshIndex のパラメーターを作り、【PARTICLE HOUDINI NID 】を充てます。(または、Return Exec Index でも同じです。)
そうする事により、各IDに基づいた破片メッシュが参照される為、元の球体の形にする事が出来ます。

破片の動きと回転を制御

破片の動きですが、シンプルで以下モジュールによって制御しています。
●Particle Spawn グループ
 ・Add Velocity (From Point) [初速として特定の位置を中心とした放射状に飛ぶようにしています]

●Particle Update グループ
 ・Gravity Force [重力に従って落下する様にしています。]
 ・Collision [地面に衝突する事で跳ねたり、転がったりする様にしています]
 ・Drag [初速に対して抵抗によって速度が落ちる様にしています]
 ・Mesh Rotation Force [初期回転]


また、法線(N)としてキャッシュに持たせた初期回転値【PARTICLES HOUDINI Normal】を Mesh Rotation Force の Vector に充ててこの軸で回転する様にしています。

あとは見た目の調整としてマテリアルを適用したり、賑やかしとして小さな破片や煙を付けてあげれば出来上がりです。

複雑なモデルを適用した例

トップのモデルを別に変える事が出来るので複雑なモデルを破壊する事も可能です。個人的には元の形状を保ったまま破壊させると一気に説得力が増しますね。

まとめ

キャッシュの長さや内包するアトリビュート数によりデータサイズが異なりますがパーティクルなので、ある程度は軽い物が作れるかもしれません。ただ複数のモデル登録によるドローコール数も気になるので、次機会がありましたら Unreal Engine の破壊機能の1つである「Chaos Destruction 」と処理負荷回りを比較してみようと思います。
以上で終わりたいと思います。ご一読いただきありがとうございました。

VFXVelocity

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

投稿者記事

  1. READ MORE

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

    2025-11-27

関連記事

  1. READ MORE

    【Unreal Engine 5】リアルな爆発エフェクトの作り方&解説 Part④

    2024-02-15

  2. READ MORE

    【Unreal Engine 5】リアルな爆発エフェクトの作り方&解説 Part②

    2024-02-15

  3. READ MORE

    【Unreal Engine 5】エフェクト撮影で使える簡単な背景の作り方

    2025-07-09

  4. READ MORE

    【Substance 3D Designer】オーラテクスチャ&マテリアルの作り方

    2024-02-15

ページ上部へ戻る