PaperSloth’s diary

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

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の件もスッキリ解決できました。