moyasiエフェクト館

主にエフェクト関係の記事を上げていこうかと思います。


エフェクトに関係する記事上げてきます
エフェクト関係の記事の内容は緩く募集中
自分がわかる範囲であれば書いていこうかなと。

【Niagara】Niagaraでの具体的な作例&NPCやNPCIによる、データ一括管理

f:id:tktknkyo:20181209011901p:plain

この記事は、AdventCalendar2018の9日目の内容となります。

 

qiita.com

 

今回は、Niagaraで汎用性っぽいデータを作って使いまわしやすそうな例を。

このブログでは似たような事は少しはやった事があったので、今回は。

ちゃんと具体的な例で記事を書いていこうと思います。

マテリアル製作から、ナイアガラで完成させるまで書いていく予定です。

UE4のVerは4.21.0です。

 

今回、私の知識的な理由もあり、動きをVelocityを多様して作っています、ご了承ください。

 

【作成するもの】

今回は、エフェクトそのものが汎用的で使いやすいものとして、定番ですがHitエフェクトをつくろうと思います。

また、データを使いまわしやすいように作っておき、属性差分を作っていく所まで。

使い回し関係の所は、結構下の方からとなります。

 

 

 

【マテリアル制作】

今回は、汎用的に使いまわしたいので、いくつかの用途に使いやすそうな、マスターマテリアルを作り、そこからマテリアルインスタンスを複製するだけで、数を増やしやすいようなデータを目指します。

 

f:id:tktknkyo:20181202112022p:plain

三つのマスターマテリアル

左から

・MM_DistortionNoTilingBase

歪みで加工する前提のマスターマテリアルです。

歪みに使う画像は、タイリングしていないものを前提としています。

・MM_DistrtionTilingBase

歪みで加工する前提なのは、上と同じです。

ただしこちらは、歪みで使う画像はタイリングしているものを前提としています。

(この二つは、無理に纏める事もできますが、複雑になりそうなので分けています)

・MM_particleBase

所謂、単純にテクスチャを入れたマスターマテリアル。

 

MM_particleBase

 

最も単純なこちらから

 

f:id:tktknkyo:20181202134726p:plain

使用テクスチャは、この様な単純な粒子状のものを

 

f:id:tktknkyo:20181202112725p:plain

非常にシンプル、左下のテクスチャは、インスタンスで制御できるように、パラメータ化されている方のノードを使っています。(TextureSampleをパラメータ変換すると出てきます)

 

f:id:tktknkyo:20181202112854p:plain

右の方にあるこのノードは、不透明な物質との刺さり具合を軽減してくれるノードです。

簡単に言えば、違和感を少なくする為のノードです。

 

 

f:id:tktknkyo:20181202113034p:plain

詳細の方はこうなっています、ライトの影響を受けない加算合成です。

今回作成するマテリアルは、全てこの設定になっています。

 

 

MM_DistortionNoTilingBase

f:id:tktknkyo:20181202134726p:plainf:id:tktknkyo:20181202134908p:plainf:id:tktknkyo:20181202135048p:plain

使用テクスチャはこの三つです。

 

 

f:id:tktknkyo:20181209005708p:plain

 

マテリアルの全体図はこうなっています。

 

ある程度はコメントなどは残していますが、全体の機能としては、ベースのテクスチャを歪み用のテクスチャで歪ませる機能を持っているだけ、と認識してもらえばOKです。

歪みだけでなく、屈折の機能を入れてみたり、インスタンス上で確認しやすいようには作ってあります。

 

f:id:tktknkyo:20181202114605p:plain

まずはこの、歪みの処理をしている部分。

歪み用のテクスチャは、必要に応じて変えるのが多いと思いますので、パラメータ化しています。

歪みに使うために、RとGのみ取り出して、Multiplyで強度を調整し

最後にTexCoodとAddで、歪みを適用させています。

 

MultiplyのBの入力に繋がっている3つのノード

実際にエフェクトを作るだけであれば

f:id:tktknkyo:20181202115439p:plain

これで問題ありません。

 

f:id:tktknkyo:20181202115603p:plain

上はScalarParameter

右はStaticSwitchParameter

両方とも、インスタンスで確認しやすくする為に追加しています。

DynamicParameterはエフェクト上で数値操作できるのですが、インタンス上での確認がやや面倒なので、インスタンスで確認しやすくする為に配置しています。

 

f:id:tktknkyo:20181202135825p:plain

 

後は後半部分です。

歪みを適用したテクスチャ、これもパラメータ化したTextureSampleです

これを、マスク用の下にあるテクスチャとMultpleで乗算します。

その後は、ParticleColerとの乗算で色をNiagara上で設定できるようにして

Depthfadeで刺さり具合を軽減しています。

 

下の屈折部分は、ここでαにでた数値を利用します。

歪みの強度と同じ方式で、屈折も操作しやすいようにしておきます。

ここをMultplyで乗算したあと、Minで1を超えた分を1に抑えたあとに

OneMinusで反転させて、リフラクションに繋げます。

 

f:id:tktknkyo:20181202122907p:plain

 

 

この時点で歪んではいますが、実際に組み込んだ際に、ちゃんと背景歪みが上手く適応されてなかったので、ノーマルも追加します。

f:id:tktknkyo:20181209010008p:plain

基本的なノーマルの強度調整と特に変わりません

RとGを抜き取って、屈折の強度をとってきているものと、Multplyで乗算してから、Bチャンネルと混ぜてVectorに合成してます。

黄色枠は、そのままノーマルに接続してます。

 

MM_DistortionTilingBase

f:id:tktknkyo:20181202135202p:plainf:id:tktknkyo:20181202134948p:plainf:id:tktknkyo:20181202134726p:plain

使用テクスチャはこの三つです

f:id:tktknkyo:20181209011220p:plain



 

マテリアルの全体図はこんな感じになっています

先ほどのMM_DistortionNoTilingBaseからの流用で少しだけ違います。

 

f:id:tktknkyo:20181202123305p:plain

歪みに関するこの部分です。

こちらは、シームレスなテクスチャを歪みに使う前提の構造なので。

歪みのテクスチャをタイリングする処理を作っています。

ScalarParameterとTexCoodをMultiplyで乗算しておけば、インスタンス上でタイリング数を変化させることが可能です。

また、上の歪みに対するマスクとも乗算しています。

これは、移動量が大きくなりすぎて、移動しすぎるのを制御する為です。

f:id:tktknkyo:20181202123635p:plainf:id:tktknkyo:20181202123655p:plain

左が、歪みのマスクを使わない場合

右が、歪みのマスクを使った場合

 

NoTilingのマテリアルのように、歪みを加えたあとに、マスクと乗算する場合に、殆ど写らなくなりやすくなってしまうので、その為に歪み自体を制御しています。

f:id:tktknkyo:20181202135940p:plain



歪み適用部分後は、NoTilingから流用しています。

ノーマルへの適応も、ノイズに使ったテクスチャのRとGチャンネルを調整して使っています。

 

 【マテリアルインスタンス

f:id:tktknkyo:20181202134053p:plain

マテリアルインスタンス

作成したマテリアルインスタンスはこの四つ。

・MIA_Aura

親はMM_DistortionNoTilingBase

加算合成のオーラっぽいマテリアル

 

・MIA_Fog

親はMM_DistortionTilingBase

加算合成の煙用マテリアル

 

・MIA_Particle

親はMM_ParticleBase

加算合成の粒子マテリアル

 

・MIA_Ring

親はMM_ParticleBase

加算合成のリング状のマテリアル

 

今回はインスタンス自体でいじる必要があるのはMIA_Ringのみです

f:id:tktknkyo:20181202135336p:plain

インスタンスで、この様なテクスチャを適用すればOKです。

 

機能的にはこれだけでいいのですが、今回はインスタンスで確認しやすい仕様にしてあるので、少しだけそこにも触れておこうかと思います。

 

f:id:tktknkyo:20181202140152p:plain

MIA_Auraの方であれば、赤の部分のチェックをいれると、緑のチェックを入れれるようになります

緑のチェックをいれると、青の項目が出てくるので、ここにもチェックを入れると、右側の数値を調整できるようになります。

 

 

f:id:tktknkyo:20181202140524p:plainf:id:tktknkyo:20181202140716p:plain

数値を変えていくと、こんな感じに変わっていっていると思います。

 

ただ、今回のは確認しやすくするためなので、確認が終わったら、チェックを外しておきましょう。

チェックを入れていると、これからする、この部分をNiagaraで動かせなくなります。

 

【エミッターの作成】

エミッターを作る工程で、いくつかモジュールなど途中で作っていくので、ご了承を。

 

エミッターはエミッターでも、具体的にはNiagaraEmitterの事なので。

パーティクルを放出するもの、ではありますが。

最終的にエフェクトにそのまま使うエミッターとは少々違います。

そのまま最終的に使うエミッターの、元となるデータ、と考えてもらうと良いかもしれません。

マテリアルと、マテリアルインスタンスとの関係に近いと思います。

f:id:tktknkyo:20181202202148p:plain

NiagaraEmitterのアセット

 

まず、必要なものを考えましょう。

・飛び散る粒子

様々なエフェクトでの定番とも言えるエミッターです

当たった衝撃で、粒子が中心から外側に飛び出ます

 

・細長いライン

所謂レンズフレアのような、トゲトゲした描画です

エフェクト全体のメリハリをつけて、認識されやすくする大きなポイントです

 

・広がるリング

衝撃は、基本的には全ての方向に一定に広がるので、それをリングで表現します。

 

・オーラっぽいもの

これはやや言葉で表現しにくいのですが、上記の要素だけだと、物足りなさが出てくるので、それを補う為の表現...でしょうか

 

・グロウ

エフェクトを作っている方には定番だと思いますが、グロウです

用途的には、グロウとは外れているかもしれませんが、全体の色味を調整する重要なパーツとなります。

 

そこまで変わってる要素はなく、全体的にシンプルな構成になると思います。

 

 

f:id:tktknkyo:20181203114434p:plain

エミッター

今回は、エミッターのアセットは二つだけ作りました。

・NE_RadialVelocity

 外に向けて四方八方に飛び散るエミッターです。

 

・NE_SimpleSpawn

シンプルに中心に一つ発生させるエミッターです。

 

今回は少ないエミッターで作っていこうかと思います。

エミッターとしてのアセットを増やすのは、メリットもデメリットもあります。

 

NE_SimpleSpawn

 

f:id:tktknkyo:20181203151838p:plain

エミッターを作ろうとすると、4.21からはテンプレートを選べるようになっています。

とりあえずは、以前のVerで標準だったこのテンプレートから作りましょう。

 

初めに書いておきますが、このエミッターで何をしたいのかによって、どの様な設定にするのかは変わってきます、ご注意ください。

 

f:id:tktknkyo:20181203152619p:plain

エミッターの名前のとおり、シンプルにしたいので

赤線を引いている部分のモジュールを削除しましょう。

削除は、右側のゴミ箱のアイコンをクリックすればOKです。

 

f:id:tktknkyo:20181203152822p:plain

続きまして、次はモジュールを追加しましょう

EmitterUpdateにこのモジュールを追加します。

SpawnCountは、汎用性を考えて1に設定しています。

 

f:id:tktknkyo:20181203170245p:plain

その上にある、EmitterLifeCycleも調整しておきましょう。

MaxLoopCountを1に

これは、ループ回数で0の場合は無限ループになるので注意です。

 

NextLoopDuration

これはエミッターで発生を続ける時間のようなもので

SpaenRateで発生させ続ける場合は、この数値の時間だけ発生を続けます。

今回は、エミッターの発生時に一回だけ発生させるので、低めの数値を入れましょう。

 

f:id:tktknkyo:20181203154539p:plain

また、ParticleSpawnにある、ここも削除しておきましょう。

右の矢印から、Removeをクリックすれば消去できます。

 

f:id:tktknkyo:20181203155053p:plain

また、位置情報を消してしまったので、こちらで追加しておきましょう。

SetVariablesから、Particles.Positionを追加します。 

 

 

f:id:tktknkyo:20181203155217p:plain

この様な紫のが追加されていれば大丈夫です、自動で着くようになっています。

簡単に言えば、レベルに配置した場合の位置情報を持ってくれます。 

 

f:id:tktknkyo:20181203162835p:plain

ParticleUpdateにて、このモジュールを追加しておきましょう

これは、大きさを徐々に変化させるモジュールです。

 

右の矢印から

f:id:tktknkyo:20181203162952p:plain

Vector 2DFrom Float

を追加して、Floatで制御できるようにします。

 

f:id:tktknkyo:20181203163114p:plain

その後、下の方の矢印から

Float From Curve

を追加して、カーブで編集できるようにします。

 

f:id:tktknkyo:20181203163249p:plain

後で編集しやすいように、キーを右クリックして、両方ともAutoに設定しておきましょう。

 

f:id:tktknkyo:20181205055806p:plain

続いて、Colorの設定も少しだけしておきましょう。

編集をしやすくする為に、赤丸の部分をクリックしましょう、そうすると、カーブエディタで編集できるようになります。

 

f:id:tktknkyo:20181205060220p:plain

カーブエディタはTimeLineの横にあると思います、出ていなければ、ウインドウから開きましょう。

 

RGBは目のアイコンをクリックして、閉じた状態にしておきましょう。

個人的にですが、エミッターではRGBは全て1で設定しておくのがいいと思います。

今回はAのみ変えましょう、

 

f:id:tktknkyo:20181205060740p:plain

カーブのキーは、カーブエディタ上で、右クリックから出るメニューで出すことができます、

これを使い、Aを0から1になり、最後にまた0になる、という数値に設定しておきましょう。

 

f:id:tktknkyo:20181205061229p:plain

カーブを編集する際は、キーの補完をこの下線を引いてある部分で制御することが可能です。

黄丸は、個人的によく使う部分です

一番左・・・オート設定、とりあえずでカクついた動きにしたくないならこれ

真ん中・・・自身で設定、緩急を意図的に付けたい場合

3番目・・・直線、今回のように、途中は1で続けたい場合など

 

これで完了...と言いたいですが、少しだけ落とし穴があります

f:id:tktknkyo:20181205062057p:plain

これはBチャンネルです、RGBを消してキーを打っても、RGBA全てにキーを打たれますので、忘れずに消しておきましょう、選択してからDeleteで削除できます。

 

これでこのエミッター側の設定は終了です。

 

 

 

NE_RadialVelocity

 

f:id:tktknkyo:20181203151838p:plain

今回も、こちらのエミッターをベースに作ります。

このエミッターは、中心から外に無数のパーティクルを飛ばすものとなります。

 

f:id:tktknkyo:20181205153431p:plain

赤線を引いた部分のモジュールは削除しておきましょう。

 

このエミッターの基本的な動きになる、外側に放出する動き、をどう作るのか?が少々困ったので、自分なりの作り方で作っています。

もっとやりやすい作り方はありそうです...

 

f:id:tktknkyo:20181205153524p:plain

パーティクルの発生は、今回もSpawnBurstInstantaneousを使いましょう

発生数はとりあえず1000に

 

f:id:tktknkyo:20181205153715p:plain

こちらはNE_SimpleSpawnと同じように設定しておきましょう。

 

デフォルトにある、SphereLocationのモジュールが

球状に発生させるモジュールなので、これを使います。

 

この球状に発生させる位置を、Velocityに変換して、外側へ放出する動きにします。

その為に、今回はNiagara Module Scriptを作ります。

f:id:tktknkyo:20181203171201p:plain

 

 

f:id:tktknkyo:20181203171321p:plain

名前はNM_LocationVelocityと付けました

 

f:id:tktknkyo:20181203171443p:plain

こちらがモジュールの中身です。

早い話、位置を速度に変換する為です。

 

入力するModuleのパラメータはVector型とFloat型で

Vectorは、基準となる発生位置

Floatは、速度です(方向を正規化した後に乗算します)

 

間の三つのノードは

Subtractは、ベクトル減算により、中心からのベクトルを求めています

Normalizeは、正規化して、減算して求めたベクトルから、角度の情報のみ取得します

Multiplyは、角度にから速度を乗算して、それを最終的にVelocityに出力しています。

 

f:id:tktknkyo:20181203172124p:plain

先ほどのNM_LocationVelocityのモジュールを追加したら、WoldVectorに、Engine.Owner.Positionをドラッグ&ドロップで敵用しましょう。

その後、Sppedに数値を入れると、その速度で外に向けて動くはずです。

 

ちなみにですが、Engine.Owner.Positionは使わず0,0,0でも、プレビュー上では動きますが、レベルに配置した時におかしくなったりしますので、後で困ります...

 

このままで動き自体は良いのですが、発生位置の制御がしにくいと思いましたので、そこの制御もできるように組んでいきましょう。

 

f:id:tktknkyo:20181203172934p:plain

Particle.Spawnに、Particle.Positionを追加します。

 

f:id:tktknkyo:20181203172832p:plain

いま追加したものが、順番的に最後になるようにします。

上から順番に処理されますので、順番が違うとうまく動いてくれなくなります。

 

いま追加したものは、発生位置を、中心から特定の距離に配置する為のものです。

 

f:id:tktknkyo:20181203173309p:plain

最終的な構成はこうなるように目指します。

速度のVelocityから角度をを取ったあとに、その角度に対して、どの程度の距離に配置するのか?を設定できるようにします。

 

赤線を引いてありますが、ここはNiagara Dynamic Input Script(ND)を新しく作ったものを使っています。

 

f:id:tktknkyo:20181204172742p:plain

内容としては、VelocityをVector型のパラメータに変換するような内容です。

Velocityの情報をNormalizeで正規化して、方向のみの情報にしてから、Scaleとの名前にしてあるFloat型のパラメータを乗算して、中心からの距離とします。

正規化してから、そのVectorにFloatで乗算すると、中心からの距離となるのは、非常に便利なので、覚えておくと様々な場面で使えると思います。

 

NDでは、基本的に出力する情報に、Position等の、固定の数値にはしない方やりやすいです。

 

 

内容的には、Particle.Velocityも、Vector型のModuleのパラメータでも問題ないです。

f:id:tktknkyo:20181204173242p:plain

具体的にはこの様な感じです、この場合、エミッター側で、このVectorにVelocityをセットしてあげましょう。

 

 

f:id:tktknkyo:20181203173309p:plain

では、このNDの内容を説明したので、もう一度ここの部分に戻りましょう。

一番上のAddVector 、名前のとおり、Vector同士の足し算です。

Engine.Owner.Position + ND Velocity Vector

Engine.Owner.Position

は、上の方でも説明しましたが、このエミッターがレベル上などで配置されている位置を取得します。

よって、これを加算するのには、レベル上で配置した位置にキチンと配置させる為ですので、これ単体では、エディタ上では特に変化はありません。

 

ND Velocity Vector

こちらわ先ほどの説明のとおり、中心から一定距離に配置される仕組みとなっています

f:id:tktknkyo:20181205063807p:plain

こちらはデフォルトで入っているNDアセット、UniformとありMinとMaxの間のランダムとなります、ここはカスケード触っていた方なら解りやすいと思います。

 

これにより、配置した位置を中心に、10~20の距離にランダムに発生させる、という処理となります。

 

続いて、ParticleUpdateに、Particle.Velocityを追加しましょう

f:id:tktknkyo:20181205152541p:plain

これは、パーティクルの外へ向かう速度に減速処理を掛けます。

 

f:id:tktknkyo:20181205152754p:plain

ここの数値はこの様になっています。

最初のMultply.Vectorにて、現在の速度である、Particle.Velocityと、Float型のカーブを乗算して、速度をカーブで制御します。

 

このカーブでの制御部分は、Vectorのままでは制御しにくいので

VectorFlomFloatでFloat型に変換してから

FloatFromCurveでカーブを描いていきます。

 

これで、このカーブ沿って動きが変わります。

 

後は、NE_SimpleSpawnと同じように

PartixleUpdateと同じように、大きさが小さくなっていく処理と、Aが0→1→0となる処理を追加しておきましょう。

 

これでエミッターの設定は一旦終了です。

 

【システムの作成】

f:id:tktknkyo:20181205154107p:plain

漸く完成が見えてきました、作ったエミッターなどをシステムに登録して、エフェクトとして完成させます。

 

エミッター毎に数値の設定をしていっていますが、実際作るときは、全てのエミッターに仮として数値を入れておいてから。

最終的に全て表示している状態で、違和感が無いように数値を微調整していきます。

 

f:id:tktknkyo:20181205154438p:plain

実際にエミッターを登録していきます。

赤線は、 NE_RadialVelocity

黄線は、NE_SimpleSpawn

を使っています

 

 NE_RadialVelocity

f:id:tktknkyo:20181205155524p:plain

外側へ放出される粒子です。

エミッター自体で殆ど設定していますので、システム側で設定する項目はあまりありません。

f:id:tktknkyo:20181205155705p:plain

Colorのモジュールから、色の変更をしておきましょう。

エミッシブにて、Rに高い数値を入れて上げればOKです。

 

f:id:tktknkyo:20181205155932p:plain

LifeTImeや、SpriteSizeは動きを見ながらいい感じになるように設定しておきましょう。

 

f:id:tktknkyo:20181205160139p:plain

最後に、作ったマテリアルであるMIA_Particleを設定しておきましょう。

デフォルトのマテリアルとそこまで大きく変わりはありませんが。

 

 NE_Ring

f:id:tktknkyo:20181208184629p:plain

名前の通りリングです、それ以上でも以下でもありません。

 

これ移行は全てNE_SimpleSpawnから作ります。

 

まずは、見た目がそもそも違いすぎて確認しにくいので、マテリアルの設定をしましょう。

f:id:tktknkyo:20181208185114p:plain

適用するのはこの、MIA_Ringとなります。

基本は、マテリアル側から設定すると、設定途中で確認しやすいのでおすすめです。

 

 

SpriteSizeScale

次に大きさを変えましょう、こちらのモジュールを弄り、段々と大きくなるように設定しましょう。

f:id:tktknkyo:20181208185650p:plain

キーをクリックすると、上で時間と数値を直接入力できるので

時間0で値1

時間1で値1に設定して、徐々に拡大する動きに変化させます。

ただ、このままだと動きが地味すぎるので、カーブを弄りましょう

f:id:tktknkyo:20181208185840p:plain

カーブの左右の◆はドラッグ&ドロップで動かすことが出来ます。

また、この時カーブの設定がオートになっている場合でも、ユーザーに書き換えられます。

なので、エミッターのアセット自体では、オートにしておくと、何かと便利です。

カーブの設定は、感覚で所謂いい感じに設定しておきましょう。

 

 

SpawnBurstInstantaneous

f:id:tktknkyo:20181208190443p:plain

ここはパーティクルの発生数です、とりあえず6にしておきましょう。

 

SetVariables

f:id:tktknkyo:20181208190537p:plain

f:id:tktknkyo:20181208190817p:plain

ここで大きさを、生存時間をランダムにしておきましょう。

 

Color

f:id:tktknkyo:20181208190934p:plain

色の設定もしておきましょう、赤丸の所をクリックして、カーブエディタで編集すると楽です、黄色から赤になるような色合いに設定しました。

 

NE_Ringの設定は以上で終了です。

 

 

NE_Line

f:id:tktknkyo:20181208191458p:plain

細長いラインです、レンズフレアのような表現でもあります。

こちらもエミッターはNE_SimpleSpawnから

 

マテリアルは、MIA_Particleを使います

発生数は今回は10個程に設定しています

 

SetVariables

f:id:tktknkyo:20181208192529p:plain

寿命と、大きさを設定します

大きさは、細長くするのでXとYに別々の数値を入れておきます

 

 

SpriteSizeScale

f:id:tktknkyo:20181208192858p:plain

こちらでは、細長くなっていく動作にします。

このモジュールに初期で入っている数値は、黄色の矢印でリセットできるので

リセットしてから、Vector2でのカーブを再度入れて設定します。

 

 

Color

f:id:tktknkyo:20181208193232p:plain

色はリングと大体似たような設定で、黄色から赤になるように設定しつつ、エミッシブカラーで発光させましょう。

エフェクト全体で見た場合、結構印象に残りやすい部分ですので、発光は基本的に強めに設定しておきましょう。

 

 

NE_Glow

f:id:tktknkyo:20181208193814p:plain

グロウです、設定が最もシンプルなエミッターとなります。

 

NE_SimpleSpawnのエミッターを登録し

MIA_Particleを適用してください。

発生数は1です

 

 

SetVariables

f:id:tktknkyo:20181208194450p:plain

このエミッターでは、基本的にランダム性は必要ありません、設定はこの様になりました。

 

SpriteSizeScale

f:id:tktknkyo:20181208194052p:plain

構成としては、NE_Ringと基本的に変わりません、徐々に大きくなるようにしています。

 

 

Color

f:id:tktknkyo:20181208194322p:plain

このモジュールで色を設定していきますが、このエミッターではエミッシブで発光はさせません。

Rを1GBを0にして、後はAで色の調整をしています。

 

 

NE_Aura

f:id:tktknkyo:20181208195814p:plain

オーラっぽい何かです、今回はマテリアルの解説もこみこみゆえに、簡易的な作りであるので、その点はご了承ください。

 

マテリアルはMIA_Aura

エミッターはNE_SimpkeSpawn

発生数は2です。

 

 

SetVariables

f:id:tktknkyo:20181208200752p:plain

ここでの設定は、大きさや寿命辺を設定しておきます。

 

 

SpriteSize

f:id:tktknkyo:20181208201155p:plain

他のエミッターでもよくやってるパターンです

 

 

Color

f:id:tktknkyo:20181208201429p:plain

色は、カーブエディタで、黄色から赤への変化させつつ、エミッシブでの発光を入れておきましょう。

 

 

SetVariables(DynamicParameter)

f:id:tktknkyo:20181208202025p:plain

ここから、DynamicParameterの設定をしていきます。

カスケードでも同じような機能はあるので、UE4で作っている方にとっては、馴染み深いのでは?と思います。

初めて聞く方は、こちらの記事も参考にしてください。

【UE4】Dynamic Parameterを使ったフェードアウト - moyasiエフェクト館
tktknkyo.hatenadiary.j

【UE4】DynamicParameterにて、ノイズテクスチャを使ったフェードアウト - moyasiエフェクト館

 

f:id:tktknkyo:20181208202735p:plain

設定したカーブだとこんな感じになっています、BとAは使っていないので表示していません。

 

ここでの設定はとりあえずこのようになります。

 

 

f:id:tktknkyo:20181208203032p:plainf:id:tktknkyo:20181208203218p:plain

りフラクションを入れてあるので、エミッターや背景が歪んで表示されるようになります。

 

 これで漸く完成です。

 

 

そしてここから、データ管理、NPCやNPCIに関する内容に入っていきたいと思います。

一応ここからが、元々メインで書こうとしていた部分です。

 

【NiagaraParameterCollection】

簡単に言ってしまうと、Niagaraのパラメータを一括で制御できたりする機能です。

tktknkyo.hatenadiary.jp

 

基本的な使い方は、この記事でも紹介しています。

 

f:id:tktknkyo:20181208225829p:plain

まずは、NPCファイルを作ります、名前はNPC_Testと名づけます

今回は、生存時間の長さを調整するようにします。

 

f:id:tktknkyo:20181208230536p:plain

Float型のパラメータを作り、名前をLifeScaleに設定し、数値を1に設定します。

 

次に、エミッター側に適用します

NE_SimpleSpawnを開きます

f:id:tktknkyo:20181208231359p:plain

パラメータの部分から、先程作ったデータをここに入れます。

 

f:id:tktknkyo:20181208231807p:plain

LifeTImeの所に、先ほどのパラメータを追加しておきます

内容としては、元ある数値と、NPCのファイルをMultplyで乗算します。

この時点では特に何も変わりません、変わったらまずいです...

NE_RadialVelocityにも、同じように登録しておきます。

 

f:id:tktknkyo:20181208232656p:plain

この状態で、システムを開くとこうなっています。

先程登録したものが出ていません、右の緑の矢印をクリックすると、出てくるようになります。

 

ただし、この手法で、全てやっていると、手間が掛かります。

本来であれば、最初に登録しておくべきですが、この様な場合に便利な方法があります。

 

f:id:tktknkyo:20181208233314p:plain

処理が上から順番にされるというのを利用します。

下の赤枠が、新しく追加したLifetimeです。

処理としては、Lifetimeの数値を

既に設定されている数値と、NPCファイルを乗算した数値に設定する、という内容です。

NIagaraでは、既に設定されているパラメータも、このように引っ張ってくることが出来ます。

これも、NE_RadiusVelocityにも敵用しておきます。

 

再度システム側に戻ると、入れた情報が、ちゃんと入っているはずです。

この状態で、NPCファイルの数値を弄ると、システムの方のパーティクルの寿命が変わるようになっているはずです

f:id:tktknkyo:20181208234155p:plain

 

システムとエミッターは連動こそしていますが、既に入っているパラメータを変えた場合は、システム側でいじっている場合は、エミッター弄っただけでは更新されないので注意です。



【属性差分】

f:id:tktknkyo:20181209003807p:plain

 次は、火属性の属性差分を、簡易的にですが作ります

f:id:tktknkyo:20181209001757p:plain

 まずは、NS_HitNormalを複製して、名前をNS_HitFireに変えます。

 

煙なので、粒子程の発生数はないので、発生数は100程に設定します

大きさは、粒子より大きいので、50~75程に設定しておきます

f:id:tktknkyo:20181209003346p:plain

 

NE_RadialVelocityに、MIA_Fogのマテリアルを敵用します。

f:id:tktknkyo:20181209002140p:plain

 

Sprite Size Scale

f:id:tktknkyo:20181209002322p:plain

煙なので、拡大していく動きになるように設定します。

 

SetVariables

f:id:tktknkyo:20181209003118p:plain

NE_Auraと同じように、ここでDynamicParameterを設定していきます。

 

f:id:tktknkyo:20181209003027p:plain

カーブはこのように設定しました。

後は、違和感のないように、色味を調整すれば完成です。

 

【NiagaraParameterCollectionInstance】

最後に、こちらの敵用、運用も載せておきます。

 

f:id:tktknkyo:20181209004102p:plain

NiagaraParameterCollectionから作ることが出来ます。

 

f:id:tktknkyo:20181209004443p:plain

今回は、NormalとFireで二つ作ります。

このまま開いてもいいのですが、その前に敵用させましょう。

 

f:id:tktknkyo:20181209004653p:plain

システムを開き、SystemDetailsから、先程作ったNPCIアセットをドラッグ&ドロップなどで敵用させましょう。

 

NormalとFireの両方に適応させましょう。

 

f:id:tktknkyo:20181209005009p:plain

その後、NPCIアセットを開き、左のチェックボックスにチェックを入れて、数値を変更すると、NPCIアセットを敵用した方のみ数値が変動するようになります。

数値なら大体のものを変えることが出来るので、ここから歪みやパーティクル単体の大きさ、動く移動量などを制御することも可能です。

 

 

今回は比較的に長い記事となりました、ここまで読んでくださって有難うございます、間違え等ありましたら、拍手などでコッソリ教えていただけると幸いです。