PaperSloth’s diary

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

UE4 Chaos Niagaraを使ってみよう

環境

UE4.26.0 Preview 1
※まだPreviewのエンジンバージョンですので実プロダクトでの採用は非推奨です。
また、今回の記事では作成中に何度かエンジンがクラッシュすることがありました。
Previewの醍醐味(?)ですね。

概要

前回の記事ではStatic MeshをChaosのGeometryCollectionActorに置換して破壊するところまでを作成しました。
papersloth.hatenablog.com

今回はその続きです。
破壊されたところからエフェクトが発生するようにしていきます。

Niagaraを使用しますので、前準備として「Niagara」のPluginが有効になっていることを確認しましょう。
f:id:PaperSloth:20200926174314p:plain
余談ですが、UE4.26から追加される「Cascade To Niagara Converter」もどこまで上手くConvertしてくれるのか気になるところですね。


まずは現段階でNiagaraに追加されているChaos関連のModuleを見ていきましょう。
ChaosNiagaraのPlugin内には「ApplyChaosData」と「SpawnFromChaos」の2つのmoduleがあります。
f:id:PaperSloth:20200926171727p:plain
ApplyChaosDataはParticle Spawnから使用できて
SpawnFromChaosはEmitter Updateから使用できることが確認できました
f:id:PaperSloth:20200926172009p:plain
f:id:PaperSloth:20200926172051p:plain

他にも「ChaosDestrutionData」と「ChaosDestructionEvent」があり、これらはChaosNiagaraのPlugin内の
「NiagaraDataInterfaceChaosDestrution」内に定義されています。
f:id:PaperSloth:20200926173634p:plain
f:id:PaperSloth:20200926173739p:plain
f:id:PaperSloth:20200926173804p:plain
この2つはNiagaraEmitterに追加するModuleではなく
NiagaraSystem内のNiagara Overview Node内のSystem Settingsから使用します。
f:id:PaperSloth:20200926173840p:plain

Niagaraで煙のエフェクトを作成

まずはChaosと紐付けるためのNiagara Emitter, Niagara Systemを作成します。
Content Browser上で右クリックして「FX -> Niagara Emitter」を選択します。
f:id:PaperSloth:20200926174048p:plain

既存のTemplateからEmitterの作成を選択して
f:id:PaperSloth:20200926174152p:plain

「Omnidirectional Burst」をベースに作成していきます。
f:id:PaperSloth:20200926164554p:plain

名前は「NE_Smoke」としました
f:id:PaperSloth:20200926164653p:plain

煙のMaterialは「Starter Content」に含まれている「M_smoke_subUV」を使用します。
NE_SmokeのRender -> Sprite RendererのMaterialをM_smoke_subUVに更新します。
f:id:PaperSloth:20200926164808p:plain

SubUVを含んだMaterialですので、同じくSprite Renderer内の
「Sub Image Size」を「X: 8.0, Y: 8.0」に設定して「Sub UV Blending Enabled」にチェックを入れます。
f:id:PaperSloth:20200926170753p:plain

続いて「Particle Spawn」に「Sub UVAnimation」Moduleを追加します。
f:id:PaperSloth:20200926171440p:plain

このままでは煙が小さいため、サイズを変更します。
強引なやり方ですが「Particle Update」の「Scale Sprite Size」の
「Scale Curve」を「10.0」にします。
これで10倍のサイズの煙になったと思います。
f:id:PaperSloth:20200926175052p:plain

また、重力がかかって徐々に落下するエフェクトになっていますが
こちらは今回不要ですので「Particle Update」の「Gravity Force」を削除します。
※Gravity Force Moduleを選択してDeleteキーでも可
f:id:PaperSloth:20200926175154p:plain

最後に「Thumbnail」を押下してアイコンの更新を行った後に
「Apply」で変更を適用して保存して煙のエフェクトのベースは完成です。
f:id:PaperSloth:20200926175322p:plain

NiagaraとChaosの連携

※以降の手順でChaosとの連携周りでエンジンがやや不安定です。
前置きが長くなりましたがようやくChaosとの連携に入ります。

まずは先程作成したNiagara Emitterですが、そのままではLevelに配置ができないため
「NE_Smoke」を選択して右クリックで「Niagar System」を作成します。
f:id:PaperSloth:20200926175904p:plain

名前は「NS_Smoke」としました。
f:id:PaperSloth:20200926180013p:plain

NS_Smokeを開いてChaosとの連携のためのModuleを追加していきます。
まずは「Emitter Update」に「Spawn from Chaos」を追加します。
f:id:PaperSloth:20200926180112p:plain

Chaosをベースにエフェクトの生成処理を行うため、不要になった
「Spawn Burst Instantaneous」を無効化します。
(Moduleの右のチェックボックスのチェックを外す)
f:id:PaperSloth:20200926180239p:plain

Niagara Systemからは大元のNiagara EmitterのModuleを削除することはできないため
不要な場合は無効化することで対応します。
Niagara SysmteからはEmitterに対してModuleの追加とPropertyの変更のみが可能です。

次にChaosとの連携のために必要なModuleとして
「Particle Spawn」に対して「Apply Chaos Data」を追加します。
f:id:PaperSloth:20200926180440p:plain

Niagaraでは「Spawn from Chaos」か「Apply Chaos Data」のModuleを追加した時点で
自動的にNiagara Overview Nodeの「User Parameters」内に
「Chaos Destruction Data」が追加されます。
f:id:PaperSloth:20200926181009p:plain

ひとまずここまでの作業でNiagaraとChaosの連携に関しての動作確認は可能です。
クラッシュが怖いので、一度保存してから
GC_Chair」がLevelに存在することを確認した上で
作成した「NS_Smoke」をLevelに配置してみましょう。

以下のように衝突時に煙のエフェクトが発生することが確認できれば成功です。
f:id:PaperSloth:20200926182012g:plain


ここまでで動作することの確認が出来ましたが
ChaosとNiagaraの両方をLevel上に配置していると管理しにくいためBlueprintにまとめてしまおうと思います。

ChaosとNiagaraをまとめたBlueprintの作成

新規に「Blueprint Class」を作成します
f:id:PaperSloth:20200926182318p:plain

親Classには「Actor」を選択します。
f:id:PaperSloth:20200926182352p:plain

名前は長いですが「BP_LinkingChaosAndNiagara」としました。
f:id:PaperSloth:20200926182552p:plain

Blueprintを開くと新規に2つのComponentを追加します。
「Geometry Collection」Componentと
f:id:PaperSloth:20200926182650p:plain
Niagara Particle System」Componentです。
f:id:PaperSloth:20200926182723p:plain

「Geometry Collection」を選択して「Rest Collection」に
GC_Chair」を設定します。
f:id:PaperSloth:20200926182855p:plain

続いて「Niagara」を選択して「Niagara System Asset」に
「NS_Smoke」を設定します。
f:id:PaperSloth:20200926182940p:plain

あとは先程同様に「BP_LinkingChaosAndNiagara」のBlueprintをLevelに配置して動作することを確認しましょう。


次にエフェクトの発生方法や発生数の調整についてです。
再び「NS_Smoke」を開いて作業を行っていきます。
「Chaos Destruction Data」ではNiagaraとChaosの連携周りの様々なパラメーターを編集することが可能です。
例えば
「Solver -> Solver Data -> Data Source」ではエフェクトの生成に関するオプションの設定ができます
f:id:PaperSloth:20200926181532p:plain

Collision Data
f:id:PaperSloth:20200926191211g:plain
Breaking Data
f:id:PaperSloth:20200926191107g:plain
Trailing Data
f:id:PaperSloth:20200926191009g:plain

まとめ

長くなりましたが、以上です。
Chaosに関しては私自身まだまだ分からないことだらけですが、コミュニティ全体で情報を出し合って盛り上げていければと思います。
今回の作例でクラッシュする部分についても設定ミスによる原因がいくつかありそうな気もしますので
気付いた点などがあればTwitter等でリプやDMなどを投げていただければと思います。