【UE4 .26】音とパーティクルを連携させてみる
この記事でわかることです。
- グニョグニョ動く球に使ったマテリアルの作りかた
- ワイヤフレームのみを描画するマテリアルの作りかた
- Wavファイルから流れる音量値をパーティクルに伝える方法
今回の記事内で解説した内容で作ったパーティクルが下のツイート内の動画になります。十字部分やクルクル回るエミッタの所等の作成方法については、過去の解説記事で作ったものを流用してたりするので 今回は書きません(要望があったら詳しく書きますが、基本的には他の書かれた記事を参照していただけるといいかと思います)。
#Niagara で未来感のある音声通話UIを模したパーティクルを作りました。
— 東京高速戦術@VR音ゲー制作中 (@kousoku_tactics) July 1, 2021
音に合わせてパーティクルが変化しているのが分かりますか? やり方も簡単なので、ブログの方で解説記事書きたいと思います! RT、いいねしてくださると励みになります~!! #ue4 #gamefx #realtimevfx #3dcg #cyberpunk pic.twitter.com/dsvcPpUfX3
グニョグニョ動く球に使ったマテリアルの作りかた
"SimpleGrassWind"ノードを使います。
本来、葉っぱや旗等に使うマテリアルに起用して 風に揺れるオブジェクトを表わしたりするものです。これを球に使うことで、グニョグニョ動くようにさせます。
繋げ方はこんな感じです。"WindIntencity"と"WindWeight"ノードに与える値の変化でグニョグニョの強さを変えます。
— 東京高速戦術@VR音ゲー制作中 (@kousoku_tactics) July 2, 2021
これでグニョグニョするようになります。
Niagaraからグニョグニョの強度を変えられるようにDynamicParameterノードに繋げておきます。
ワイヤフレームのみを描画するマテリアルの作りかた
これを作る方法です。
色んな方法があると思うんですけど、一番簡単な方法で僕はやりました。
マテリアルの詳細から、"Wireframe"にチェックを付けます。以上です。
さっき作ったグニョグニョマテリアルの"Wireframe"をチェックしてみると
こんな風になりました。
Wavファイルから流れる音量値をパーティクルに伝える方法
音に応じて動くパーティクルに絞って作ります。
ブログ用です pic.twitter.com/esI27rM6HV
— 東京高速戦術@VR音ゲー制作中 (@kousoku_tactics) July 2, 2021
これを作ります。
使用するマテリアルはなんでも良いです。
自分はコレを使いました。"RadialGradientExponential"ノードを使用して二重丸を描画したマテリアルです。
システムの概要です。"Empty"を基に作りました。重要な所を説明していきます。
10個のパーティクルを一気にスポーンさせます。
ここは特に特別な事はしていません。"(パーティクル) SpriteFacingを設定"でスプライトパーティクルの向きを上向きにして、"(パーティクル) SpriteAlignmentを設定"でカメラに対する角度を固定させます。
後は色を赤にしました。
最初の二つのパーティクルに関しては、モジュールに含まれていないので
パラメータの中のパーティクル属性にあるのをみつけて、システムの概要の方にドラッグ&ドロップします。
パーティクル属性の中になかったら、右上の+ボタンを押して
検索して追加します。
"パーティクル更新"にパーティクルの動きをつけるモジュールを追加します。
"NMS_MoveDepthPosition"です。
これは最初から用意されているものではない、自作したものです。
作っていきます。
マップ取得で、パーティクルの移動を受けとるVector型のピンと パーティクルシステムの位置を取得する"(エンジン)(オーナー)Position"を +ボタンを押して追加します。
その後、写真の通りにノードを組みます。
内容はコメントの通りです。入力されるVector型にパーティクルのインデックスを表わす"Execution Index"を乗算して新しいパーティクル程位置の差が大きくなるようにします。
それとパーティクルをスポーンさせた座標である"(エンジン)(オーナー)Position"と加算させます。 "Map Set"ノードに"(パーティクル)Position"を追加してそこに加算した内容を繋げて完成です。
NiagaraSystemの方に戻ります。
公開されたユーザーにfloat型の値を追加して"VoicePower"と名付けておきます。
パーティクルと音を流すアクターを後で作成するのですが、そこからこのfloat変数を操作することになります。
さっき作ったNiagaraモジュールをパーティクルシステムに追加します。
今回は高さを動かしたいので、Z軸の場所にさっき作ったユーザー変数を追加します(少し値を大きくしたかった(動きを大きくしたかったので)MultiplyFloatで2を乗算しています)
これでパーティクルの方は完成です。
パーティクルと音量を連携させるのを作っていきます。
アクターを作成し、NiagaraSystemComponentとAudioComponentを追加します。
NiagaraのNiagaraSystemAssetにさっき作ったパーティクルをセットします。
AudioComponentに使いたいWavファイルを設定します。自分は文章の読み上げがわかりやすいと思ったので(楽曲よりも、単純な読み上げ音声とかの方が音量の抑揚が大きくビジュアライズ化した時にわかりやすいと思います)
ここを使いました。とても自然な読み上げ音声を作成して、簡単にWavファイルにしてダウンロードできるので便利でした。
AudioComponentの詳細内にある"On Audio Single Envelope Value"を追加します(緑の+ボタンを押します)。
このイベントノードからは、現在流れている音の大きさがEnvelopeValueから出てくるようになっています。
それを"Set Niagara Variable(Float)"に繋げて、NiagaraComponentのユーザー変数である"VoicePower"に渡します。
これで完成です。
ブログ用です pic.twitter.com/esI27rM6HV
— 東京高速戦術@VR音ゲー制作中 (@kousoku_tactics) July 2, 2021
このようにできたでしょうか。
なにかわかりにくい事があったり、間違いがあればTwitterのDMとかにおねがいします。
[ この記事はブログ投稿者の憶測や考えによりつくられています。
よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]