PaperSloth’s diary

主にゲーム開発関連についての記事を書きます。

UE4 Niagara 設定について

環境

UE4.19.0


Niagara Editorのショートカットキー登録について

Editor Preferencesを開いて
Keyboard Shortcuts > Niagara Editor
ここではBounds, Gridの表示などのショートカットキーが設定できます。

私はBlueprintと同一の操作であるCompileにF7キーを割り当てました。
このショートカットはNiagara Emitter, System, Script共通です。
f:id:PaperSloth:20180328211429p:plain


Niagaraの設定

続いての設定はProject Settings > Plugins > Niagara, NiagaraEditorです
Niagaraの方の設定がイマイチ分かっていないのですが、構造体と列挙型を設定する箇所があったので下図のように設定しました。
f:id:PaperSloth:20180328212330p:plain

続いてNiagara Editorの設定です。
f:id:PaperSloth:20180328212707p:plain
ここの部分が人によっては既にセットアップ済みだったりするようです。

私の環境では設定されておらず、Release BuildやGit上のUE4.19も試してみましたがそちらでも設定されていませんでした。
設定されていない状態で新規にNiagaraEmitterを作成すると下図のような状態になります。
f:id:PaperSloth:20180328212449p:plain

DefaultEmitter等を下図のように設定しました。
DefaultScriptの欄は何を入れるのが正しいのかわからなかったため空白のままにしています。
f:id:PaperSloth:20180328212908p:plain

DefaultEmitterを設定した状態でNiagara Emitterを新規作成すると
下図のように噴水のようなエフェクトが出てきます。
f:id:PaperSloth:20180328213038p:plain


NiagaraのNodeのショートカットキー登録

ProjectSettingsのNiagaraEditorからノードのショートカットキーの登録が出来ます。
これで作業が捗りますね!

ここではAキーでAddノードを呼び出すように設定しました。
Blueprint, Materialと同様にショートカットキー + 左クリックでノードが出るようになります。
f:id:PaperSloth:20180328214320p:plain

この調子でMaterial Editorと同じような設定にしていきましょう!
A:Add
C:Add Comment
D:Divide
E:Pow(Power)
I:if
L:Lerp
M:Multiply
N:Normalize
O:One Minus
R:Reflect Vector(MaterialではReflectionVector)
S:float (MaterialではScalerParameter)
V:Vector(MaeterialではVectorParameter)
1:float
2:Vector 2D
3:Vector
4:Vector 4

以上です!

ですが、これをProject毎に都度設定するのは面倒ですね。
そこで、下記を
(ProjectDirectory)\Config\DefaultNiagara.ini
にコピペして使ってください!

[/Script/NiagaraEditor.NiagaraEditorSettings]
DefaultSystem=None
DefaultEmitter=/Niagara/DefaultAssets/DefaultEmitter.DefaultEmitter
DefaultScript=None
DefaultDynamicInputScript=/Niagara/DefaultAssets/DefaultDynamicInputs.DefaultDynamicInputs
DefaultFunctionScript=/Niagara/DefaultAssets/DefaultFunction.DefaultFunction
DefaultModuleScript=/Niagara/DefaultAssets/DefaultModule.DefaultModule
GraphCreationShortcuts=(Name="Add",Input=(Key=A,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="Add Comment",Input=(Key=C,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="Divide",Input=(Key=D,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="Pow",Input=(Key=E,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="if",Input=(Key=I,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="Lerp",Input=(Key=L,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="Multiply",Input=(Key=M,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="Normalize",Input=(Key=N,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="One Minus",Input=(Key=O,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="float",Input=(Key=S,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="Vector",Input=(Key=V,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="Reflect Vector",Input=(Key=R,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="float",Input=(Key=One,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="Vector 2D",Input=(Key=Two,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="Vector",Input=(Key=Three,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
GraphCreationShortcuts=(Name="Vector 4",Input=(Key=Four,bShift=False,bCtrl=False,bAlt=False,bCmd=False))
bAutoCompile=True

UE4 Niagara SubUVについて

環境

UE4.19.0


SubUVの設定

今回はSubUV関連の作例として下図のような仮素材を使用します。
f:id:PaperSloth:20180328195831p:plain

Niagara Emitter, Systemから
Sprite Rendering内のSub Image Sizeを変更することで分割数を任意に指定できます。
f:id:PaperSloth:20180328200020p:plain

今回使用する仮素材では4分割なので
横2, 縦2でこのように分割して1の部分が表示されるようにします。
f:id:PaperSloth:20180328200234p:plain
f:id:PaperSloth:20180328200258p:plain

SubImageIndexのRandom呼び出し

SubImageIndexを使って作成するものに煙等がありますね。
1枚のテクスチャに幾つからの絵を用意して
それをランダムに描画することで1枚のテクスチャで色んな形の変化を表現することができます。

Cascadeでの例

Niagaraでの作例


これはNiagaraでは比較的簡単に実現できます。
既存の機能から見つけられなかったため
RandomSubUVというNiagara Module Scriptを自作しました。
f:id:PaperSloth:20180328200930p:plain

処理としてはSubUVの最大数を入力したらその範囲内でSubImageIndexを指定するものです。
最大数をわざわざ入力しないでも自動的に計算してとってこれないか考え中です・・・
f:id:PaperSloth:20180328201024p:plain

SubImageIndexはCommon Attributesの中にあります。
これでIndexを指定できます。
f:id:PaperSloth:20180328201142p:plain

あとはこれをEmitterのParticle Spawnに割り合てて分割最大数を入力すれば完成です。
f:id:PaperSloth:20180328201345p:plain

少し遠くて分かりにくいかもしれませんが、1~4の数字がランダムに生成されています。


SubUVアニメーション

Cascadeでの例

Niagaraでの作例

SubUVアニメーション用の自作Script作成


今回の作成方法があまり良くなくてモヤモヤが残っているのですが紹介させていただきます。
これも既存のModule Scriptが見当たらなかったため、Module Scriptを自作します。

既存のScriptで問題ないため、下記のModule Scirpt作成の手順は不要となりました。
詳細はページ下部を参照してください。


SubUVアニメーション用のSuvUVCurveというNiagara Module Scriptを作成しました。

f:id:PaperSloth:20180328202713p:plain


処理としてはfloatの入力値を渡しているだけです。
CurveにするのはEmitter側で行っています。
この作り方がとてもモヤモヤしているので、代替案を考え中です・・・

f:id:PaperSloth:20180328203049p:plain


EmitterのParticle Updateに先程のModule Scriptを追加します。
この段階ではただのfloatの入力値です。

f:id:PaperSloth:20180328203414p:plain

SubUVCurveの右側にある▽を押下します。
f:id:PaperSloth:20180328203552p:plain

すると入力の種類を範囲指定やCurveへ変更ができるため
Float from Curveを選択します。
f:id:PaperSloth:20180328203657p:plain

変更するとfloatの入力がCurveエディタになります。
f:id:PaperSloth:20180328203911p:plain

カーブエディタを編集して0から4まで値が変化するように指定します。
f:id:PaperSloth:20180328204115p:plain

しかし、CurveIndexが0のためこのままでは常に0番目しか取得できません。
そこで、次はCurveIndexの入力値を変更します。
CurveIndexの右側にある▽を押下します。
f:id:PaperSloth:20180328204251p:plain

CurveIndexをNormalized Ageに変更します。
f:id:PaperSloth:20180328204433p:plain

これで結果は下記のようになります。
1~4までアニメーションしているのが確認できますね。

Sub Image Indexの利用

Twitter上でmokoさんに情報を提供いただきました。感謝。

SubUVCurveという自作Module Scriptを作成していましたが、不要でした。
Paricles.Sub Image IndexというScriptを利用すれば問題ありません。
f:id:PaperSloth:20180329234140p:plain

使用方法は自作Scriptと同様です。
先ずはFloat from Curveに変更します。
f:id:PaperSloth:20180329234328p:plain

続いてCurveを適切に動きになるように編集します。
f:id:PaperSloth:20180329234524p:plain

最後にCurveIndexをNormalizeAgeに変更すれば完成です。
f:id:PaperSloth:20180329234737p:plain


まとめ

NiagaraでもSubUVを編集して炎や煙が作れることがわかりましたね。

ただ、自作したModuleの汎用性が悪く正しいやり方ではなさそうなのが気がかりです。
もっとスマートなやり方が分かる方はコメントやTwitterで教えていただけると助かります。

無駄な自作Moduleの件もスッキリ解決できました。

UE4 Niagara Tips

環境

UE4.19.0


これまでに書いた記事一覧

Niagara入門 UE4.18で作られたチュートリアルになぞった内容です。
Niagaraのハンズオンになっています。Niagara全般に触れるきっかけになります。
papersloth.hatenablog.com

Niagaraの設定についてです。
新規にNiagara Emitterを作成した時にMaterialが貼られていなかった人は必読です。
上手く動作していない場合だとノードのショートカットが動作しないので
ここで登録を終えてしまいましょう。
papersloth.hatenablog.com

CascadeからNiagaraへの移行ガイドのような記事です。
Cascadeで用意されていたものがNiagaraでは何に該当するのかを書きました。
Cascadeを触ったことがある人は一度目を通すといいかもしれません。
papersloth.hatenablog.com

NiagaraExtrasの紹介です。
手っ取り早くカッコいいエフェクトが作りたいという人向け。
学習用の資料としてもオススメです。
papersloth.hatenablog.com

NiagaraとBlueprintの連携についてです。
BlueprintからNiagaraを生成する方法について書きました。
papersloth.hatenablog.com

NiagaraFunctionScriptについてです。
Material Function等を触ったことがある人には直ぐに伝わると思います。
papersloth.hatenablog.com

SubUVを使ったアニメーションについてです。
炎や煙等を表現したいという方はこちらを読んでみてください。
papersloth.hatenablog.com

Mesh, Ribbonパーティクルについてです。
爆発の破片にメッシュを使うなど表現の幅が広がるので試してみてください。
papersloth.hatenablog.com


NiagaraTips

Niagaraを触る上での小ネタ集です。

PinのRename方法

Niagaraでノードを作成したものの最初はRename方法が分からず困りました。
Renameの方法はPin上で右クリックしたら出てくるWindowから行います。
Pinの並び替えや削除もここから行います。
f:id:PaperSloth:20180327213107p:plain

Niagara Emitter, Systemの背景を非表示にする方法

真っ白なエフェクトなんかは黒背景の方が見やすいですよね。
というわけで背景の変更方法です。
操作はEmitter, System共に同じ操作です。

先ずはWindow > Preview Scene Settingsを開きます。
f:id:PaperSloth:20180327213415p:plain

その中のShow Environmentをオフにすると背景を非表示にする事ができます。
f:id:PaperSloth:20180327213741p:plain

f:id:PaperSloth:20180327213811p:plain


NodeのTips

続いてはノードに関するTipsを紹介します。

条件分岐

NiagaraにはIfノードがありますが、少し使い方が特殊です。
f:id:PaperSloth:20180327214205p:plain

Materialでもifノードがありますね。
f:id:PaperSloth:20180327214239p:plain
BlueprintだとBranchがそれに該当します。
f:id:PaperSloth:20180327214430p:plain

さて、Niagaraのifノードが何が特殊かというと返す値が任意に選択できるというところです。
また、Niagara内には大なり小なりでの値の比較のノードはありません。
f:id:PaperSloth:20180327214600p:plain

どんな型を設定したにせよ
ConditionがtrueならAの値が
ConditionがfalseならBの値が出力されます。

さらに特殊なのが出力Pinを複数追加可能なところです。
ぱっと見は複雑ですが、結果は同じでtrueならA falseならBの値が出力されます。
f:id:PaperSloth:20180327214925p:plain

また、ifノードとは違いますが
boolのAND, OR, NOTとビット演算が用意されています。
f:id:PaperSloth:20180327222430p:plain

Custom Hlslノード

続いて紹介するのはCustom Hlslノードです。
プログラマーやMaterialを触る方には馴染み深いノードですね。
ノード内に直接シェーダーコードが書けるノードになっています。
f:id:PaperSloth:20180327215257p:plain

MaterialではCustomという名前のノードです。
f:id:PaperSloth:20180327215426p:plain

MaterialのCustomノードと違ってノード内に直接記述する形になっています。
また、もう一つ特殊なのがこのノードは戻り値がvoidのみのようです。

そのため、値を返す場合はOutputPinで指定した値に代入する形になります。
f:id:PaperSloth:20180327215610p:plain

コメントノード

Blueprint, Materialを触る方にはすごく馴染み深いノードですね。
しかし、残念ながらCキーで出てきません。

面倒ですがcommentと入力してノードを出しましょう。
f:id:PaperSloth:20180327215823p:plain

使い方は説明するほどでもないので、省略します。

Convertノード

最後に紹介するのがConvertノードです。
Niagaraで最も便利なノードです。
正直BlueprintやMaterialにも欲しいです。
f:id:PaperSloth:20180327220019p:plain


Convertという名の通り値の変換などに使います。
よくあるのはVectorをXYZに分解するなどの用途が有りますね。
f:id:PaperSloth:20180327220216p:plain

これはBlueprintにもあります。
f:id:PaperSloth:20180327220332p:plain

このConvertノードの何が強力かというとInput, OutputのPinを自由にカスタマイズできることです。

例① 座標の組み換え
XYZをYZXに組み替えたりするのがノード1つでできます。
f:id:PaperSloth:20180327220544p:plain
Blueprintだとノードが2つになりますね。
f:id:PaperSloth:20180327220756p:plain

例② バラバラな型への変換
こんなことをしたらプログラマーは大激怒ですが・・・
分解したVectorのZだけをintにするということもできます。
f:id:PaperSloth:20180327220906p:plain

例③ 一軸のみの更新
入力Pinは2つで1つはXYに代入し、Zだけを更新ということが1つのノードでできちゃいます。
ちょっぴり便利ですね。
f:id:PaperSloth:20180327221123p:plain

例④ Min, Maxの短縮
例えば範囲制限ありの乱数生成なんかは通常Blueprintでもこのように作りますね。
f:id:PaperSloth:20180327221428p:plain

Blueprintの例
f:id:PaperSloth:20180327221507p:plain

Blueprintでは直接値が入力できちゃうので、ノード1つで実現できるんですが
NiagaraのConvertノードを使うとこんな入力がスマートでしょう。
f:id:PaperSloth:20180327221709p:plain

例⑤ 複数のPinの利用
Niagaraでは行列を扱うこともできるため、このように行列を作ることも出来ます。
f:id:PaperSloth:20180327221903p:plain

ここではOutputPinは1つですが、複数にすることも出来ます。
試しに動かしてみた結果として入力、出力を20にしてもクラッシュしませんでした。
(管理しきれないので絶対に使いませんが)


Niagaraの現状のクラッシュについて

UE4.19.0時点での情報です。
正式リリースの際には修正されて直ることを祈ります。
どなたか修正してプルリク出していただけるとありがたいです。

Promote to Parameterでクラッシュする

Niagara Module Script上で変数をParameterに変換しようとするとクラッシュします。
f:id:PaperSloth:20180329235945p:plain
EdGraphNode.cpp内のclass GetGraph関数で動作が停止します。

呼出履歴を見るとNiagaraNodeInput.cpp内でUNiagaraNodeInputのSetDataInterfaceが呼ばれるのですが
この時にDataInterface, InDataInterfaceがnullなのが気になりますね。

void UNiagaraNodeInput::SetDataInterface(UNiagaraDataInterface* InDataInterface)
{
	if (DataInterface != nullptr)
	{
		DataInterface->OnChanged().RemoveAll(this);
	}
	DataInterface = InDataInterface;
	if (DataInterface != nullptr)
	{
		DataInterface->OnChanged().AddUObject(this, &UNiagaraNodeInput::DataInterfaceChanged);
	}
	DataInterfaceChanged();
}

Niagara Systemを開いている状態でEditorを閉じるとクラッシュする

エディタはクラッシュするんですが、Editorを閉じた後にクラッシュダイアログが出て
作業データへの影響も特になさそうなので問題はあまりないかもしれません。
クラッシュダイアログが出てドキッとしますが・・・

NiagaraComponent.cpp内のGetAllocatedSize内でRendererに不正な値が入っててクラッシュするようです。

uint32 FNiagaraSceneProxy::GetAllocatedSize() const
{ 
	uint32 DynamicDataSize = 0;
	for (NiagaraRenderer* Renderer : EmitterRenderers)
	{
		if (Renderer)
		{
			DynamicDataSize += Renderer->GetDynamicDataSize();
		}
	}
	return FPrimitiveSceneProxy::GetAllocatedSize() + DynamicDataSize;
}

Niagara Systemを開いて、閉じた後にEditorを閉じるとクラッシュする

先程と似た問題ですがこの操作を行った場合はRendererがnullになってクラッシュします。
こちらも同様にデータへの影響はなさそうです。
なんにせよNiagara Systemを編集するとエディタを閉じた時にクラッシュダイアログが出るようですね。


まとめ

Niagaraでの簡単なTipsを幾つか紹介させていただきました。
まだまだ伝えたいことはあるのですが、一先ずここまでとします。

Convertノードがすごく便利なので色々と活用してみてください!

UE4 Niagara Function Scriptについて

環境

UE4.19.0


Niagara Function Scriptについて

Functionという名前がついていることからある程度予測できそうですね。
そして、その名前から予測できた内容と恐らく合っていることでしょう。

Niagara Function Scriptは
Material FunctionのNiagara
Blueprint Function Libraryの1つのFunctionのようなものです。

複数のNiagara Module Scriptで再利用可能な関数のことです。


Niagara Function Scriptを使ってみる

ちょっと良い例が浮かばなくて申し訳ないですが、使い方の雰囲気だけ伝わると幸いです。

試しにNiagara Function Scriptを作ってみましょう。
f:id:PaperSloth:20180327003333p:plain

AddUpVectorという名前のFunction Scriptを作成しました。
f:id:PaperSloth:20180327003945p:plain

開いてみると下図のようにInputとOutputがあります。
f:id:PaperSloth:20180327004011p:plain

今回は練習用なので特に中身に意味はないのですが
入力されたベクトルのZに任意の値を足す関数です。
f:id:PaperSloth:20180327004450p:plain

呼び出し方法は下図のようにNiagara Module Script内で関数名を入力することで呼び出しができます。
f:id:PaperSloth:20180327004822p:plain
f:id:PaperSloth:20180327004812p:plain


Particleの速度を取得してそこにSpeedで指定された値をZ軸にのみ足す処理を作ってみました。
f:id:PaperSloth:20180327005044p:plain

これをNiagara ExtrasにあるEmitterのUpdateに追加した結果が下記になります。
ここではSpeedに10を与えています。


まとめ

Niagara Function Scriptの例としては良くなかったのですが、使い方のイメージは伝わったでしょうか?

実用的な関数の例はNiagara, Niagara ExtrasのContentフォルダを覗いてみてください。
SlerpQuaternionやEularToQuaternionなど実用的な関数が沢山登録されています。

UE4 NiagaraExtrasについて

環境

UE4.19.0


概要

NiagaraにはNiagara Pluginとは別にNiagaraExtrasというプラグインがあります。
このプラグインがサンプルとしてすごく参考になるので紹介します。


NiagaraExtrasの有効化

NiagaraExtrasはNiagaraと同じPluginsのFXカテゴリにあります。
有効化した際にはエディタの再起動が必要になります。
f:id:PaperSloth:20180326232701p:plain


NiagaraExtrasPluginの見方

ContentBrawser上でShow Engine ContentとShow Plugin Conentを有効化します。
これでEngineにインストールされたPluginの一覧を見ることが出来ます。
f:id:PaperSloth:20180326232835p:plain

ContentBrawserを下にスクロールしていくとNiagaraExtras Contentがあります。
f:id:PaperSloth:20180326233031p:plain


NiagaraExtrasとは

さて、ようやく本題に入ります。

実はNiagaraExtrasにはC++ソースコードが含まれていません。
その代わりにNiagaraのサンプルと便利なNiagara Function ScriptとNiagara Module Scriptが含まれています。

サンプルというのはNiagara Emitterで、これを開くだけで圧巻です。
f:id:PaperSloth:20180326233700p:plain

以下がサンプルの実行結果です。

なんだか弾幕シューティングみたいですね!

これを少しいじるだけで下記のようなエフェクトが簡単に作れます。



Niagaraを触り始めたけど、なかなか上手く作れないという人はNiagara Extrasを参考にして色々なエフェクトを作ってみてください!
f:id:PaperSloth:20180326234256p:plain

UE4 NiagaraとBlurprintの連携

環境

UE4.19.0


概要

今回はNiagaraActor, NiagaraComponentについても軽く触れます。

前回と前々回の記事も参考にしてください。
前回
papersloth.hatenablog.com
前々回
papersloth.hatenablog.com


Niagaraと連携するためのノード

f:id:PaperSloth:20180326223627p:plain

Niagaraを利用する上で使うノードは基本的には上記の3つです。
これらはNiagaraFunctionLibraryの中に定義されています。
Engine\Plugins\FX\Niagara\Source\Niagara\Public\PublicNiagaraFunctionLibrary.h
Engine\Plugins\FX\Niagara\Source\Niagara\Private\NiagaraFunctionLibrary.cpp
NiagaraParameterCollectionはまだ解析できていないため、今回は説明を省かせていただきます。

Cascadeを利用したことがある方は先程のノードを見ただけでピンときたかもしれません。
実は今まで何度も使っているノードと使い方が一緒なんですね。
f:id:PaperSloth:20180326224404p:plain

Spawn - AtaLocationはその指定した場所にエフェクトを生成します。
Spawn - Attachedは指定したComponentにエフェクトのコンポーネントを追加します。


BlueprintからNiagaraを生成する

Level BlueprintでNiagaraを生成してみました。
この時にSystem Templateに指定するのはNiagara Systemになります。
f:id:PaperSloth:20180326225536p:plain

今回はサンプルのNiagara Emitterを登録しただけのNiagara Systemです。
実行結果は下記のようになります。

これさえ分かればあとはヒット時の処理でヒットエフェクトを出したり
攻撃時の処理で斬撃エフェクトを出したりできるようになりますね。


既存のBlueprintにNiagaraをアタッチする

キャラクターBlueprintがあって、そのBlueprintにエフェクトをアタッチしたい場合の例を紹介します。
ロボやジェットパックのブーストエフェクトとかとかですね。
f:id:PaperSloth:20180326230609p:plain

方法① NiagaraComponentを追加する
AddからNiagaraを選択してNiagaraComponentを追加するパターンです。
これもCascadeと使い方は同じなので直感的ですね。
f:id:PaperSloth:20180326230841p:plain

方法② Spawn System Attachedを使って任意のタイミングで追加する
f:id:PaperSloth:20180326231237p:plain

今回はMeshにNiagaraComponentを追加した場合です。
BeginPlayで行っているので、動きとしては特別なことはありませんが
アイテムを拾ったときなどタイミングは様々ですね。



今回はBlueprintからの呼び出しについて紹介しました。
Cascadeを触ったことがある人にはおなじみの内容でしたね。
他にもCascadeと変わっていない部分が幾つかあるので、Cascadeを触ったことがある人なら直ぐに馴染めます!

UE4 CascadeからNiagaraへ

環境

UE4.19.0


概要

Cascadeは触ったことがあるけど、Niagaraは初めてという人向けです。
Cascadeについては知っている前提で書いています。

また、手っ取り早く何か動かしたいという方はこちらも参考にしてください。
UE4 Niagara入門 - PaperSloth’s diary


CascadeNiagaraの画面の違い

CascadeNiagara System

先ずは従来のCascadeの画面
f:id:PaperSloth:20180326001237p:plain

そして、それに該当するのが
Niagara Systemです。
f:id:PaperSloth:20180326001525p:plain
f:id:PaperSloth:20180326001530p:plain

しかし、Niagara Systemを新規作成した段階では空の画面が表示されます。
f:id:PaperSloth:20180326001633p:plain

CascadeNiagara Emitter

新規作成したCascadeNiagara Systemの違いはEmitterの有無です。
CascadeのEmitterとはこれですね。
f:id:PaperSloth:20180326001830p:plain

Cascadeでは複数のEmitterを組み合わせてヒットエフェクトや爆発エフェクト等を作成しますね。
これはNiagaraも同様です。
しかし、Niagaraは個々のEmitterは別アセットとして持つことになります。

それがNiagara Emitterです。
f:id:PaperSloth:20180326002035p:plain

Niagara SystemにNiagara Emitterを追加する方法は2つあります。
方法① Niagara SystemのTimelineにNiagara EmitterをDrag & Dropする
f:id:PaperSloth:20180326003235p:plain

方法② Timelineの+Trackから追加する
f:id:PaperSloth:20180326003350p:plain

CascadeのModuleとNiagara Module Script

Cascadeでのパラメーター調整はModuleを使用して行いますね。
CascadeでのModuleは赤枠で囲ったパラメーター一つ一つがModuleですね。
f:id:PaperSloth:20180326002543p:plain

続いてNiagaraでのModuleです。
Niagara Emitterの赤枠で囲ったパラメーター一つ一つがNiagara Module Scriptです。
f:id:PaperSloth:20180326002912p:plain

Niagara Module Scriptは下記から追加することが出来ます。
f:id:PaperSloth:20180326004919p:plain

CascadeNiagaraのアセットの違い

一旦ここまででまとめます。
CascadeのAsset1つにおさまっていたものがNiagaraでは分離されています。

CascadeNiagara System
CascadeのEmitter → Niagara Emitter
CascadeのModule → Niagara Module Script

実際にNiagaraで使用しているModuleはもっと多いですが
大まかに下図の2つで結果は同じです。
f:id:PaperSloth:20180326004049p:plain


Niagaraについて

これまでの説明だとNiagaraCascadeの1画面におさまっていたものが分離されて
Asset管理が面倒になっただけに見えます。

しかし、Niagara Module Scriptはとても魅力的なものです。

従来のCascadeは複雑な動きはVector Fieldを使用しないと作れないものもありました。
しかし、Niagaraでは動き、生成数、大きさ、回転等のあらゆるものをScriptで制御できるようになりました。

先程のNiagaraModuleを見てみましょう。
試しにこのAdd Velocityをダブルクリックで開いてみましょう。
f:id:PaperSloth:20180326004519p:plain

すると動きの処理はノードエディタで計算されていることが分かります。
これがNiagara Module Scriptの中身です。
f:id:PaperSloth:20180326004609p:plain


そして、このNiagara Module ScriptではSin, Cos等の計算も可能です。
そこで、新規に下図のようなNiagara Module Scriptを追加してParticle Updateに追加するだけで
f:id:PaperSloth:20180326005144p:plain

Vector Fieldなしでも渦のような動きを作ることが出来ます。


また、Niagara Module Scriptは他のNiagara Emitterでも再利用できます。
そのため、便利なNiagara Module Scriptを大量に作ってしまえば
それだけでほとんどのエフェクトの動きを作ることも出来てしまいます。


なんとなくCascadeからNiagaraに移行できそうな気がしてきましたか?
Niagaraは無限の可能性を秘めていますね!
さぁ!早速Niagaraを触ってみましょう!