moyasiエフェクト館

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


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

【UE4】マテリアルでディゾルブエフェクト

f:id:tktknkyo:20180607204825p:plain

Verは4.18です

こういうオパシティマスクと、発光を組み合わせた様なものを、ディゾルブエフェクトというらしいです。

 

 

実際の動きはこんな感じになります。

また、カスケードなどで使いやすい様に、1~0の数値だけで調整できるようにしてます。

このエフェクトの作り方自体は載っていたのですが、数値の調整まではなかったので、その辺は自分で色々調べました。

 

全体の構図

f:id:tktknkyo:20180608052620p:plain

全体の構造はこの様になっています。

 

動きとしては、ノイズを元にオパシティマスクで消えていく部分と

消える前に、エミッシブカラーにより発光させています。

 

各パラメーターの動き

f:id:tktknkyo:20180608052937p:plain

ScalaParameterにしているのは、この3箇所です

 

1.全体の欠け具合を調整するパラメーター

名前はBaseParameter

こちらは主にParticleColorなどで1→0に動かすことを想定しています。

f:id:tktknkyo:20180608053655p:plainf:id:tktknkyo:20180608053715p:plain

左が0.6で、右が0.3です。

 

2.発光部分面積の大きさを調整するパラメーター

名前はEmissiveLine

こちらは、主にマテリアルインスタンスなどで、設定するのを想定しています。

f:id:tktknkyo:20180608053951p:plainf:id:tktknkyo:20180608054022p:plain

左が0.1で右が0.3です

この例では0.1と0.3ですが、実際に使う場合は0.1~0.2位が綺麗に見えやすくなるかと思います。

 

3.発光の掛かり具合を調整するパラメーター

名前はEmissiveLerp

こちらも、主にマテリアルインスタンスなどで、設定するのを想定しています。

f:id:tktknkyo:20180608054412p:plainf:id:tktknkyo:20180608054430p:plain

左が0で右が1です

変化が若干解りにくいパラメーターでもあるので、0か1のどちらかを推奨します。

体感的には、発光する面積を調整するパラメーターが小さい場合は高くしたほうが、大きい場合は小さくしたほうが綺麗に見えやすいと思います。

また、拡大すればするほど、数値は小さいほうが自然に見えやすくはなると思います、この辺は使う用途によって使い分けてください。

 

中身の解説

f:id:tktknkyo:20180608190822p:plain

まずはこの部分、この部分に、基準となる数値と、発光する幅を設定するパラメータが入れてあります。

3種のパラメータは解りやすいように省略します

・BaseParameter(以下BP)

・EmissiveLine(以下EL)

・EmissiveLerp(以下ELerp)

 

f:id:tktknkyo:20180608191110p:plain

赤枠にある、IFは、最初の発光部分のみなのか、オパシティマスクで消すのかどうかを判定しています。

Addの部分は、ELとBPを加算しています、その結果が1以上なのかどうかを判定。

1以上であれば、発光のみとなります(ELが0.2であれば、BPは0.8まではオパシティマスクで消さないことに)

 

1を切った場合に、IFの判定が代わり、ここからオパシティマスクで消していくことになります。

ただし、そのままでは0~1の数値で調整できないのでノードであれこれしてます。

f:id:tktknkyo:20180608192051p:plain

具体的にはこの部分です、ELを反転させたものを、BPから割り、その後Clampで0~1に

ELが0.2と仮定した場合、オパシティマスクでの消滅はBPが0.8→0で完全消滅させる必要があります(1~0.8は発光のみにする必要が)

反転で0.8にした数値を割ると0.8以上が1以上になります(超えた分はClampで消してます)

これにより、BPが0.8であれば1になり、0であれば0になります、同じ数値で除算すれば1になります。

これを、IFのA<Bに繋げることで、BP+ELが1を切るまでは、ELの発光のみを行い、1を切るとBPの数値により消滅していくようになります。

 

ELの数値によって、消え始めが遅くなる関係上、この数値が大きいほど、消える速度も速くなります、これは全ての数値を0~1で調整しやすくする為です。

 

今回、オパシティマスクが0で消滅させたほうがわかり易いので、オパシティマスクに繋ぐ直線に、0.3333をAddにより加算しています。

f:id:tktknkyo:20180608194004p:plain

 

発光部分

 

次はエミッシブで発光させる部分です。

f:id:tktknkyo:20180608194401p:plain

この部分のノードはこうなっています。

発光Lerp-AとBがありますが、これはELerpでの発光の2種類になります、切り替える必要が無ければいりませんが、どうせならと作ってみました。

 

f:id:tktknkyo:20180608200030p:plain

まずはLerp-Aの部分から

発光させる部分を0~1の数値で取得して、エミッシブカラーと乗算する事で、グラデーションの掛かった発光を作ります。

赤枠は、接続先が見えませんが、ELと繋がっています、ELは0.2として進めていきます。

基本左から右にどんどん繋いでいます

最初はELを反転します、これで0.8に

その次のAddは

f:id:tktknkyo:20180608200340p:plain

この部分の出力と繋がっています

 

 

その後のClampで0~1(1を超えた分を切り取り)の後に反転します

これで1以上になった部分は全て0になります

その後に、ELを割ったものをエミッシブカラーのベースと乗算して完成です。

 

内容がややこしそうだと思うので、中身を細かく...

最後の反転までは、エミッシブカラーで発光させる部分を取得する為の処理です、0は一切発光しないが、それ以上は発光させる。

発光させる部分というのは、オパシティマスクで消滅させる数値より、ELの数値(今回は0.2)高い以下という事です。具体的には0~0.2が該当します。

 

なので、ノイズと減算してる部分から、0~0.2の範囲を取得する必要があります、これ以上を切り取る必要があります。

 

この為に、反転したELを加算します、0以下は、オパシティマスクで消しているので、考慮する必要がありません、なので必然的に0.8を加算するので、0.8以上になります。

(0以上の数値に0.8を加算します)

ただ、0.8以上で上限があまりないので、Clampにより、0.8~1の間に抑えます

その後反転する事で0~0.2の数値を取ってくる事が出来ます、この数値だと少ないので、元のELで割る事で0~1になるので、これをエミッシブカラーと乗算します。

 

 

f:id:tktknkyo:20180608204642p:plain

つづいて、Lerp-Bの部分です。

赤枠は、エミッシブカラーで発光させる基本の色と接続しています

黄枠は、ELと接続しています

こちらは、グラデーションが殆ど無い版です。

 

真ん中にあるIFで、まず発光させる部分であるかどうかを判定します。

判定基準はノイズを引いた数値がELの数値以下であるかどうか、判定基準としてはLerp-Aとは変わりません、以上かどうかによって、定数の0or1を出力します。

 

f:id:tktknkyo:20180608210119p:plain

IFの後のこの三つのノード

発光させるだけであれば、IFとエミッシブカラーを乗算させるだけでもいいのですが、反転も組み合わせると、ちょっとだけグラデーションが出てきます。

この辺は好みでいいかと思います。

f:id:tktknkyo:20180608210721p:plainf:id:tktknkyo:20180608210758p:plain

ELが0.5でこの位の差になります、ほんのりグラデーションを与えます。

 

最後に、作ったLerp-Aと、BをLerpに繋げば完成です。

f:id:tktknkyo:20180608211144p:plain

 

今回は、エフェクトで使いやすいように0~1で調整できるように、を主体でしたが

0~1といえば当然テクスチャもそうなるので、ELやELerpな

どにも、ノイズテクスチャを適用してみれば、面白い模様にもなるのでは?と思っています。

 

f:id:tktknkyo:20180608212108p:plain

例えばこちら、ELerpに、 texturecoordinateのR情報を取ってきて適用したものです

中心付近でクッキリ変わっているのが解ると思います。