【Unity】Unityのマテリアルとシェーダー基礎:オブジェクトに色と質感を設定する

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

同じ球が、設定ひとつで金にもプラスチックにもゴムにも見える——それがマテリアルとシェーダーの力です。両者の関係から、Lit/Unlitの使い分け、PBRの3大プロパティ、質感レシピ早見表、renderer.materialの罠までを解説します。

3Dモデル(メッシュ)は、単なる「形状」のデータにすぎません。同じ球のモデルでも、設定ひとつでピカピカの金にも、マットなプラスチックにも、光を放つネオンにも見せられます。この「見た目」を担当するのが、マテリアル (Material)シェーダー (Shader) です。

この二つの概念は密接に関連しており、しばしば混同されがちですが、役割は明確に異なります。この記事では、両者の関係からUnityの標準シェーダー(Lit/Unlit)の使い方、 PBR(物理ベースレンダリング) の基本プロパティまでを解説します。

マテリアルの力のイメージ。同じ形の3つの球が、金属・プラスチック・発光ネオンというまったく異なる質感で並んでいる

この記事でわかること

  • シェーダー(レシピ)とマテリアル(料理)の関係
  • LitUnlitの使い分け
  • PBRの3大プロパティ: AlbedoMetallicSmoothness
  • 金属・木材・ゴム・濡れた床——質感レシピ早見表
  • Normal MapEmissionによるディテールと発光
  • 被弾した1体だけ白く光らせる実践——renderer.materialsharedMaterialの罠

Sponsored

シェーダーとマテリアルの関係

  • シェーダー: オブジェクトをどのように描画(レンダリング)するかを計算するための プログラム(計算式) です。光をどう反射するか、影をどう落とすか、テクスチャをどう貼るか——という計算のしかたが書かれています。
  • マテリアル: シェーダーを実際にオブジェクトへ適用するためのアセットです。シェーダーを1つ選び、そのシェーダーが公開しているプロパティ(色、テクスチャ、滑らかさなど)に具体的な値を設定します。

例えるなら、 シェーダーが「料理のレシピ」、マテリアルが「レシピに材料を当てはめて作った料理」 です。同じレシピ(シェーダー)でも、材料(プロパティの値)を変えれば、まったく違う料理(見た目)になります。

シェーダーとマテリアルの関係図。1枚のレシピ(シェーダー)から、材料の値を変えることで金の球・赤いプラスチックの球・黒いゴムの球という3つの異なる料理(マテリアル)が生まれる

「金のマテリアル」「木のマテリアル」を100個作っても、レシピ(シェーダー)は同じLit1つ——というのが典型的なプロジェクトの姿です。

マテリアルの作成と適用

  1. 作成: プロジェクトウィンドウで右クリックし、Create > Materialを選択します。新しいマテリアルアセット(.matファイル)が作成されます。
  2. 適用: 作成したマテリアルアセットを、シーンビューまたはヒエラルキー上の3Dオブジェクトにドラッグ&ドロップします。すると、オブジェクトのMesh RendererコンポーネントのMaterials配列に、そのマテリアルがセットされます。

FBXからインポートしたモデルのマテリアルを編集するには、先に「Extract Materials」で抽出が必要です(3Dモデルインポートの記事 参照)。

Standard Shader: Lit vs Unlit

マテリアルアセットを選択すると、Inspector上部のShaderドロップダウンで「レシピ」を選べます。Unityの標準的なレンダーパイプライン(Built-in Render Pipeline)ではStandardシェーダーがデフォルトです。URP (Universal Render Pipeline) や HDRP を使用している場合は、Lit(ライティングあり)とUnlit(ライティングなし)が基本になります(本質的な役割は同じです)。

LitとUnlitの比較図。同じ球にライトを当てたとき、Litは光の方向に応じた陰影とハイライトが付き、Unlitはライトを無視して設定した色がのっぺりそのまま表示される
  • Lit (ライティングあり): シーン内のライト(光源)の影響を完全に受けます。光の当たり方によって陰影がつき、リアルな質感を表現できます。3Dゲーム内のほとんどのオブジェクトはLit系を使用します。これがPBR (Physically Based Rendering) の基本です(ライト側の設定は ライティング入門 を参照)。
  • Unlit (ライティングなし): シーン内のライトを完全に無視します。設定された色やテクスチャがそのままの明るさで表示されます。UI要素、トゥーン調の演出、特殊なエフェクト、デバッグ表示などに使われます。

判断基準は1行です。 「その見た目は、光に反応してほしいか」 ——反応してほしいならLit、常に同じ見た目でいてほしいならUnlitです。

Sponsored

PBR (物理ベースレンダリング) の基本プロパティ

Litシェーダーは、物理法則に基づいて光の反射をシミュレートするPBRに対応しています。現実世界の物質の特性を指定するだけで、どんなライティング環境でもリアルに見えるマテリアルを作れます。覚えるべき主要プロパティは、実質3つ+2つです。

PBRプロパティのマトリクス図。横軸にMetallic 0から1、縦軸にSmoothness 0から1を取った球のグリッドで、左下はマットな非金属、右上は鏡のような金属など質感の変化が一望できる
  • Albedo (アルベド): オブジェクトの基本的な色。ここにカラーテクスチャ(物体の模様や色を描いた画像)を割り当てるのが一般的です。
  • Metallic (メタリック): 表面がどれだけ「金属らしいか」を0〜1で設定します。0は非金属(プラスチック、木、布)、1は金属(鉄、金、銅)。通常は0か1のどちらかに振り切り、中間値はほぼ使いません(現実の物質は金属か非金属かのどちらかだからです)。
  • Smoothness (滑らかさ): 表面の滑らかさ。1に近いほど鏡のように光をはっきり反射し、0に近いほどザラザラして光が拡散します。ツヤ、濡れ、すりガラス——質感の印象を最も大きく左右するプロパティです。 注意: UnityではSmoothness、Unreal Engineなど他の環境ではRoughness(= 1 − Smoothness)が使われます。概念は同じで向きが逆なだけです。

さらに2つ、見た目を一段引き上げるプロパティがあります。

Normal MapとEmissionの実例図。左は平らなポリゴンなのにNormal Mapでレンガの溝が立体的に見える壁、右はEmissionで文字が光るネオンサインが夜の街に浮かぶ
  • Normal Map (法線マップ): ポリゴン数を増やさずに、表面に細かい凹凸があるように見せかける特殊なテクスチャです。レンガの溝、布の織り目、鎧の彫金——「ローポリなのにリッチ」の正体はだいたいこれです。
  • Emission (エミッション): オブジェクト自体が発光しているように見せます。ネオンサイン、魔法のアイテム、モニター画面などに使われます。ポストプロセッシングのBloomと組み合わせると美しいグロー(光のにじみ)になります(ポストプロセッシング入門 参照)。

質感レシピ早見表

実際のゲームでよく使う質感を、プロパティの組み合わせで再現するレシピ集です。まずはこの値から始めて、見た目を微調整してください。

作りたい質感MetallicSmoothness補足
金の宝箱・装飾10.7〜0.9Albedoは黄金色。輝きはSmoothnessで調整
鏡・クロムパーツ11反射には環境(Skybox等)の映り込みが重要
プラスチックのおもちゃ00.6〜0.8彩度高めのAlbedoでポップに
木材・家具00.2〜0.4木目テクスチャ+Normal Mapで質感アップ
ゴム・タイヤ00〜0.15ほぼ光らないのがゴムらしさ
濡れた路面00.7〜0.9Albedoを乾いた状態より暗くするのがコツ

「濡れた路面」のレシピが示すとおり、水に濡れる=Smoothnessが上がり、色が濃くなるという現実の法則をそのまま値にすればよいのがPBRの分かりやすさです。

実践:被弾した1体だけ白く光らせる

仕上げは、マテリアルをスクリプトから触る定番演出です。アクションゲームでもRPGでもシューティングでも、「攻撃が当たった敵が一瞬白く光る」あの表現——これを、同じマテリアルを共有する敵3体で作ります。

準備はシンプルです。Slime.matを1つ作り、球(またはお好みの敵モデル)3体すべてに割り当てます。まずProjectウィンドウでSlime.matのAlbedoを変えてみてください。3体が同時に色を変えます。これがマテリアル「共有」の正体で、Prefabの一括修正と同じ気持ちよさです。

マテリアルの変更範囲の比較図。アセットを編集すると3体全員が変わり、renderer.materialならその1体だけが白く光る

では「被弾した1体だけ」を光らせるには?——ここでrenderer.materialの出番です。

using UnityEngine;
using System.Collections;

public class HitFlash : MonoBehaviour
{
    [SerializeField] private Color flashColor = Color.white;
    [SerializeField] private float flashTime = 0.1f;

    private Renderer rend;
    private Color originalColor;

    void Awake()
    {
        rend = GetComponent<Renderer>();
        // materialへ最初にアクセスした瞬間、この1体専用の複製が生まれる
        originalColor = rend.material.color;
    }

    public void Flash()
    {
        StopAllCoroutines();  // 連打されても点滅が重ならないように
        StartCoroutine(FlashRoutine());
    }

    private IEnumerator FlashRoutine()
    {
        rend.material.color = flashColor;
        yield return new WaitForSeconds(flashTime);
        rend.material.color = originalColor;  // 必ず元の色へ戻す
    }
}

適当なテストコード(クリックした敵のFlash()を呼ぶなど)で動かすと、殴った1体だけが0.1秒白く光り、他の2体は青いままです。renderer.materialは最初のアクセス時にそのオブジェクト専用のマテリアル複製を自動生成するので、共有元に影響せず安全に触れる——これがこの演出の仕組みです。

わざと壊して、直す

  1. materialsharedMaterialに書き換える: 1体殴ると3体全員が白く光ります。さらに恐ろしいのはエディタでの後遺症で、sharedMaterialSlime.matアセットそのものを書き換えるため、Playを止めても白いまま・Ctrl+Zも効きません。「停止したのに色が戻らない」事件の犯人は、ほぼこれです
  2. 敵を30体に増やす: renderer.materialの複製は1体につき1個生まれます。30体なら複製30個——それぞれ別マテリアルになるため描画のまとめ効率(バッチング)が下がります。数十体程度なら実害はまずありませんが、大量に光らせるゲームではMaterialPropertyBlockという複製を作らない手段があります。どちらが速いかは環境次第なので、乗り換える前にProfilerとFrame Debuggerで測るのが鉄則です

Playを止めたあと、Slime.matが元の色のままか一度見てください。3体は1つのアセットを共有したまま、殴った1体だけが光って元に戻る——そこまで確認できたら、マテリアルをコードから触る作法は身についています。

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

マテリアルを触り始めたら、早めに知っておくと事故を防げる話題です。

  • ピンクのマテリアル=シェーダー欠落: プロジェクトのレンダーパイプライン(Built-in/URP/HDRP)とシェーダーが合っていないと、マテリアルはショッキングピンクになります。パイプラインの違いと変換方法は レンダーパイプラインの記事 で整理しています。
  • 自作シェーダーはShader Graphで: 「溶けるエフェクト」「ホログラム」のような独自の見た目は、ノードを繋いで作れる Shader Graph の世界です。PBRの基本を押さえた今なら、入りやすいはずです。

まとめ

マテリアルとシェーダーは、3Dオブジェクトに命を吹き込むための重要な要素です。

  • シェーダーは「レシピ」、マテリアルは「レシピから作った料理」。 1つのシェーダーから無数のマテリアルが作れる。
  • Litは光に反応し、Unlitは光を無視する。「光に反応してほしいか」で選ぶ。
  • PBRの基本はAlbedo(色)・Metallic(金属か否か、0か1)・Smoothness(質感の主役)の3つ。
  • Normal Mapでポリゴンを増やさずディテールを、Emissionで自己発光を。
  • 困ったら質感レシピ早見表の値から始める。
  • 1体だけ変えるならmaterial、全員(+アセットごと)変わるのがsharedMaterial 停止後も色が戻らないときは後者を疑う。

良いマテリアルは、ゲームの世界の説得力を格段に高めてくれます。