2.

UE5 のマテリアルノード|Lerp・Fresnel・Panner

編集

この記事の要点

  • Texture Sample は「サンプラータイプ」をテクスチャの用途に合わせないと、法線やマスクの見た目が壊れる。
  • Lerp は Alpha が 0 のとき A、1 のとき B。Alpha にマスクやグレースケールを差し込むのが実務での主用途。
  • Fresnel は視線と面の角度から輪郭側を明るくする。リムライト、ガラスの縁、ホログラムの定番。
  • Panner は UV を時間で流す。テクスチャそのものではなく UV を動かしていると理解すると応用が効く。
  • 4ノードの組み合わせだけで、汚し合成・リムライト・流れる水・スクロール表示といった頻出表現の大半が作れる。

マテリアル のノードは Unreal Engine 5 (UE5) に数百種類ありますが、実務で毎日触るものは限られています。中でも Texture Sample、Lerp、Fresnel、Panner の4つは質感表現の骨格を担う常連です。この記事では、何をしているノードなのか、入力ピンの意味は何か、「知らないと詰まる」注意点は何かを順に解説します。

1Texture Sample:すべての起点

Texture Sample はテクスチャから色を読み出すノードです。グラフの一番左側に並ぶことが多く、ここから伸びた線がベースカラーやラフネス、法線へつながります。

出力ピンは複数あります。一番上の RGB は色をまとめて出し、その下の R / G / B / A は各チャンネルを個別のスカラー値として出します。ラフネスやメタリック、アンビエントオクルージョンといった白黒の情報は、1枚の RGB テクスチャの各チャンネルに詰め込んで「マスクテクスチャ」として使うのが定石です。R にラフネス、G にメタリック、B に AO を入れておけば、テクスチャ3枚分の情報が1枚に収まり、サンプリング回数もメモリも節約できます。

入力ピンの UVs は、テクスチャをどの座標で読むかを指定します。何もつながなければメッシュの UV チャンネル 0 が使われます。ここに後述の Panner や Texture Coordinate をつなぐと、スクロールやタイリングを制御できます。

サンプラータイプは必ず合わせる

詳細パネルの Sampler Type は、そのテクスチャをどう解釈するかの指定です。ここが実際のテクスチャの圧縮設定と食い違うと、コンパイルエラーになるか、見た目が明確に壊れます。

Sampler Type用途合わせるテクスチャ側の設定
Colorベースカラーなど、目で見る色sRGB オン(既定の圧縮)
Linear Color色として見せないカラーデータsRGB オフ
Normalノーマルマップ圧縮設定を Normalmap に
MasksRGB 各チャンネルにデータを詰めたマスクsRGB オフ、Masks 圧縮
Linear Grayscale白黒1チャンネルのデータ(sRGB オフ)sRGB オフ、Grayscale 圧縮
Grayscale白黒1チャンネルのデータ(sRGB オン)sRGB オン、Grayscale 圧縮

特に多い事故が、ラフネスやマスクを Color のまま使ってしまうケースです。sRGB のガンマ補正がかかった値がそのまま数値として使われるため、「ラフネスを 0.5 にしたつもりが実際には別の値になる」という状態になります。白黒データを扱うときは sRGB をオフにしたうえで、Linear Color / Masks / Linear Grayscale といった「Linear 側」の Sampler Type を選ぶ、と覚えておけば大半は防げます。(Compression Settings が Grayscale のテクスチャは、sRGB オンなら Grayscale、オフなら Linear Grayscale が対応する Sampler Type です。ここを取り違えるとコンパイル時に警告やエラーになります。)

○ 使うべき場面
マスクテクスチャの各チャンネルを R / G / B ピンから取り出して、ラフネス・メタリック・AO へ個別に配線する。テクスチャ数を減らす基本テクニック。
△ 注意
1つのマテリアルで使えるテクスチャサンプラー数には上限がある(一般に 16 が上限で、ディファードでは予約分を除いた実質 13 程度、環境により異なる)。上限に当たる場合は詳細パネルの Sampler Source を「Shared: Wrap」などに変えると消費スロットを抑えられる。

2Lerp:2つを混ぜる万能ノード

Lerp(Linear Interpolate)は、A と B を Alpha の割合で線形補間するノードです。式にすると次の通りで、これを覚えておくと挙動で迷わなくなります。

出力 = A * (1 - Alpha) + B * Alpha

Alpha = 0.0  → A がそのまま出る
Alpha = 0.5  → A と B の中間
Alpha = 1.0  → B がそのまま出る

「Alpha が 0 のとき A」という向きだけは、実装のたびに逆に覚えていて混乱の元になります。Alpha を上げると B に近づくと覚えてください。

Texture Sample きれいな床 Texture Sample 汚れ・苔 マスク(R) 白いところが汚れる Lerp A B Alpha Base Color マスクの形で汚れが乗る
Lerp のもっとも典型的な使い方。Alpha にマスクを差すと、白い部分だけ B のテクスチャに置き換わる。

Lerp の強みは、A と B に何を入れてもよいことです。テクスチャ同士、単色同士、ラフネスの数値同士——型さえ合っていれば混ざります。実務でよく使う組み合わせは次のようなものです。

  1. 汚し合成:A にきれいなテクスチャ、B に汚れテクスチャ、Alpha に汚れマスクを入れる。マスクにスカラーパラメータを掛けてやれば、インスタンス側で汚れ具合をスライダーで調整できるようになる。
  2. 頂点カラーブレンド:Alpha に Vertex Color ノードの R をつなぐと、モデリング側で塗った頂点カラーの通りに2つの質感が混ざる。地面や壁の自然な変化に向く。
  3. 高さブレンド:Alpha にハイトマップを入れて、Lerp の前に Add で係数を足したうえで飽和させると、単純な溶け合いではなく「凹んだ部分から先に埋まる」ような自然な境界が作れる。
  4. 数値の切り替え:A に 0、B に 1 を入れ、Alpha にスカラーパラメータをつなげば、単純なブレンド用スライダーになる。

Alpha に入れる値は 0〜1 の範囲を想定しています。範囲外の値を入れると外挿になり、A よりさらに手前・B よりさらに先の値が出ます。意図しない発色になったときは、Alpha に Saturate を挟んで 0〜1 に切り詰めると原因を切り分けられます。

3Fresnel:輪郭を光らせる

Fresnel は、その位置の面が「カメラに正対しているか、横を向いているか」を 0〜1 の値として返すノードです。正対している中央付近は 0 に近く、シルエットの縁に近づくほど 1 に近づきます。現実の物体でも、浅い角度から見た面ほど反射が強く見えるという性質があり、それを模したものです。

入力ピンは3つあります。

入力役割実務での触り方
ExponentIn減衰の鋭さ。大きいほど縁の細い範囲だけが光るリムライトなら大きめ、全体をふわっと光らせたいなら小さめ
BaseReflectFractionIn正面を向いた面の最低値。0 にすると中央は完全に黒ガラスの縁だけ光らせたいときは 0 付近にする
Normal計算に使う法線。未接続ならそのピクセルの法線ノーマルマップの凹凸を反映させたいときだけつなぐ

実務での使いどころは主に3つです。リムライトは、Fresnel の出力に色を掛けてエミッシブカラーへつなぐだけで作れます。暗いシーンでシルエットを保ちたいときに効きます。ガラス・水面の縁には、Fresnel をオパシティにつなぐパターンが使えます。正面から見ると透けていて、浅い角度では反射して見える——という現実に近い挙動になります。ホログラムやシールドでは、Fresnel をエミッシブとオパシティの両方に使い、後述の Panner で走査線を流すとそれらしくなります。Niagara のエフェクトにコリジョンを持たせる方法 と組み合わせれば、当たった瞬間だけシールドが光る演出も作れます。

○ 使うべき場面
形状を強調したいとき全般。ExponentIn をパラメータ化しておけば、同じマスターから「うっすら光る」も「縁だけ鋭く光る」も作り分けられる。
△ 注意
Fresnel はカメラとの角度で決まるため、カメラを動かすと見た目も変わる。静止画で調整した強さが、プレイ中の視点では強すぎる/弱すぎることがある。実際のカメラ距離で確認する。

4Panner:UV を時間で流す

Panner は UV 座標を時間経過とともにずらすノードです。ここで大事な理解は、テクスチャを動かしているのではなく、テクスチャを読む座標を動かしているという点です。この視点を持つと、なぜ Panner が Texture Sample の UVs ピンにつながるのかが腑に落ちます。

Texture Coordinate ──→ Panner (Coordinate)
                        Panner (Time)  ← 未接続なら内部で時間が使われる
                        Panner (Speed) ← Vector2(X方向速度, Y方向速度)
                              │
                              └──→ Texture Sample (UVs) ──→ Base Color

Speed は詳細パネルの SpeedX / SpeedY で固定値として持つこともできますし、Speed 入力ピンに Vector2 をつないで動的に変えることもできます。速度をパラメータ化しておけば、インスタンス側で「ゆっくり流れる水」と「速い滝」を作り分けられます。

典型的な使い方を挙げます。

  1. 流れる水・溶岩:ノーマルマップの UV を Panner で流す。速度と向きを少しだけ変えた Panner を2つ用意して法線同士を合成すると、単純な繰り返しに見えにくくなる。
  2. ベルトコンベア・滝:ベースカラーとノーマルの両方を同じ Panner で流す。UV の向きとメッシュの向きが合っていないと斜めに流れるので、UV レイアウトを先に確認する。
  3. ホログラムの走査線:縦方向にだけ速度を持たせた Panner で細い縞テクスチャを流し、エミッシブに加算する。
  4. 雲・霧のゆらぎ:低速の Panner でノイズテクスチャを流し、その結果を Lerp の Alpha に使う。

注意点として、Panner を使うマテリアルはカメラが止まっていても毎フレーム描画内容が変わるため、静的な最適化の恩恵を受けにくくなります。背景の広い面すべてに Panner を入れるといった使い方は避け、必要な箇所に絞るのが無難です。

54つを組み合わせる:ホログラム風マテリアル

ここまでの4ノードを組み合わせると、実用的な表現が組めます。ホログラム風のシールドを例に、配線の流れを示します。

  1. マテリアルのブレンドモードを Translucent、シェーディングモデルを Unlit に設定する(設定の意味は別記事で詳しく扱う)。
  2. Texture Coordinate を置き、V 方向のタイリングを大きめにして細い縞になるよう調整する。
  3. その出力を Panner の Coordinate へ。SpeedY に小さな値を入れて縦に流す。
  4. Panner の出力を、縞模様テクスチャの Texture Sample の UVs へつなぐ。Sampler Type は Linear Grayscale(テクスチャ側の sRGB はオフ)。
  5. Fresnel を置き、ExponentIn をスカラーパラメータ化する。
  6. 縞の値と Fresnel の値を Add で足し、その結果に Constant3Vector(水色など)を Multiply で掛けて Emissive Color へつなぐ。
  7. 同じ「縞+Fresnel」の結果を、強さ調整用のスカラーパラメータで Multiply してから Opacity へつなぐ。
  8. 各パラメータに分かりやすい名前とグループを付けて保存し、マテリアルインスタンスを作って色や速度を調整する。

この構成なら、シェーダのコンパイルは1回だけで、色違い・速度違いのバリエーションはすべてインスタンス側で作れます。

6ノードを増やす前に見るべき指標

マテリアルエディタの統計表示には、命令数(Instruction Count)とテクスチャサンプラー数が出ます。ノードを足すたびにここを見る習慣を付けると、「思ったより重かった」という後戻りを減らせます。命令数を膨らませやすいのは、テクスチャサンプルの本数、Power や除算といった高コストな演算、そして枝分かれの多い構成です。特にテクスチャサンプルはマスクへのチャンネル詰め込みで減らせる余地が大きく、最初に手を付けるべき箇所です。

また、配線を伸ばし続けると後から何をしているグラフか分からなくなります。関連ノードをコメント枠で囲む、頻繁に使う塊はマテリアル関数(Material Function)に切り出す、といった整理を並行して進めておくと、メッシュ ごとの質感調整を任せられる状態を保てます。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. マテリアルとマテリアルインスタンスの違いと使い分け
  2. よく使うマテリアルノード(Lerp / Fresnel / Panner / Texture Sample)
  3. マテリアルのブレンドモードと Two Sided の設定