TomLoomanさんのサイトで見た物体の出現エフェクトが凄くカッコ良かったので、見よう見まねで作ってみた。参考元はここ。https://t.co/wL6amyoYXW #UE4 #UE4Study pic.twitter.com/d9twZbAbRB
— ほげたつ (@HogeTatu) 2015年12月12日
これの解説記事をすっかり忘れていたので書きます。
アクター位置からの相対距離でマスクをかける
AbsoluteWorldPosition から ActorPosition を引くことでアクター位置からの相対距離が求められます。
現在の時間を AppearTimer として設定し、速度の制御をするために AppearSpeed を掛け合わせ、それからアクター位置からの相対距離を引いて OpacityMask に設定することで AppearTimer が大きくなるにつれて徐々に出現するマテリアルになります。
このマテリアルで AppearTimer に0.5を設定した場合は以下の様な見た目になります。
マスク境界付近を発光させる
境界線を発光させるには、先程のマスク判定と同じロジックを使用して Emissive を設定するような処理を作成し、マスクの時と境界線がずれるように判定距離(AppearTimer * AppearSpeed)に対して係数を掛け合わせます。
マスクの時と比べて Floor や Clamp しているのは、値が 0 or 1 になるように(グラデーションがかからない発光になるように)するためです。
このマテリアルで AppearTimer に0.5を設定した場合は以下の様な見た目になります。
境界付近にノイズを入れる
今まではアクター位置からの相対距離だけに従って境界を決めていたため規則的になっていましたが、ここにノイズを加える事で境界を不規則にすることができます。
UE4では各種プロパティからノイズを作るノードも用意されているため、そちらを使用します。
生成されたノイズの参照位置は AbsoluteWorldPosition から決定します。
これだけでも問題はありませんが、今回はノイズの粗さを設定できるようにするために、NoiseRoughness というパラメータを用意して除算しています。
ちなみに Noise ノードのプロパティは以下の様な状態です。
あとはノイズ幅を変更できるように NoiseRange を掛け合わせ、マスクと Emissive 用にそれぞれベース値を入力できるようにして差分が作れるようにし、判定距離に対する係数として使用します。
このマテリアルで AppearTimer に1.3を設定した場合は以下の様な見た目になります。
これで完成です。
あとは MaterialInstance を作って、用途に合わせてパラメータを調整します。
パラメータ調製例
例えば EmissiveNoiseBase を小さくすると、発光する範囲が大きくなります。
逆に MaskNoiseBase を小さくすると、発光する範囲が小さくなります。
NoiseRange を大きくすると、境界の範囲が広がります。
NoiseRoughness を小さくすると、境界がきめ細やかになります。
割と汎用的に使いやすいエフェクトなので、是非作ってみて下さい。