UnityのShader Graphは、コードを書かずに、ノードをつないでシェーダーを作るツールです。
最初の1つを作るまでの流れは、次のとおりです。
- Projectウィンドウで Create → Shader Graph → URP → Lit を選び、グラフを作る
- Shader Graphのウィンドウでノードを置き、右側のMaster Stackにつなぐ
- Save Asset で保存する
- グラフのアセットを右クリックして Create → Material でマテリアルを作る
- マテリアルをシーンのオブジェクトにドラッグする
この記事では、この流れに加えて、Blackboardでプロパティを作り、マテリアルのInspectorやスクリプトから値を変える方法を説明します。
Unityのエディタでの実機での再現は含まず、Unity 6.3 LTSに対応するShader Graph 17.3のドキュメントと、Unityのスクリプトリファレンスの記載(2026年10月18日に確認)に基づきます。
画面の名前は英語版の表記です。
Shader Graphを使える環境
Shader Graphのドキュメントでは、URPかHDRPを入れると、Shader Graphのパッケージも自動で入ると説明されています。
Unity 6.3のマニュアルでは、Shader Graphはエディタの版に合わせて版が固定されるコアパッケージとして扱われています。
| レンダーパイプライン | Shader Graphの扱い |
|---|---|
| URP | インストールすると自動で入る |
| HDRP | インストールすると自動で入る |
| Built-in | Unity 2021.2以降はPackage Managerで入れれば使える。互換のためのもので、不具合の修正以外の更新はない |
同じページでは、Built-inでShader Graphを使う場合、XRに対応せず、GPU Instancingも効かないとされています。
これから始める場合は、URPかHDRPのプロジェクトで使うのが前提になります。
レンダーパイプラインの違いは、URP・HDRP・Built-inの違いと選び方で説明しています。
グラフを作る3つの方法
Shader Graphのアセットは、Projectウィンドウの右クリックメニューの Create → Shader Graph から作ります。
| メニュー | できるもの |
|---|---|
| From Template | テンプレートの一覧から選んで作る。一覧はプロジェクトのレンダーパイプラインに合わせて表示される |
| URP → Lit など | レンダーパイプラインとシェーダーの種類を決めた状態で作る |
| Blank Shader Graph | 空のグラフを作る。使うにはGraph Settingsでターゲットを決める必要がある |
最初は、URPのプロジェクトなら Create → Shader Graph → URP → Lit で作るのが、公式の入門の例と同じ手順です。
Shader Graphのウィンドウの見方
作ったアセットに名前を付けると、Shader Graphのウィンドウが開きます。
開かない場合は、アセットをダブルクリックします。
| 部分 | 役割 |
|---|---|
| Master Stack | シェーダーの最終的な見た目を決める終点。VertexとFragmentの2つの区画がある |
| Blackboard | マテリアルから変えられるプロパティやキーワードを作って管理する |
| Graph Inspector | 選んだノードやプロパティの設定(Node Settings)と、グラフ全体の設定(Graph Settings)を変える |
| Main Preview | シェーダーの見た目をその場で表示する。ドラッグで回し、ホイールで拡大縮小できる |
Master Stackのドキュメントでは、Vertexの区画につないだノードは頂点の処理に、Fragmentの区画につないだノードはピクセルの処理になると説明されています。
色を変えるだけなら、Fragmentの区画にある Base Color につなぎます。
ノードを置いて色を付ける
- Shader Graphのウィンドウの何もない場所を選び、スペースキーを押す
- Create Nodeのメニューの検索欄に color と入力する
- Input → Basic の Color をダブルクリックして置く
- Colorノードの Out(4) の端子を、Fragmentの Base Color の端子へドラッグする
- Colorノードの色の帯をクリックし、色を選ぶ
公式の例では、つないだ直後はColorノードの初期値が黒のため、Main Previewの球は黒く表示されます。
色を選ぶと、Main Previewの色がその場で変わります。
最後に、ウィンドウの左上の Save Asset で保存します。
保存していない変更は、マテリアルには反映されません。
マテリアルを作ってオブジェクトに付ける
- Projectウィンドウで、保存したShader Graphのアセットを右クリックする
- Create → Material を選ぶ
- できたマテリアルを、シーンのオブジェクトにドラッグする
ドキュメントでは、この方法で作ったマテリアルには、元のShader Graphが自動で割り当てられると説明されています。
マテリアルのInspectorの Shader の欄に、グラフの名前が表示されていれば割り当てられています。
既にあるマテリアルを使う場合は、Inspectorの Shader の欄から、作ったグラフを選びます。
プロパティでInspectorから色を変える
Colorノードの色はグラフの中に固定されるため、マテリアルごとに色を変えたい場合は、プロパティを使います。
- Blackboardの Add (+) を押し、Color を選ぶ
- できたプロパティを選び、Graph Inspectorの Node Settings で Name を分かりやすい名前にする
- Show In Inspector がオンになっていることを確かめる
- プロパティをBlackboardからウィンドウの作業領域へドラッグする
- プロパティのノードを、Colorノードの代わりに Base Color へつなぐ
- Save Asset で保存する
保存してマテリアルのInspectorに戻ると、作ったプロパティが表示されます。
ドキュメントでは、Inspectorで変えた値は、そのマテリアルを使うすべてのオブジェクトに反映されると説明されています。
オブジェクトごとに違う色にしたい場合は、マテリアルを複数作ります。
よく使うプロパティの種類
| 種類 | マテリアルのInspectorでの表示 |
|---|---|
| Color | 色を選ぶ欄 |
| Float | 数値の欄。Modeを Slider にするとスライダーになる |
| Texture 2D | テクスチャを選ぶ欄。グラフでは Sample Texture 2D ノードにつないで使う |
| Boolean | オン・オフの欄 |
Sample Texture 2D ノードは、Create Nodeのメニューの Input → Texture にあります。
NameとReferenceの違い
| 項目 | 役割 |
|---|---|
| Name | マテリアルのInspectorに表示される名前 |
| Reference | シェーダーの中で使う名前。スクリプトから値を変えるときはこちらを使う |
| Show In Inspector | オンにするとマテリアルのInspectorに表示される |
| Scope | Per Material はマテリアルごとに値を持つ。Global はスクリプトから全マテリアルの値をまとめて変える |
ドキュメントでは、Referenceを自分で書き換えたとき、先頭がアンダースコアでなければ自動で付き、HLSLで使えない文字は取り除かれると説明されています。
スクリプトから値を変える
プロパティの値は、スクリプトから Material.SetColor などで変えられます。
次の例は、Referenceが _Tint のColorプロパティを、再生したときに赤にするものです。
using UnityEngine;
public class ChangeTint : MonoBehaviour
{
// Shader GraphのプロパティのReferenceと同じ名前にする
static readonly int TintId = Shader.PropertyToID("_Tint");
void Start()
{
var material = GetComponent<Renderer>().material;
material.SetColor(TintId, Color.red);
}
}このコードは、スクリプトリファレンスのRenderer.material、Material.SetColor、Shader.PropertyToIDの記載をもとにしたもので、Unityでの実行は確かめていません。
スクリプトリファレンスでは、Renderer.materialを使うと、そのオブジェクト専用のマテリアルの複製が作られ、変更はそのオブジェクトにだけ反映されると説明されています。
同じページでは、こうして作られたマテリアルは、オブジェクトを破棄するときに自分で破棄する必要があるとされています。
Shader.PropertyToIDは、プロパティの名前を数値のIDに変えるもので、何度もSetColorを呼ぶ場合は文字列で渡すより効率がよいと説明されています。
うまくいかないときの確認
| 症状 | 確かめること |
|---|---|
| マテリアルがピンク(マゼンタ)になる | グラフのターゲットと、プロジェクトのレンダーパイプラインが合っているか |
| グラフを変えても見た目が変わらない | Save Asset で保存したか |
| プロパティがInspectorに出ない | Show In Inspector がオンか、Scope が Global になっていないか、保存したか |
| スクリプトから色が変わらない | SetColorに渡した名前がNameではなくReferenceか |
| 一部のブロックが灰色になっている | Graph Settingsの設定で、そのブロックが使われない状態になっている |
Master Stackのドキュメントでは、Graph Settingsを変えると一部のブロックが使われない状態になり、そのブロックと、そこだけにつながったノードは灰色で表示されると説明されています。
Blank Shader Graphで作った場合は、Graph InspectorのGraph Settingsで、Active Targetsにレンダーパイプラインを追加します。
ピンクになる原因の詳しい切り分けは、マテリアルがピンク(マゼンタ)になる原因と直し方で説明しています。
Shader Graphのドキュメントでは、古いチュートリアルはMaster Stackができる前のマスターノードの画面で説明されていることがあると注意書きがあります。
検索で見つけた解説の画面が今と違う場合は、版を確かめてください。
参考にした公式ページ
- Shader Graph 17.3:Install Shader Graph
- Shader Graph 17.3:Create a shader graph asset
- Shader Graph 17.3:Create a shader graph and use it with a material
- Shader Graph 17.3:Master Stack
- Shader Graph 17.3:Blackboard
- Shader Graph 17.3:Property Types
- Shader Graph 17.3:Graph Settings tab reference
- Renderer.material(スクリプトリファレンス)
- Material.SetColor(スクリプトリファレンス)
