ほげたつブログ

Unreal Engine 4 を使ってなんかやります

UE4でノイズ+発光しながらの物体出現エフェクト

これの解説記事をすっかり忘れていたので書きます。

アクター位置からの相対距離でマスクをかける

f:id:hogetatu:20160303013251p:plain

AbsoluteWorldPosition から ActorPosition を引くことでアクター位置からの相対距離が求められます。
現在の時間を AppearTimer として設定し、速度の制御をするために AppearSpeed を掛け合わせ、それからアクター位置からの相対距離を引いて OpacityMask に設定することで AppearTimer が大きくなるにつれて徐々に出現するマテリアルになります。


このマテリアルで AppearTimer に0.5を設定した場合は以下の様な見た目になります。

f:id:hogetatu:20160303013149p:plain


マスク境界付近を発光させる

f:id:hogetatu:20160303020718p:plain

境界線を発光させるには、先程のマスク判定と同じロジックを使用して Emissive を設定するような処理を作成し、マスクの時と境界線がずれるように判定距離(AppearTimer * AppearSpeed)に対して係数を掛け合わせます。
マスクの時と比べて Floor や Clamp しているのは、値が 0 or 1 になるように(グラデーションがかからない発光になるように)するためです。


このマテリアルで AppearTimer に0.5を設定した場合は以下の様な見た目になります。

f:id:hogetatu:20160303020628p:plain


境界付近にノイズを入れる

f:id:hogetatu:20160303022135p:plain

今まではアクター位置からの相対距離だけに従って境界を決めていたため規則的になっていましたが、ここにノイズを加える事で境界を不規則にすることができます。
UE4では各種プロパティからノイズを作るノードも用意されているため、そちらを使用します。

生成されたノイズの参照位置は AbsoluteWorldPosition から決定します。
これだけでも問題はありませんが、今回はノイズの粗さを設定できるようにするために、NoiseRoughness というパラメータを用意して除算しています。


ちなみに Noise ノードのプロパティは以下の様な状態です。

f:id:hogetatu:20160303024804p:plain


あとはノイズ幅を変更できるように NoiseRange を掛け合わせ、マスクと Emissive 用にそれぞれベース値を入力できるようにして差分が作れるようにし、判定距離に対する係数として使用します。


このマテリアルで AppearTimer に1.3を設定した場合は以下の様な見た目になります。

f:id:hogetatu:20160303022210p:plain


これで完成です。
あとは MaterialInstance を作って、用途に合わせてパラメータを調整します。

パラメータ調製例

例えば EmissiveNoiseBase を小さくすると、発光する範囲が大きくなります。

f:id:hogetatu:20160303025455p:plain


逆に MaskNoiseBase を小さくすると、発光する範囲が小さくなります。

f:id:hogetatu:20160303025715p:plain


NoiseRange を大きくすると、境界の範囲が広がります。

f:id:hogetatu:20160303025913p:plain


NoiseRoughness を小さくすると、境界がきめ細やかになります。

f:id:hogetatu:20160303030025p:plain


割と汎用的に使いやすいエフェクトなので、是非作ってみて下さい。