環境
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の並び替えや削除もここから行います。
NodeのTips
続いてはノードに関するTipsを紹介します。
条件分岐
NiagaraにはIfノードがありますが、少し使い方が特殊です。
Materialでもifノードがありますね。
BlueprintだとBranchがそれに該当します。
さて、Niagaraのifノードが何が特殊かというと返す値が任意に選択できるというところです。
また、Niagara内には大なり小なりでの値の比較のノードはありません。
どんな型を設定したにせよ
ConditionがtrueならAの値が
ConditionがfalseならBの値が出力されます。
さらに特殊なのが出力Pinを複数追加可能なところです。
ぱっと見は複雑ですが、結果は同じでtrueならA falseならBの値が出力されます。
また、ifノードとは違いますが
boolのAND, OR, NOTとビット演算が用意されています。
Custom Hlslノード
続いて紹介するのはCustom Hlslノードです。
プログラマーやMaterialを触る方には馴染み深いノードですね。
ノード内に直接シェーダーコードが書けるノードになっています。
MaterialではCustomという名前のノードです。
MaterialのCustomノードと違ってノード内に直接記述する形になっています。
また、もう一つ特殊なのがこのノードは戻り値がvoidのみのようです。
そのため、値を返す場合はOutputPinで指定した値に代入する形になります。
コメントノード
Blueprint, Materialを触る方にはすごく馴染み深いノードですね。
しかし、残念ながらCキーで出てきません。
面倒ですがcommentと入力してノードを出しましょう。
使い方は説明するほどでもないので、省略します。
Convertノード
最後に紹介するのがConvertノードです。
Niagaraで最も便利なノードです。
正直BlueprintやMaterialにも欲しいです。
Convertという名の通り値の変換などに使います。
よくあるのはVectorをXYZに分解するなどの用途が有りますね。
これはBlueprintにもあります。
このConvertノードの何が強力かというとInput, OutputのPinを自由にカスタマイズできることです。
例① 座標の組み換え
XYZをYZXに組み替えたりするのがノード1つでできます。
Blueprintだとノードが2つになりますね。
例② バラバラな型への変換
こんなことをしたらプログラマーは大激怒ですが・・・
分解したVectorのZだけをintにするということもできます。
例③ 一軸のみの更新
入力Pinは2つで1つはXYに代入し、Zだけを更新ということが1つのノードでできちゃいます。
ちょっぴり便利ですね。
例④ Min, Maxの短縮
例えば範囲制限ありの乱数生成なんかは通常Blueprintでもこのように作りますね。
Blueprintの例
Blueprintでは直接値が入力できちゃうので、ノード1つで実現できるんですが
NiagaraのConvertノードを使うとこんな入力がスマートでしょう。
例⑤ 複数のPinの利用
Niagaraでは行列を扱うこともできるため、このように行列を作ることも出来ます。
ここではOutputPinは1つですが、複数にすることも出来ます。
試しに動かしてみた結果として入力、出力を20にしてもクラッシュしませんでした。
(管理しきれないので絶対に使いませんが)
Niagaraの現状のクラッシュについて
UE4.19.0時点での情報です。
正式リリースの際には修正されて直ることを祈ります。
どなたか修正してプルリク出していただけるとありがたいです。
Promote to Parameterでクラッシュする
Niagara Module Script上で変数をParameterに変換しようとするとクラッシュします。
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での簡単なTipsを幾つか紹介させていただきました。
まだまだ伝えたいことはあるのですが、一先ずここまでとします。
Convertノードがすごく便利なので色々と活用してみてください!