
UE5/UEFNマテリアルで作る流れるデジタル警告サイン #10
本記事に興味を持っていただきありがとうございます。
今回は、マテリアルを使って以下のような流れる警告サインを作っていきます。

今回使用するアセット
警告用テクスチャ
よりデジタルさを表現するためのテクスチャ
警告板となるメッシュ
これら3つ、ダウンロードしてプロジェクトにインポートしましょう。
新規マテリアルを作ろう
新規マテリアルM_Warningを作り開きます。

今回のような表現をマテリアルで行う場合、複数の方法がありますが、
本記事では、白黒画像を使用するので、黒色の部分を透過させます。
M_Warningマテリアルの以下の設定を変更します。
Blend Mode Opaque → Masked
Shading Model Default Lit → Unlit
Two Sided □ → ✓

Maskedについては、以下の記事で簡単に紹介しています。
Shading Model
Shading Modelとは、マテリアルに光が入った(入射光)時にどのように反射させるかを制御します。
Unlit
Unlitとは、基本的に火や光を発するオブジェクトなどに使用します。
Two Sided
Two Sidedとは、マテリアルを適応するオブジェクトの裏側(裏面)にも表示させます。
変更後は、以下の通りです。

Texture SampleノードにT_Letterテクスチャを追加して、
パラメーター化します。
パラメーター名はLetterにしています。

左右に文字を動かすために、Pannerノードを追加して動きの方向と速度を調整するために、Parameterノードを2つ追加します。
Parameterノードはショートカットキー(Windows)キーボードの
S+左クリックで追加できます。
Parameter名
Speed X
Speed Y

続いて、Appendノードを追加して以下のように繋ぎます。

なぜAppendノードが必要か?
テクスチャには、UVと言う概念があり値は
U(横方向(X))とV(縦方向(Y))になります。
UVに関しましては、以下の記事で紹介しています。
少しUVの実験をしてみます。
LetterノードをStart Previewing Nodeして、プレビュー画面のオブジェクトをSphereからPlaneに変更します。

Speed Xの値に1を入れると、縦方向にテクスチャが動きます。
Speed Yでは、横方向に動きます。
XとYの両方に1を入れると、斜め左上に向いて動きます。
数値を上げれば、スピードが速くなります。

それではAppendノードを飛ばして、SpeedXとSpeedYを順番にPannerノードに繋いでみます。
結果は、斜め左上にしかテクスチャが動きません。

今回は、横に(X方向)にだけテクスチャを動かしたいので、
Appendノードを使用して独立した値(SpeedXとSpeedY)が必要になることがわかります。
Pannerノードの動きを理解したところで、
Speed Xの値を0.03にして、Speed Yを0にします。

ここまでテクスチャ全体を動かしました。
続いては、テクスチャのオフセットをずらします。
テクスチャのオフセットをずらそう
冒頭の完成動画でもわかるように、
T_Letterテクスチャには3種類の警告文が書かれています。
しかし現在は、3種類全て表示されています。

これを、テクスチャのオフセットをずらして調整します。
冒頭でインポートしたメッシュ、SM_Warning_Tapeをビューポート上に配置し、マテリアルのプレビューをSM_Warning_Tapeにします。

SM_Warning_Tapeを選択したまま、マテリアルエディターに移動します。

マテリアルエディターのプレビューの一番右下のアイコンをクリックします。
すると3行あった警告文の1行のみ表示されています。

- 補足 -
本記事とは関係ないですが、このメッシュ(SM_Warning_Tape)はDCCツールで必要に応じてUV展開しております。
これで、警告文が一行のみ表示されました。
オフセットをずらすノードを組む
オフセットをずらすために必要なノードです。
Parameterノード → UV X
Parameterノード → UV Y
Multiplyノード → Bの値に0.05
Clampノード
Appendノード
Addノード
以下様に、ピンをつなぎます。

上の画像を見てもわかるように、オフセットのずらし方もaddノードを使い、最終的にはテクスチャのUVに入力しているので、
2つの値U(X横方向)とV(Y縦方向)が必要となり、
その為にParameterノードを2つ用意しました。
Clampノードとは
Clampノードは入力された値を0(Min)~1(Max)の範囲以内で出力します。
- 例 -
現在Clampノードの前にMultiplyノードがあります。
MultiplyのAの値に4、Bの値に0.05(4×0.05=0.2)0.2となりClampから出力される値は0.2です。
もしMultiplyのAの値に24、Bの値に0.05(24×0.05=1.2)1.2となり1を超えたので、出力結果は1になります。
0以下は、すなわち負数の場合は全て0で出力されます。

※MinとMaxの値は変更可能
今回は警告文が縦並びなので、Yに値を入れると警告文のオフセットがずれます。

UV Yの値に、4を入れてみましょう。
以下のように2番目の警告文が表示されます。
8を入れると3番目の警告文が表示されます。

どの様に動いているか動きを確認するために、一度プレビューのメッシュをPlaneにもどし、LetterテクスチャをStart Previewing Nodeを行います。

UV Yに4と8を入れると、表示させたい警告文が順に上に移動(ずれて)います。

この方法でオフセットをずらして、SM_Warning_Tapeに表示させたい警告文を表示させています。
Multiplyノード値ですが、Bの値に0.05が入っています。
Bの値を細かくすれば、オフセットはより小刻みに動かすことができます。
Bの値は固定して、Aの値で動かすようにすると調整しやすいです。
今回はAの値(UV Y)は4の倍数でBの値が0.05がちょうどいいのでそのようにしています。

しかしMultiplyのA値に4の倍数を入力しても、12と16の時は何も表示されません。
それは下の画像を見てもわかる通り12と16には何も入って無いからです。

さらにUV Yに20以上の数値を0.05で掛けると全て1以上になるので、
そもそもオフセットがずれない、すなわち元の状態(0)になります。
大事な箇所なので繰り返しますが、今回の条件でテクスチャのオフセットをずらす場合、Clampノードの出力範囲が0~1なのでUV YとMultiplyの結果が
0、0.1、0.2….. ~ …..0.8、0.9、1になる必要があります。
テクスチャのオフセットのずらし方を理解したところで、デジタル感を演出ために文字をドット風にします。
文字をドット風にしよう
必要なノードです。
TexCoordノード
Parameterノード → BG Tiling(250)
Texture Sampleノード → BG Dot
冒頭でインポートしたテクスチャ(T_Digital_Dot)をマテリアルに追加してパラメーター化します。
各ノードの繋ぎ方は以下の通りです。

TexCoordノードでテクスチャのスケールが変更できます。
その調整度合いを、BG Tilingに入力する値で調整します。
では、BG DotをStart Previewing Nodeして、
実際にどのようにテクスチャが変化するのか確認してみましょう。

BG Tilingの値を大きくすればするほど、ドンドン細かくなっていきます。
これを使用してデジタル風にしていきます。
Lerpノードを新たに配置して、以下の様に繋ぎます。

Lerpに関しては、以下の記事で紹介しています。
LerpでStart Previewing Nodeを行いBG Tilingの値を大きくします。
小さくて分かりにくいですが、警告文に縦と横と線が入ってデジタル風になりました。

現段階で、マテリアルプレビューがPlaneになっていると思うのでSM_Warning_Tapeに戻しておきましょう。

最後に文字を発光させます。
文字を発光させよう
以下の様にノードを追加して、ピンを繋ぎます。
必要なノードです。
Multiplyノード 2つ
Parameterノード → Emissive Power(0)
Constant3Vectorノード → コンバート化して名前をEmissive Color

Lerpの最終結果をMultiplyに入力して、Emissive Colorで好きな色に変更します。
さらに次のMultiplyのBの値(Emissive Power)を調整することで発光の強さが変更できます。

以下マテリアルの全体像です。

マテリアルインスタンス化してメッシュに適応しよう
M_Warningは、Paramerterノードを複数使用しているマテリアルなので、インスタンス化します。
マテリアルインスタンス名 MI_Warning


MI_Warningを開き、各値を調整します。
自由に調整してください。

ワールド内の環境光を暗くするとより雰囲気がでます。
最後に
今回の内容は、マテリアル製作で様々なことに応用可能です。
警告文のテクスチャを変えたり、四角で表現しているデジタル風文字を丸に変更したりいろいろ試して見てください。