【Unreal Engine】マテリアル入門:PBRの4つのピンとMaterial Instance

作成: 2025-12-12最終更新: 2026-07-20

テクスチャを貼っただけなのに安っぽい——原因はBase Color以外のピンが空だから。Metallic/Roughness/Normalの役割を図解し、パラメータ化してMaterial Instanceで色違いを量産する実践つき。

3Dモデルにテクスチャを貼って、表示もできた。でも なぜか安っぽく見える 。プラスチックのおもちゃのようで、作例で見たような質感になりません。マテリアルを触りはじめた人が、ほぼ全員通る場所です。

原因はたいてい Base Color以外のピンが空 なことです。UEのマテリアルは「色を塗る」機能ではなく、 光がこの表面でどう跳ね返るかを定義する 仕組みなので、色は要素の1つにすぎません。この記事では、まず押さえるべき4つのピンを整理し、パラメータ化して Material Instance で色違いを量産するところまでを解説します。

Base Colorだけの平坦な球と、Roughness・Normalを設定した質感のある球を並べたイメージ

この記事でわかること

  • マテリアルは色ではなく 光の跳ね返り方 を決めている
  • 質感を決めるのは Roughness (ここが空だと安っぽくなる)
  • Metallicは0か1 、中間はほぼ使わない
  • 覚えるノードは 5つで足りる
  • 実践:パラメータ化して Material Instance で色違いを作る

Sponsored

マテリアルは「光の跳ね返り方」

UEのマテリアルは PBR(物理ベースレンダリング) という考え方で作られています。難しく聞こえますが、意味はシンプルです。 現実の物質が光をどう跳ね返すかを真似る 、ただそれだけです。

同じ形の球が、Roughnessの値によって鏡のようだったり、つや消しだったりする図

現実世界で、鉄と木と布を見分けられるのはなぜでしょうか。色だけではありません。 光の跳ね返り方が違う からです。鉄は像が映るほど鋭く反射し、布は光を散らしてぼやける。この違いを数値で表すのがマテリアルの仕事です。

だから、Base Colorに茶色を入れただけでは木には見えません。 「木は光をどう跳ね返すか」 を設定していないからです。

しかも、PBRで組んだマテリアルは どんな照明の下でも破綻しません 。昼の屋外でも、夜の室内でも、同じ設定のまま自然に見えます。照明ごとに調整し直さなくて済むことが、PBRの一番の利点です。

まず押さえる4つのピン

マテリアルの出力ノードには多くのピンがありますが、 最初に覚えるべきは4つ です。

Base Color・Metallic・Roughness・Normalの4つのピンと、それぞれが何を決めるかを示した図
ピン決めること入れる値
Base Color素の色色(RGB)
Metallic金属かどうか0か1(中間はほぼ使わない)
Roughness表面のざらつき0〜1を細かく使う
Normal見かけの凹凸Normal Mapテクスチャ

Metallic は0か1です。 「金属っぽさ50%」という物質は、現実にはほとんど存在しません。木・石・プラスチック・布・肌はすべて 0 、鉄・金・銅は 1 。錆びた鉄のように混ざるものは、マスクテクスチャで「ここは1、ここは0」と塗り分けます。

Roughness が質感の主役です。 ここを触るのがマテリアル作業の大半になります。

見え方
0.0鏡のように鋭く反射磨いた鏡、静かな水面
0.2〜0.4つやがある塗装した車、濡れた床
0.5〜0.7落ち着いた質感多くの物はここ
1.0完全につや消しチョーク、粗い布

「安っぽい」と感じるマテリアルは、Roughnessが未設定(既定値)のままか、極端な値になっていることが多いです。 まずここに0.5前後を入れてみてください 。それだけで印象が変わります。

Normal は「形を変えずに凹凸を見せる」 ピンです。レンガの目地やネジの溝を、ポリゴンを増やさずに表現できます。Normal Mapテクスチャを繋ぐだけなので、使い方に迷うことはありません。

Normal Mapを繋いだら、凹凸が逆に見える。 UEは DirectX形式 を前提にしています。Blenderなどは OpenGL形式 で書き出すことがあり、その場合は緑チャンネルが反転しています。テクスチャアセットを開いて Flip Green Channel にチェックを入れると直ります。

覚えるノードは5つで足りる

マテリアルエディタには数百のノードがありますが、最初は 5種類 で十分です。

Constant・Texture Sample・Texture Coordinate・Multiply・Lerpの5つのノードを並べた図
ノード何をするかショートカット
Constant数値1つ(Roughnessなど)1 +クリック
Constant3Vector色(RGB)3 +クリック
Texture Sampleテクスチャを読むT +クリック
Texture Coordinateタイリング(繰り返し)を調整U +クリック
Multiply掛け算(明るさ調整、マスク)M +クリック

キーを押しながらグラフをクリックすると即座に置けるので、覚えると作業速度が変わります。

Multiply の使いどころだけ補足します。テクスチャに 0.5 を掛ければ暗くなり、2.0 を掛ければ明るくなります。これが基本の使い方です。さらに 色にマスクを掛ける ことで、「ここだけ錆びている」といった表現も作れます。

もう1つ、そのうち必ず使うのが Lerp(Linear Interpolate) です。AとBを、Alphaの割合で混ぜます。

  • Alpha = 0A がそのまま出る
  • Alpha = 1B がそのまま出る
  • Alphaに マスクテクスチャ を挿すと、白い部分だけBになる

「乾いた地面と濡れた地面を、水たまりのマスクで混ぜる」——こうした表現はすべてLerpです。

Sponsored

実践:色を変えられる金属マテリアルを作る

RPGの装備の色違い、レーシングゲームの車体カラー、FPSの武器スキン——「同じ素材で色だけ違うもの」はどのジャンルにも大量に出てきます。ここを マテリアルの複製 で作ると破綻するので、正しいやり方を身につけます。

再現用の準備: テクスチャは不要です。 単色の金属 から始めて、あとから色を変えられるようにします。

種類名前内容
MaterialM_Metal_Baseこれから作る親マテリアル
Material InstanceMI_Metal_Gold / MI_Metal_Steel色違い(あとで作る)
確認用Sphereを3つレベルに並べておく

ステップ1:マテリアルを作る。 コンテンツブラウザで右クリック → MaterialM_Metal_Base と名付けて開きます。

ステップ2:まず固定値で質感を作る。 グラフに次を置いて繋ぎます。

  • 3 +クリックConstant3Vector を置き、ダブルクリックで色を選ぶ(とりあえず金色: R=1.0 / G=0.77 / B=0.34)→ Base Color
  • 1 +クリックConstant を置き、値を 1.0 に → Metallic
  • もう1つ Constant を置き、値を 0.25 に → Roughness

Apply を押して、プレビュー球を見てください。 鏡のように環境が映り込む金色の球 になっているはずです。

ここで Roughnessだけを動かして 感覚を掴んでください。0.05にすると鏡のように、0.6にすると鈍い金属になります。 質感を決めているのがRoughnessだ と、目で確認できます。

ステップ3:パラメータ化する。 ここからが本題です。

Constant3Vector(色)のノードを 右クリック → Convert to Parameter 。名前を BaseColor にします。同じように、Roughnessの ConstantConvert to Parameter して Roughness と名付けます。

固定値�のノードがパラメータノードに変わり、名前が付いている様子の図

ノードの見た目が変わり、名前が付きました。これで 外から値を差し替えられる 状態になります。Apply して Save します。

ステップ4:Material Instanceを作る。 コンテンツブラウザで M_Metal_Base右クリック → Create Material InstanceMI_Metal_Gold と名付けて開きます。

Details パネルに BaseColorRoughness が並んでいます。左のチェックボックスをオンにすると編集できるようになるので、値を変えてみてください。 プレビューが即座に変わります

同じ手順で MI_Metal_Steel を作り、BaseColor を灰色(R=0.56 / G=0.57 / B=0.58)、Roughness を0.35にします。

ステップ5:並べて確認する。 レベルに置いたSphereに、M_Metal_Base / MI_Metal_Gold / MI_Metal_Steel をそれぞれ割り当てます。

3つとも同じ「金属の質感」を保ったまま、色とツヤだけが違う はずです。これが確認できれば成功です。

1つの親マテリアルから3つのMaterial Instanceが枝分かれし、同じ質感のまま色とツヤだけが違う球が並んでいる図

Instanceの利点は、ここから先にあります。M_Metal_Base を開いて、Roughnessに小さな傷のテクスチャを足してみてください。 保存した瞬間、金も鋼も両方に反映されます 。マテリアルを複製していたら、全部に同じ作業をする羽目になっていました。

うまくいかないときの切り分けです。

  • 真っ黒に見える → Metallicが1なのにBase Colorが暗すぎます。金属は「映り込み」で見えるので、周囲に光がないと黒くなります
  • プラスチックに見える → Metallicが0のままです
  • Instanceで値を変えても反映されないDetails の左にある チェックボックス をオンにしていません
  • パラメータが出てこない → 親マテリアル側で Convert to Parameter を忘れているか、保存していません

ポイントは2つです。

  • マテリアルは複製せず、Instanceを作る: 見た目の違いはInstanceで、構造の変更は親で。この分担を守ると、あとから全体を直せます
  • Instanceは軽い: マテリアルを複製するとその数だけシェーダーがコンパイルされますが、Instanceは パラメータを差し替えるだけ なので、コンパイルが走りません。数が増えるほど差が出ます

テクスチャを使ったマテリアルに進むなら、Texture SampleConvert to Parameter すると、Instance側でテクスチャごと差し替えられるようになります。ここでパラメータ化した値を ゲーム実行中に 動かせば、被弾した瞬間に赤く光らせるといった演出になります(→ Dynamic Material Instanceで実行中に色を変える)。画面全体の色味を調整したいなら Post Process Volume が別の切り口です。

Sponsored

おまけ:先に知っておくと良いこと

Base Colorに真っ黒や真っ白を入れない。 現実の物質は、完全に光を吸収も反射もしません。RGBで言えば おおよそ30〜240の範囲 に収めると自然に見えます。真っ黒を入れると、どんな照明でも黒い塊にしかなりません。

Emissiveは「光っているように見せる」だけとは限りません。 UE5のLumenでは、Emissiveを設定した面が 実際に周囲を照らします 。ただし効果が出るには 十分な面積と強さ が必要で、小さく弱い発光ではほとんど影響しません。ネオン看板で周囲を照らしたいなら、Emissiveの値を数十以上にする必要があります。

タイリングは Texture Coordinate で調整します。 テクスチャが引き伸ばされて見えるときは、U+クリックで Texture Coordinate を置き、UTiling / VTiling を上げて Texture SampleUVs に繋ぎます。ここもパラメータ化しておくと、Instance側で調整できて便利です。

Substrateという新しいマテリアルの仕組みもあります。 UE5には、複数の質感を重ね合わせて表現できる Substrate というマテリアルの枠組みが用意されています(車の塗装のクリア層、濡れた革、血や汗の乗った肌など)。既定では従来のマテリアルが使われるので、この記事で覚えた Base Color / Metallic / Roughness / Normal の4つの考え方は、そのまま土台になります 。有効化するとマテリアルの作り方が変わるため、まずは従来の形で慣れてから触ってください。

プレビュー球だけで判断しない。 マテリアルエディタのプレビューは専用の照明環境です。 実際のレベルに置いて、そのゲームの照明で見る まで完成とは言えません。特に暗いシーンでは印象が大きく変わります。


まとめ

マテリアルで迷ったら、この順番で確認してください。

症状見るピン
安っぽい・のっぺりしているRoughness(未設定なら0.5前後を入れる)
プラスチックみたいMetallic(金属なら1に)
平坦で凹凸感がないNormal(Normal Mapを繋ぐ)
凹凸が逆テクスチャの Flip Green Channel
真っ黒Base Colorが暗すぎる/周囲に光がない

そして運用の指針が1つ。 色違いはInstanceで作ります 。マテリアルを複製した瞬間から、あとで直す場所がその数だけ増えていきます。

いま使っているマテリアル、Roughnessのピンは繋がっていますか?