【UE4】マテリアルでディゾルブエフェクト
Verは4.18です
こういうオパシティマスクと、発光を組み合わせた様なものを、ディゾルブエフェクトというらしいです。
#UE4
— moyasi@エフェクト勉強中 (@torisutamoyasi) June 7, 2018
ディゾルブは最終的にこんな感じ
調整用パラメータは3つあり、それぞれ0~1で変動するのを基本に
負の数値や1を超える数値も入るのは入ります。 pic.twitter.com/CIjURO46pS
実際の動きはこんな感じになります。
また、カスケードなどで使いやすい様に、1~0の数値だけで調整できるようにしてます。
このエフェクトの作り方自体は載っていたのですが、数値の調整まではなかったので、その辺は自分で色々調べました。
全体の構図
全体の構造はこの様になっています。
動きとしては、ノイズを元にオパシティマスクで消えていく部分と
消える前に、エミッシブカラーにより発光させています。
各パラメーターの動き
ScalaParameterにしているのは、この3箇所です
1.全体の欠け具合を調整するパラメーター
名前はBaseParameter
こちらは主にParticleColorなどで1→0に動かすことを想定しています。
左が0.6で、右が0.3です。
2.発光部分面積の大きさを調整するパラメーター
名前はEmissiveLine
こちらは、主にマテリアルインスタンスなどで、設定するのを想定しています。
左が0.1で右が0.3です
この例では0.1と0.3ですが、実際に使う場合は0.1~0.2位が綺麗に見えやすくなるかと思います。
3.発光の掛かり具合を調整するパラメーター
名前はEmissiveLerp
こちらも、主にマテリアルインスタンスなどで、設定するのを想定しています。
左が0で右が1です
変化が若干解りにくいパラメーターでもあるので、0か1のどちらかを推奨します。
体感的には、発光する面積を調整するパラメーターが小さい場合は高くしたほうが、大きい場合は小さくしたほうが綺麗に見えやすいと思います。
また、拡大すればするほど、数値は小さいほうが自然に見えやすくはなると思います、この辺は使う用途によって使い分けてください。
中身の解説
まずはこの部分、この部分に、基準となる数値と、発光する幅を設定するパラメータが入れてあります。
3種のパラメータは解りやすいように省略します
・BaseParameter(以下BP)
・EmissiveLine(以下EL)
・EmissiveLerp(以下ELerp)
赤枠にある、IFは、最初の発光部分のみなのか、オパシティマスクで消すのかどうかを判定しています。
Addの部分は、ELとBPを加算しています、その結果が1以上なのかどうかを判定。
1以上であれば、発光のみとなります(ELが0.2であれば、BPは0.8まではオパシティマスクで消さないことに)
1を切った場合に、IFの判定が代わり、ここからオパシティマスクで消していくことになります。
ただし、そのままでは0~1の数値で調整できないのでノードであれこれしてます。
具体的にはこの部分です、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により加算しています。
発光部分
次はエミッシブで発光させる部分です。
この部分のノードはこうなっています。
発光Lerp-AとBがありますが、これはELerpでの発光の2種類になります、切り替える必要が無ければいりませんが、どうせならと作ってみました。
まずはLerp-Aの部分から
発光させる部分を0~1の数値で取得して、エミッシブカラーと乗算する事で、グラデーションの掛かった発光を作ります。
赤枠は、接続先が見えませんが、ELと繋がっています、ELは0.2として進めていきます。
基本左から右にどんどん繋いでいます
最初はELを反転します、これで0.8に
その次のAddは
この部分の出力と繋がっています
その後の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になるので、これをエミッシブカラーと乗算します。
つづいて、Lerp-Bの部分です。
赤枠は、エミッシブカラーで発光させる基本の色と接続しています
黄枠は、ELと接続しています
こちらは、グラデーションが殆ど無い版です。
真ん中にあるIFで、まず発光させる部分であるかどうかを判定します。
判定基準はノイズを引いた数値がELの数値以下であるかどうか、判定基準としてはLerp-Aとは変わりません、以上かどうかによって、定数の0or1を出力します。
IFの後のこの三つのノード
発光させるだけであれば、IFとエミッシブカラーを乗算させるだけでもいいのですが、反転も組み合わせると、ちょっとだけグラデーションが出てきます。
この辺は好みでいいかと思います。
ELが0.5でこの位の差になります、ほんのりグラデーションを与えます。
最後に、作ったLerp-Aと、BをLerpに繋げば完成です。
今回は、エフェクトで使いやすいように0~1で調整できるように、を主体でしたが
0~1といえば当然テクスチャもそうなるので、ELやELerpな
どにも、ノイズテクスチャを適用してみれば、面白い模様にもなるのでは?と思っています。
例えばこちら、ELerpに、 texturecoordinateのR情報を取ってきて適用したものです
中心付近でクッキリ変わっているのが解ると思います。