【UE4 .26】音とパーティクルを連携させてみる

この記事でわかることです。

  • グニョグニョ動く球に使ったマテリアルの作りかた
  • ワイヤフレームのみを描画するマテリアルの作りかた
  • Wavファイルから流れる音量値をパーティクルに伝える方法

今回の記事内で解説した内容で作ったパーティクルが下のツイート内の動画になります。十字部分やクルクル回るエミッタの所等の作成方法については、過去の解説記事で作ったものを流用してたりするので 今回は書きません(要望があったら詳しく書きますが、基本的には他の書かれた記事を参照していただけるといいかと思います)。

 

グニョグニョ動く球に使ったマテリアルの作りかた

"SimpleGrassWind"ノードを使います。

f:id:ten0313:20210702183246p:plain

本来、葉っぱや旗等に使うマテリアルに起用して 風に揺れるオブジェクトを表わしたりするものです。これを球に使うことで、グニョグニョ動くようにさせます。


繋げ方はこんな感じです。"WindIntencity"と"WindWeight"ノードに与える値の変化でグニョグニョの強さを変えます。

 

これでグニョグニョするようになります。

f:id:ten0313:20210702183949p:plain

Niagaraからグニョグニョの強度を変えられるようにDynamicParameterノードに繋げておきます。

 

ワイヤフレームのみを描画するマテリアルの作りかた

f:id:ten0313:20210702184421p:plain

これを作る方法です。
色んな方法があると思うんですけど、一番簡単な方法で僕はやりました。

f:id:ten0313:20210702184536p:plain

マテリアルの詳細から、"Wireframe"にチェックを付けます。以上です。

さっき作ったグニョグニョマテリアルの"Wireframe"をチェックしてみると

f:id:ten0313:20210702184710p:plain

こんな風になりました。

 

Wavファイルから流れる音量値をパーティクルに伝える方法

音に応じて動くパーティクルに絞って作ります。

 これを作ります。

使用するマテリアルはなんでも良いです。

f:id:ten0313:20210702185520p:plain

自分はコレを使いました。"RadialGradientExponential"ノードを使用して二重丸を描画したマテリアルです。

f:id:ten0313:20210702185640p:plain

システムの概要です。"Empty"を基に作りました。重要な所を説明していきます。

 

f:id:ten0313:20210702185727p:plain

Spawn Burst Instantaneous

10個のパーティクルを一気にスポーンさせます。

 

f:id:ten0313:20210702185823p:plain

パーティクルのスポーン

ここは特に特別な事はしていません。"(パーティクル) SpriteFacingを設定"でスプライトパーティクルの向きを上向きにして、"(パーティクル) SpriteAlignmentを設定"でカメラに対する角度を固定させます。

後は色を赤にしました。

 

最初の二つのパーティクルに関しては、モジュールに含まれていないので

f:id:ten0313:20210702190056p:plain

パラメータの中のパーティクル属性にあるのをみつけて、システムの概要の方にドラッグ&ドロップします。

 

パーティクル属性の中になかったら、右上の+ボタンを押して

f:id:ten0313:20210702190254p:plain

検索して追加します。

 

f:id:ten0313:20210702190331p:plain

"パーティクル更新"にパーティクルの動きをつけるモジュールを追加します。
"NMS_MoveDepthPosition"です。

これは最初から用意されているものではない、自作したものです。

作っていきます。

 

f:id:ten0313:20210702190829p:plain

NMS_MoveDepthPosition

マップ取得で、パーティクルの移動を受けとるVector型のピンと パーティクルシステムの位置を取得する"(エンジン)(オーナー)Position"を +ボタンを押して追加します。

その後、写真の通りにノードを組みます。

内容はコメントの通りです。入力されるVector型にパーティクルのインデックスを表わす"Execution Index"を乗算して新しいパーティクル程位置の差が大きくなるようにします。

それとパーティクルをスポーンさせた座標である"(エンジン)(オーナー)Position"と加算させます。 "Map Set"ノードに"(パーティクル)Position"を追加してそこに加算した内容を繋げて完成です。

 

NiagaraSystemの方に戻ります。

f:id:ten0313:20210702191744p:plain

公開されたユーザーにfloat型の値を追加して"VoicePower"と名付けておきます。

パーティクルと音を流すアクターを後で作成するのですが、そこからこのfloat変数を操作することになります。

f:id:ten0313:20210702192140p:plain

さっき作ったNiagaraモジュールをパーティクルシステムに追加します。
今回は高さを動かしたいので、Z軸の場所にさっき作ったユーザー変数を追加します(少し値を大きくしたかった(動きを大きくしたかったので)MultiplyFloatで2を乗算しています)

これでパーティクルの方は完成です。

パーティクルと音量を連携させるのを作っていきます。

 

f:id:ten0313:20210702195123p:plain

アクターを作成し、NiagaraSystemComponentとAudioComponentを追加します。

 

f:id:ten0313:20210702200347p:plain

NiagaraのNiagaraSystemAssetにさっき作ったパーティクルをセットします。

 

f:id:ten0313:20210702195108p:plain

AudioComponentに使いたいWavファイルを設定します。自分は文章の読み上げがわかりやすいと思ったので(楽曲よりも、単純な読み上げ音声とかの方が音量の抑揚が大きくビジュアライズ化した時にわかりやすいと思います)

coefont.studio

ここを使いました。とても自然な読み上げ音声を作成して、簡単にWavファイルにしてダウンロードできるので便利でした。

f:id:ten0313:20210702195642p:plain

AudioComponentの詳細内にある"On Audio Single Envelope Value"を追加します(緑の+ボタンを押します)。

 

f:id:ten0313:20210702195819p:plain

このイベントノードからは、現在流れている音の大きさがEnvelopeValueから出てくるようになっています。

それを"Set Niagara Variable(Float)"に繋げて、NiagaraComponentのユーザー変数である"VoicePower"に渡します。

 

これで完成です。

 このようにできたでしょうか。

 

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


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

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