3Dモデル(メッシュ)は、単なる「形状」のデータにすぎません。同じ球のモデルでも、設定ひとつでピカピカの金にも、マットなプラスチックにも、光を放つネオンにも見せられます。この「見た目」を担当するのが、マテリアル (Material) と シェーダー (Shader) です。
この二つの概念は密接に関連しており、しばしば混同されがちですが、役割は明確に異なります。この記事では、両者の関係からUnityの標準シェーダー(Lit/Unlit)の使い方、 PBR(物理ベースレンダリング) の基本プロパティまでを解説します。
この記事でわかること
- シェーダー(レシピ)とマテリアル(料理)の関係
LitとUnlitの使い分け- PBRの3大プロパティ:
Albedo・Metallic・Smoothness- 金属・木材・ゴム・濡れた床——質感レシピ早見表
Normal MapとEmissionによるディテールと発光- 被弾した1体だけ白く光らせる実践——
renderer.materialとsharedMaterialの罠
シェーダーとマテリアルの関係
- シェーダー: オブジェクトをどのように描画(レンダリング)するかを計算するための プログラム(計算式) です。光をどう反射するか、影をどう落とすか、テクスチャをどう貼るか——という計算のしかたが書かれています。
- マテリアル: シェーダーを実際にオブジェクトへ適用するためのアセットです。シェーダーを1つ選び、そのシェーダーが公開しているプロパティ(色、テクスチャ、滑らかさなど)に具体的な値を設定します。
例えるなら、 シェ ーダーが「料理のレシピ」、マテリアルが「レシピに材料を当てはめて作った料理」 です。同じレシピ(シェーダー)でも、材料(プロパティの値)を変えれば、まったく違う料理(見た目)になります。

「金のマテリアル」「木のマテリアル」を100個作っても、レシピ(シェーダー)は同じLit1つ——というのが典型的なプロジェクトの姿です。
マテリアルの作成と適用
- 作成: プロジェクトウィンドウで右クリックし、
Create > Materialを選択します。新しいマテリアルアセット(.matファイル)が作成されます。 - 適用: 作成したマテリアルアセットを、シーンビューまたはヒエラルキー上の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 (ライティングあり): シーン内のライト(光源)の影響を完全に受けます。光の当たり方によって陰影がつき、リアルな質感を表現できます。3Dゲーム内のほとんどのオブジェクトはLit系を使用します。これがPBR (Physically Based Rendering) の基本です(ライト側の設定は ライティング入門 を参照)。
- Unlit (ライティングなし): シーン内のライトを完全に無視します。設定された色やテクスチャがそのままの明るさで表示されます。UI要素、トゥーン調の演出、特殊なエフェクト、デバッグ表示などに使われます。
判断基準は1行です。 「その見た目は、光に反応してほしいか」 ——反応してほしいならLit、常に同じ見た目でいてほしいならUnlitです。
PBR (物理ベースレンダリング) の基本プロパティ
Litシェーダーは、物理法則に基づいて光の反射をシミュレートするPBRに対応しています。現実世界の物質の特性を指定するだけで、どんなライティング環境でもリアルに見えるマテリアルを作れます。覚えるべき主要プロパティは、実質3つ+2つです。

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

- Normal Map (法線マップ): ポリゴン数を増やさずに、表面に細かい凹凸があるように見せかける特殊なテクスチャです。レンガの溝、布の織り目、鎧の彫金——「ローポリなのにリッチ」の正体はだいたいこれです。
- Emission (エミッション): オブジェクト自体が発光しているように見せます。ネオンサイン、魔法のアイテム、モニター画面などに使われます。ポストプロセッシングの
Bloomと組み合わせると美しいグロー(光のにじみ)になります(ポストプロセッシング入門 参照)。
質感レシピ早見表
実際のゲームでよく使う質感を、プロパティの組み合わせ で再現するレシピ集です。まずはこの値から始めて、見た目を微調整してください。
| 作りたい質感 | Metallic | Smoothness | 補足 |
|---|---|---|---|
| 金の宝箱・装飾 | 1 | 0.7〜0.9 | Albedoは黄金色。輝きはSmoothnessで調整 |
| 鏡・クロムパーツ | 1 | 1 | 反射には環境(Skybox等)の映り込みが重要 |
| プラスチックのおもちゃ | 0 | 0.6〜0.8 | 彩度高めのAlbedoでポップに |
| 木材・家具 | 0 | 0.2〜0.4 | 木目テクスチャ+Normal Mapで質感アップ |
| ゴム・タイヤ | 0 | 0〜0.15 | ほぼ光らないのがゴムらしさ |
| 濡れた路面 | 0 | 0.7〜0.9 | Albedoを乾いた状態より暗くするのがコツ |
「濡れた路面」のレシピが示すとおり、水に濡れる=Smoothnessが上がり、色が濃くなるという現実の法則をそのまま値にすればよいのがPBRの分かりやすさです。
実践:被弾した1体だけ白く光らせる
仕上げは、マテリアルをスクリプトから触る定番演出です。アクションゲームでもRPGでもシューティングでも、「攻撃が当たった敵が一瞬白く光る」あの表現——これを、同じマテリアルを共有する敵3体で作ります。
準備はシンプルです。Slime.matを1つ作り、球(またはお好みの敵モデル)3体すべてに割り当てます。まずProjectウィンドウでSlime.matのAlbedoを変えてみてください。3体が同時に色を変えます。これがマテリアル「共有」の正体で、Prefabの一括修正と同じ気持ちよさです。

では「被弾した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は最初のアクセス時にそのオブジェクト専用のマテリアル複製を自動生成するので、共有元に影響せず安全に触れる——これがこの演出の仕組みです。
わざと壊して、直す
materialをsharedMaterialに書き換える: 1体殴ると3体全員が白く光ります。さらに恐ろしいのはエディタでの後遺症で、sharedMaterialはSlime.matアセットそのものを書き換えるため、Playを止めても白いまま・Ctrl+Zも効きません。「停止したのに色が戻らない」事件の犯人は、ほぼこれです- 敵を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。 停止後も色が戻らないときは後者を疑う。
良いマテリアルは、ゲームの世界の説得力を格 段に高めてくれます。