【Unity】Unity Shader Graph入門:プログラミング不要でシェーダーを自在に操る

作成: 2026-02-05

UnityのShader Graphを使ってプログラミング不要でシェーダーを作成する方法を解説。ノードベースのビジュアルエディタで直感的にマテリアルをカスタマイズできます。

概要

「シェーダーを作りたいけど、プログラミングが難しそう」「HLSLやCgのコードが読めない」

Shader Graph は、Unity公式のノードベースビジュアルシェーダーエディタです。ノードを線でつなぐだけで、溶岩のような発光するマテリアルや、波打つ水面、ホログラムのようなエフェクトまで、様々なシェーダーを作ることができます。

従来のシェーダーとの違い

従来のシェーダーの課題

  • プログラミングの知識が必須
  • デバッグが難しい
  • 試行錯誤に時間がかかる
  • 非エンジニアには敷居が高い

Shader Graphの利点

  • プログラミング不要 - ノードを接続するだけ
  • ビジュアルで分かりやすい - 処理の流れが視覚的に理解できる
  • リアルタイムプレビュー - 変更結果を即座に確認
  • 再利用性が高い - Sub Graphで共通パーツを作成
  • URPとHDRPに対応 - Built-in RPはバージョンにより対応状況が異なる

Built-in RP対応状況:

UnityバージョンBuilt-in RP対応状況
2021以前非対応
2022.1〜2022.3Unlit Shader Graphのみ
2023.1以降Unlit + 一部Litシェーダーに対応

Built-in RPではLit Shader Graphの全機能が使えるわけではなく、カスタムライティングモデルなど一部機能に制限があります。

Shader Graphの構成要素

要素説明
Shader Graphアセットシェーダーの設定を保存するファイル
Blackboardプロパティとキーワードのリスト
Master Stackシェーダーへの最終的な出力
ノードシェーダーの処理単位
プロパティシェーダーの外部パラメータ
Sub Graph再利用可能なパーツ

Shader Graphアセットの種類

種類用途
Unlit Shader Graphライトの影響を受けない(UI、エフェクト向け)
Lit Shader Graphライトの影響を受ける(PBRマテリアル向け)

Master Stackの構造

Master Stackは2つのステージで構成されています:

ステージ処理内容主な用途
Vertex頂点シェーダー処理頂点アニメーション、位置変形
Fragmentフラグメントシェーダー処理色、テクスチャ、ライティング

Position端子: Vertexステージの Position 端子に接続することで、頂点の位置を変形できます(波打つ水面、風になびく草など)。

Lit Shader GraphのPBRパラメータ

パラメータ説明
Base Color基本色
Normal法線マップ(凹凸表現)
Metallic金属度(0=非金属、1=金属)
Smoothness滑らかさ(0=ザラザラ、1=ツルツル)
Emission発光色
Ambient Occlusion環境遮蔽(影の濃さ)
Alpha透明度(Transparent設定時に使用)

透明・半透明マテリアルの設定

ガラスや半透明のマテリアルを作成するには:

  1. Shader Graphを選択し、Graph Inspector を開く
  2. Surface TypeTransparentに変更
  3. Master Stackの Alpha 端子に透明度を接続(0=完全透明、1=不透明)

Graph Inspectorの主要設定一覧:

設定選択肢用途
Surface TypeOpaque / Transparent不透明 / 透明
Render FaceFront / Back / Both描画面
Alpha ClippingOn / Offテクスチャ切り抜き
Two SidedOn / Off両面描画
Cast ShadowsOn / Off影の投影

Alpha Clipping: 葉や草など、テクスチャで切り抜きたい場合は Alpha Clipping を有効にし、Alpha Clip Threshold を設定します。

Shader Graphの作成と基本操作

Shader Graphアセットの作成

  1. Projectウィンドウで右クリック
  2. Create > Shader Graph > URP > Unlit Shader Graphを選択
  3. アセットをダブルクリックしてエディタを開く

ノードの作成と接続

  1. 作業スペースで右クリック → Create Node
  2. 検索フィールドでノードを検索
  3. ノードの出力ポートからMaster Stackの入力ポートへドラッグ

マテリアルの作成と適用

  1. Shader Graphアセットを右クリック → Create > Material
  2. 作成されたマテリアルをオブジェクトにドラッグ&ドロップ

プロパティを使った動的なシェーダー

プロパティの追加

  1. Blackboardの+ボタンをクリック
  2. プロパティの種類を選択(Color、Float、Texture2Dなど)
  3. プロパティをShader Graphウィンドウにドラッグ&ドロップ

スクリプトから色を変更

// 方法1: material直接変更(マテリアルインスタンスが生成される)
renderer.material.SetColor("_Main_Color", Color.red);

// 方法2: MaterialPropertyBlock(バッチング維持、推奨)
var mpb = new MaterialPropertyBlock();
renderer.GetPropertyBlock(mpb);
mpb.SetColor("_Main_Color", Color.red);
renderer.SetPropertyBlock(mpb);

SRP BatcherとMaterialPropertyBlockの関係:

  • SRP Batcher有効環境ではMaterialPropertyBlockを使用するとSRP Batcherのバッチが切れます
  • 少数のオブジェクト → MaterialPropertyBlockで問題なし
  • 大量のオブジェクト → material instanceの方がSRP Batcherの恩恵を受けられる場合がある
  • 用途に応じて使い分けてください

重要: Reference名について スクリプトからプロパティにアクセスする際は、Blackboardで設定した Reference名 を使用します。Blackboardでプロパティを選択し、Graph Inspectorで Reference フィールドを確認してください。デフォルトでは_プロパティ名の形式になります(例:Main Color_Main_Color、スペースはアンダースコアに変換)。Reference名はGraph Inspectorで自由に変更可能です。

テクスチャを使ったシェーダー

  1. Texture2Dプロパティを追加
  2. Sample Texture 2Dノードを追加
  3. プロパティをTexture入力に接続
  4. RGBA出力をBase Colorに接続

スクロールするテクスチャ

  1. Timeノード を追加(時間を取得)
  2. Vector2ノード を追加(X方向のみに時間を適用)
  3. Tiling and Offsetノード を追加
  4. Vector2の出力をOffset入力に接続
  5. Sample Texture 2DのUV入力に接続

スピード調整にはMultiplyノードを使用します。

よく使うノード

Input Nodes

ノード説明
Time時間を取得(アニメーション用)
UVメッシュのUV座標を取得
Position頂点の位置を取得

Texture Nodes

ノード説明
Sample Texture 2Dテクスチャをサンプリング
Tiling and OffsetUV座標にタイリングとオフセットを適用

Math Nodes

ノード説明
Add, Subtract, Multiply, Divide基本的な算術演算
Lerp線形補間
Clamp値を範囲内に制限

Procedural Nodes

ノード説明
Noiseノイズを生成
Checkerboardチェッカーボードパターンを生成
Gradientグラデーションを生成
Fresnel Effect視線角度に応じた効果(リムライト、ホログラム)

Fresnel EffectのPower値:

  • 値が小さい(1〜2)→ 効果が広い範囲に及ぶ(全体的に光る)
  • 値が大きい(5〜10)→ 効果がエッジのみに集中(シャープなリムライト)

Sub Graphの作成

Sub Graphは、複数のノードをまとめて再利用可能なパーツにする機能です。

作成手順

  1. Projectウィンドウで右クリック → Create > Shader Graph > Sub Graph
  2. Sub Graphエディタで入力(Input)と出力(Output)を定義
  3. 処理ノードを接続
  4. 保存して、他のShader Graphで使用

活用例

  • ノイズ生成の共通処理
  • UV操作のパターン
  • 色変換の共通ロジック

具体例:UV回転Sub Graph

入出力名前
入力UVVector2
入力AngleFloat
出力RotatedUVVector2

処理: RotateノードでUVをAngle度回転させ、RotatedUVとして出力。テクスチャの回転アニメーションなどに再利用できます。

高度な機能

Keyword(条件分岐)

シェーダー内で#ifdef相当の条件分岐を実現します。

  1. Blackboardで+Keyword を選択
  2. Boolean/Enum/Built-inから種類を選択
  3. Keywordをグラフにドラッグすると Keywordノード が自動生成される
  4. Keywordノードの各出力に異なる処理を接続

最適化: Keywordを使うと、条件に応じて異なるシェーダーバリアントがコンパイルされ、不要な処理を省けます。

Custom Function Node

HLSLコードを直接記述できるノードです。Shader Graphでは実現できない処理を追加する際に使用します。

  1. 右クリック → Create NodeCustom Function を検索
  2. ファイルまたはインラインでHLSLコードを記述
  3. 入力/出力を定義して接続

次のステップ: HLSLの知識がある方は、Custom Function Nodeで高度な表現に挑戦してみてください。

よくある問題と解決策

症状原因と対処
ピンク色になるシェーダーのコンパイルエラー。Graph Inspectorでエラーを確認
マテリアルが真っ黒Base Colorに何も接続されていない、またはNormal Mapの形式が未設定
透明にならないSurface TypeがOpaqueのまま
Normal Mapが紫色にならないテクスチャのImport SettingsでTexture Typeを「Normal map」に設定する

シェーダーバリアント: Keywordを増やすとシェーダーバリアント数が指数的に増加します(n個のBooleanキーワードで最大2^n個)。モバイル向けではGraphics Settingsで不要なバリアントを除外することを推奨します。

まとめ

Shader Graphは、プログラミング不要でシェーダーを作成できる強力なツールです。

  • ノードベース - ノードを接続するだけで複雑なシェーダーを作成
  • リアルタイムプレビュー - 変更結果を即座に確認
  • プロパティ - マテリアルから値を調整、スクリプトからも変更可能
  • Sub Graph - 共通パーツを再利用

まずは簡単な色の変更やテクスチャの表示から始めて、徐々にアニメーションやエフェクトに挑戦してみてください。