【UE4 .26】スケルタルメッシュのモーションに合わせてパーティクルを発生させる【Niagara】

 これを作ります。


スケルタルメッシュの形に合わせてパーティクルをスポーンさせる

www.youtube.com
ほぼコレの通りにしたんですけど、パーティクルの各種設定とか UnrealEngineのバージョン違いで詰まった所もあるのでそういう所も含めて全部書いていきます。

 

作成の流れとしては

  1. 指定したスケルタルメッシュの形にパーティクルをスポーンさせるNiagaraModuleScriptを作る
  2. 「パーティクルのスポーン」に作ったNiagaraModuleScriptを追加する
  3. メッシュをセットする

です。ところどころ詰まった箇所はあるんですけど、youtubeの解説が丁寧だったので楽にできました。

 

NiagaraModuleScriptを作っていきます。
持たせる役割としては「スケルタルメッシュの形にパーティクルをランダムにスポーンさせる」ってものです。

最初に「スクリプトの詳細」タブからModuleUsageBitmaskを写真の様にします。

f:id:ten0313:20210608201551p:plain

これってどこでこのScriptを使うかを指定するモノって認識なんですけど合ってますか?
とりあえず今回はスポーンの時に使用するので(「メッシュの形に沿ってスポーンさせる」って機能を作りたいので)、"ParticleSpawnScript"を指定しています。

 

f:id:ten0313:20210608201403p:plain

NiagaraScriptModuleの概要です

 ノードの方を説明していきます。

 

基本的にスクショの通り組んでいって貰えればいいんですけど、自分の使っている4.26バージョンでは左下の"GetRandomInfo"のノードが検索しても出てきませんでした。過去のバージョンでは存在するノードだったのですが 、いつのまにか表示されないようになっちゃってるみたいです

f:id:ten0313:20210608203120p:plain

検索しても出てこない...


エディタ内には存在しているようなので、表示されるように設定します。

f:id:ten0313:20210608203248p:plain

コンテンツブラウザ内の「Niagaraコンテンツ」内で「Get Random Info」を検索するとでてきます。

f:id:ten0313:20210608203427p:plain

スクリプトの詳細」内の「LibraryVisiblity」を"Exposed"にセットして、コンパイルしてから適用させます。

f:id:ten0313:20210608203617p:plain

でました!

これで自分の作るModuleScript内でも"Get Random Info"が使えるようになりました。

ModuleScriptを作成する上で詰まるところはこれでもう無いと思います。

やってることの内容としては

f:id:ten0313:20210608204131p:plain

スケルタルメッシュをマップ取得で受けとって、"RandomTriangle"でポリゴンメッシュでメッシュ上のポリゴンをランダムで取得します。("RandomInfo"は乱数の生成に関する設定を扱かってるんだと思う)

 Calculates info needed by other RNG functions about seeds and determinism,

 "Get Random Info"ノードのDescriptionより

 

シードと決定論について他の RNG 関数が必要とする情報を計算します。

Google翻訳の結果


RNG関数ってのはRandomNumberGeneratorについての事であることから、RandomTriangleノードで扱う乱数の設定をしているんだと思いました。

 

f:id:ten0313:20210608205143p:plain


ModuleScriptの後半です。

"RandomTriangle"で取得したポリゴンメッシュの情報を"Get Skinned Triangle WS"でワールド基準のものに変換します(ノード名の"WS"とは"WorldSpace"の略です)

その中の"Position"のピンをひっぱって"Map Set"のパーティクルの位置を指定する"Position"に繋ぎます。

 

これでパーティクルの位置がメッシュの形にセットされるようになります。
"NMS_SetPositionSkeletalMesh"って名前で保存します。

 

NiagaraSystemを作成して設定をいじっていきます。

f:id:ten0313:20210608211438p:plain

Emitterも含めての概要です。「パーティクルのスポーン」にさっき作ったModuleScriptを追加しています。

 

"Empty"を元にエミッタを追加します。

f:id:ten0313:20210608212107p:plain

基本的に これで追加したエミッタそのままで、いくつかモジュールを追加していったのでそれらを説明します。

f:id:ten0313:20210608212317p:plain

「エミッタの更新」に"Spawn Rate"を追加しました。ベースとなるスケルタルメッシュがモーションさせている間も連続してパーティクルに出てきてもらいたいので設定しました。"SpawnRate"は100000にしました。正直ここまで要らないと思うんですけど、ゲームに組みこむわけでもないし、多い方がSNS映えするかな~って魂胆です。

 

f:id:ten0313:20210608213248p:plain

「パーティクルのスポーン」の"Initialize Particle"です。ライフタイムを短かくして、スプライトのサイズを小さくしています("Sprite Size Mode"を"Random Uniform"にしている部分です)

 

f:id:ten0313:20210608213441p:plain

NMS Set Particle Position

さっき作ったモジュールです。今回はグレイマンにモーションを付けてパーティクルをつけようと思っているので、"SK_Mannequin"を指定しました。

 

f:id:ten0313:20210608213602p:plain

Color

男の子なので青くしました

 

f:id:ten0313:20210608213639p:plain

GravityForce

「パーティクル更新」の欄です。重力を適用させました。

 

f:id:ten0313:20210608213735p:plain

Scale Sprite Size

スプライトのサイズをスポーン後、徐々に小さくするようにしました。今回はスプライトのライフタイムが比較的短いので、地面に達する前に徐々に消滅するようにしました。

 

これでNiagaraSystemは完成です。"NS_BurstMesh"って名前で保存しました。

 

次に踊らせるグレイマンの方でNiagaraパーティクルをセットしていきます。

 

UnrealEngineのに用意されているThirdPersonテンプレート内の"ThirdPersonCharactor"のイベントグラフに↓を追加します。

f:id:ten0313:20210608214406p:plain

これでパーティクルをセットします。

これで大体は完成なのですが、このままではグレイマン自身のメッシュが見えてしまっています。パーティクルのスポーンでグレイマンの形を表現したいので、グレイマンのマテリアルに透明なのを適用させます

f:id:ten0313:20210608221008p:plain

透明マテリアル

メッシュのvisibleとかHidden in Gameをオンオフにしたらいいのかなって最初は思ってたんですけど、それをするとパーティクルがメッシュのモーションに追従してスポーンしてくれないのでこの方法をとりました。もっと良い方法が探せばあると思います。

 

これでグレイマンのメッシュに沿ってパーティクルが発生するようになっています。

 

こんな感じです。

 

ダンスを踊らせると

 こんな感じになったでしょうか。

なにかわかりにくい事があったり、間違いがあればTwitterのDMとかにおねがいします。


[ この記事はブログ投稿者の憶測や考えによりつくられています。

よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]

 

twitter.com

 

f:id:ten0313:20210608221738p:plain