moyasiエフェクト館

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


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

【UE4】エフェクトの色差分を、マテリアルインスタンスで作る

f:id:tktknkyo:20180106104053p:plain

今回は、UE4で作ったエフェクトの、色差分をマテリアルインスタンスで作る方法となります。

 

【マテリアルインスタンスでする理由】

【色の破綻を作りにくい?】

 

色の差分だけであれば、カスケードでの、Color系モジュールの数値を弄れば簡単に色

差分を作ることができます。

ただし、カスケードを一切使ったことの無い人が、エフェクトのデータをもらい、その色差分を作る場合に、困惑しやすいのではないか?という点や

エフェクト作った人が、エミッシブカラーで発光させていた場合

カスケード側で色を変える場合、その数値が解りにくいかな?というのや

色の調整で、カーブの曲線を手動で作っている場合は、その部分での破綻が置きやすいのでは?という点です。

 

【即座に色の変化が解りやすい】

f:id:tktknkyo:20180106104801p:plain

マテリアル側で、元となるマスターマテリアルに、VectorParameterにて色の変更が可能であれば

こちらのほうが直感的でなおかつ、バーを動かすだけで、ビューポートの色や、レベルに配置してあるものまで、自動的に変更されるので、変化が直ぐにわかりやすい利点もあるかなと。

 

【そのままBP上でも制御が可能】

またパラメータ化したパラメータで、色を変更するというのは言い換えれば

MIDを使いBP上で数値のみ変化させる事もできるので

particleのデータはもちろんのこと、マテリアルインスタンスのアセットを増やすことなく、色差分を作ることもできます。

マテリアルインスタンスで基本的に調整しつつ、BP上で条件によって微妙に色合いを変える、などの制御も可能になります。

 

【particleColorをDyanmicParameterのように使える】

マテリアルインスタンスイで色を変更するということは

色を変えるための基本的なparticleColorのRGBピンが空くということになります(αはおそらく使うと思いますが)

ということは、DyanamicParameterの変わりに使うことが出来るので。

DyanamicParametrを使用することのできないGPUparticleで、擬似的に使うことが可能であり

本来4つまでしか使えないのを、実質7つまで使える事にもなります。

 

【制御面の問題】

色差分毎に、マテリアルインスタンスのアセットが増えることになります

カスケードで制御する場合も、アセットが増えることに変わりはありませんが

問題は、マテリアルインスタンスは、メッシュに貼るものなど、非常に多数の用途で使われるので

ただでさえ増えやすい、インスタンスがかなり多数になってくるので、アセットの管理が大変になってしまいやすい問題もあります。

 

また、マテリアルインスタンスを使っている故に避けられないのが

元のマスターマテリアルを変更すると、その子のインスタンスが全て変わってしまう点です。

似たような新しく追加する程度ならいいのですが、変に弄ってしまうと、その子になっているマテリアルインスタンスが、全て変わってしまうので注意が必要です。

また、色の変化が、カスケードで制御する程の自由度を作りにくい点です。

汎用的なもので、単純に色を変えたい場合でも、カスケード側でのRGB変化を作りにくいので、色が若干短調になりやすいなどの欠点はあります。

 

【マスターマテリアルの構成】

【色を変えるだけの基本構造】

f:id:tktknkyo:20180106110103p:plain

particlecolorのRGBにつなげている部分を、VectorPaerameterにつなぎ直すだけで大丈夫です。

こうする事で、インスタンス側で色を変更する基本的な形になるのかなと。

 

ただ、流石にこれでは短調すぎます。

 

【色の変化を作る】

 

色が一つでは短調なので、発生してから、だんだん色が変化する仕様を追加します。

f:id:tktknkyo:20180106110548p:plain

VectorParameterを複製して、それぞれ「Linearinterpolate」に繋げます

このノードは、Lキーのショートカットキーで出すことができ

Alphaの数値が0ならA,1ならB、0.5ならAとBの平均を出すような処理になります

 

用途としては、ここに入力する数値が0→1に変化する場合

Aに接続している情報から、段々Bに接続している情報に移り変わります。

 

f:id:tktknkyo:20180106111101p:plain

実際に、再生中に色を変えたいので、「DynamicParameter」に接続します

ここはparticleColorでも可能です。

f:id:tktknkyo:20180106111331p:plain

カスケード上で、ここのカーブをこのように

寿命が0の時に数値は0

寿命が1の時に数値が1

というカーブを作ることで、エフェクトを再生した時に

AllColorINの情報の色から

AllColorOUTの情報の色に移り変わっていきます

ここのカーブ曲線はカスケード側で設定するのが基本になりますが。

f:id:tktknkyo:20180106111639p:plain

このように、パラメータ化した定数ノードとPowerと合わせることで

マテリアルインスタンス側で、このカーブ曲線を弄ることも可能になります。

「DyamicParametr」での変化が0~1に設定してあるのであれば

0より大きい数値であれば、はじめと終わりの数値は変わらず、途中の数字のみ変化するので、カーブ曲線を弄ることも可能になります。

 

エフェクト用のMIDについては、こちらの記事を参考にしてください。

tktknkyo.hatenadiary.jp

 

今回使用したテクスチャについては、こちらの記事を参考にしてください。

tktknkyo.hatenadiary.jp