moyasiエフェクト館

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


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

【UE4】インプットデータ~Paticle Relative Time

f:id:tktknkyo:20180526142848p:plain

マテリアルのノードの一つである「Particle Relative TIme」

名前の時点で、大体想像つきそうな気がします

マテリアルでの詳細としては

f:id:tktknkyo:20180526143146p:plain

この様な事になります。寿命によって0→1に変化する数値ですね。

ただ説明なだけだと、公式を見れば済む、の一言で終わってしまうので、自分なりに考えたり、サンプルのアセット覗いて知った事などを、書いていこうと思います。

 

Lerpと繋ぐ

f:id:tktknkyo:20180526143517p:plain

とりあえず、で解りやすい内容だとLerpと繋ぐのが非常に解りやすいかと思います。

単純にAからBに変化します

 

Scala Parameterと併用すれば、何処から何処まで変化させるか、をマテリアルインスタンス側で制御できるようになります、当然BPで変化させるのも可。

f:id:tktknkyo:20180526143701p:plain

 

 

f:id:tktknkyo:20180526144723p:plain

Texture Sampleと合わせると、画像を変化させる結果に。

 

Paticle Relative Time自体は、基本的に0から1に変動させているだけなので、DynamicParameterで基本的に代用が出来ます。

Dyamic Parameterについてはこちらの記事で。

tktknkyo.hatenadiary.jp

tktknkyo.hatenadiary.jp

ただDyamicParameterが使えないGPUの場合を考慮すると。(DyamicParameterの数値を変化させる、Parameterモジュールが機能しない為)

 

f:id:tktknkyo:20180526145112p:plain

GPUタイプでしか作用しない、Particle Randon Valueとの併用。

Particle Randon Valueは、GPUタイプのみで機能する、発生ごとに0~1のランダムな数値を出力するノードです。

 

これとLerpを合わせると、AからBまでのランダムな数値を出力します、この例だと0.25~1.5の間でランダムに出力。

 

次のLerpにより、発生直後は0で0.25~1.5までの間に変化するようになります。

それでこの数値をどうするか?としては。

 

f:id:tktknkyo:20180526150252p:plain

例えばこんな感じに、この場合

左から0、0.25、1.5となります。

f:id:tktknkyo:20180526150941p:plainf:id:tktknkyo:20180526150918p:plainf:id:tktknkyo:20180526151000p:plain

実際に使う場合は、オパシティや、マスク用テクスチャなどで周りは切り取ると綺麗になります。

 

三角関数と合わせて

f:id:tktknkyo:20180526155641p:plain

三角関数であるサイン(sine)とあわせて使う方法

 

まずサインでどういう事が出来るか

とりあえずは角度を取って長さを返します

ノードに接続しているのは、Rotation型変数ではないですが(マテリアルエディタなのでこの型がそもそもない)

数値を角度と扱って習得します。

 

中心ズレてますが、円があって、緑がX、赤がY、中心の紫が原点があるとします。

f:id:tktknkyo:20180526160214p:plain

 

取得する角度というのは、中心から一本線があるとして、その開き角度です。

 

f:id:tktknkyo:20180526161019p:plain

この茶色が、入力する角度、そして左の黄色の線が、返す数値です。

線の長さは、黒丸の半径と同じです。

返す数値は割合で返します黒丸の半径と、黄線の長さの割合です、この場合大体50%位になると思います。

 

f:id:tktknkyo:20180526161254p:plain

また、このように180°を超えて下側に行くと、負の数値になります。

 

マテリアル側での数値的には、0だと0°で、1だと360°として扱います。

Paticle Relative Timeは、0から1に変化する値なので、丁度一周します、したがって0→1、1→0、0→-1、-1→0、の変化をします。

ただ負の数値になると少々面倒なので、半分の数値にしています。

これにより、0から1、1から0の変化するようになります。

 

f:id:tktknkyo:20180526161749p:plain

先ほどの、サインの処置が赤枠部分、続けて黄色の部分では

タイリング処理からRのみ取り出して、Addによる加算をすることで

横方向にスクロールさせています。

 

 

フェードインとアウトを作る

f:id:tktknkyo:20180526162032p:plain

実際の用途的に考えると、このように繋げば、フェードインとフェードアウトを作ることができます。

ただ、この状態では用途が限られるので色々弄っていきます。

 

f:id:tktknkyo:20180526162340p:plain

掛け算してから、Clampする方法。

この図では2倍しているので、0→2、2→0の変化ですが、Clampによって、1以上を強制1にします、従って1の期間が長くなります。

 

f:id:tktknkyo:20180526162734p:plain

具体的には、こんな感じの変化になります青枠は赤枠に比べて真っ白な部分が増えているのがわかると思います。

 

このままだと、フェードインとフェードアウトが一緒になってしまうので、IFで変える手段。

f:id:tktknkyo:20180526163923p:plain

Paticle Relative Timeと、0.5の定数で比較して、フェードインか、フェードアウトなのかを判定させ、それぞれ黄色枠と、青枠で、別々に設定することができます。

 

f:id:tktknkyo:20180526164203p:plain

今回の場合、こんな感じの変化となります、左右でグラデーションが変わっているのが解ると思います。

 

 

自分なりに色々用途考えた結果、この様になりました。

基本的にGPUタイプを使う場合のDynamicParameterの代わりとして使ったり、ピンが足りない場合などに使うかな?と思います。

後半の透明度に関しては、カスケード側でαのカーブを直接弄ったりするのが面倒なら、このカーブをインスタンスでも変えれるので使い道がありそうなのかな?と

 

三角関数と合わせると結構他にも用途はあると思います、良さそうな使い方があれば、教えていただけると大変助かります。