Amazon11/12まで!スマイルSale開催中!セール会場へ

Unity Shader Graphの始め方|マテリアル作成とプロパティの設定

Unity Shader Graphの始め方 マテリアルとプロパティ

UnityのShader Graphは、コードを書かずに、ノードをつないでシェーダーを作るツールです。

最初の1つを作るまでの流れは、次のとおりです。

  1. Projectウィンドウで Create → Shader Graph → URP → Lit Shader Graph を選び、グラフを作る
  2. Shader Graphのウィンドウでノードを置き、Master Stackにつなぐ
  3. ウィンドウの左上の保存のボタン(Save)で保存する
  4. グラフのアセットを右クリックして Create → Material でマテリアルを作る
  5. マテリアルをシーンのオブジェクトにドラッグする

この記事では、この流れに加えて、Blackboardでプロパティを作り、マテリアルのInspectorやスクリプトから値を変える方法を説明します。

説明は、2026年10月18日に確認したShader Graph 17.3とUnityの公式資料に基づきます。

対象はUnity 6.3 LTSです。

画面は、Unity 6.6(6000.6.5f1、Shader Graph 17.6.0)のUniversal 3Dテンプレートで作った練習用のプロジェクトで、2026年10月20日に撮影しました。

グラフの作成、ノードの接続、プロパティの追加、マテリアルへの割り当て、記事のスクリプトでの色の変更までは、実機で確かめています。

Unity 6.3 LTSの画面と、HDRP・Built-inでの動きは確かめていません。

画面の名前は英語版の表記です。

2026年10月26日に、Unity 6.3のRenderer.materialとMaterial.HasPropertyの公式仕様を再照合しました。

以下の画像と色変更の結果は2026年10月20日の記録で、今回は再実行・画面確認をしていません。

目次

Shader Graphを使える環境

Shader Graphのドキュメントでは、URPかHDRPを入れると、Shader Graphのパッケージも自動で入ると説明されています。

Unity 6.3のマニュアルでは、Shader Graphはエディタの版に合わせて版が固定されるコアパッケージとして扱われています。

レンダーパイプラインShader Graphの扱い
URPインストールすると自動で入る
HDRPインストールすると自動で入る
Built-inUnity 2021.2以降はPackage Managerで入れれば使える。互換のためのもので、不具合の修正以外の更新はない
Shader Graph 17.3のドキュメント「Install Shader Graph」をもとに作成

同じページでは、Built-inでShader Graphを使う場合、XRに対応せず、GPU Instancingも効かないとされています。

Unityの公式ドキュメントは、新しくShader Graphを使う場合にURPまたはHDRPを推奨しています。

この記事ではURPでの手順を説明します。

Unity 6.6のUniversal 3Dテンプレートで作ったプロジェクトでは、Package Managerで何も追加しなくても、URPと一緒にShader Graph 17.6.0が入っていて、そのまま使えました。

レンダーパイプラインの違いは、URP・HDRP・Built-inの違いと選び方で説明しています。

スポンサーリンク

グラフを作る3つの方法

Shader Graphのアセットは、Projectウィンドウの右クリックメニューの Create → Shader Graph から作ります。

メニューできるもの
From Templateテンプレートの一覧から選んで作る。一覧はプロジェクトのレンダーパイプラインに合わせて表示される
URP → Lit などレンダーパイプラインとシェーダーの種類を決めた状態で作る
Blank Shader Graph空のグラフを作る。使うにはGraph Settingsでターゲットを決める必要がある
Shader Graph 17.3のドキュメント「Create a shader graph asset」をもとに作成

最初は、URPのプロジェクトなら Create → Shader Graph → URP → Lit Shader Graph で作るのが、公式の入門の例と同じ手順です。

Unity 6.6では、URPの中の項目は Lit Shader Graph・Unlit Shader Graph のように、名前の後ろに Shader Graph が付いた形で並んでいました。

Projectウィンドウの右クリックメニューで、Create、Shader Graph、URPと開いた画面。URPの中にLit Shader Graph、Unlit Shader Graphなどが並び、Shader GraphのメニューにはFrom Template、Blank Shader Graph、Sub Graphもある
2026-10-20 撮影。Unity 6.6(6000.6.5f1、Shader Graph 17.6.0)、Windows 11。Projectウィンドウの右クリックから Create → Shader Graph → URP を開いた画面。先頭が Lit Shader Graph です

Shader Graphのウィンドウの見方

作ったアセットに名前を付けると、Shader Graphのウィンドウが開きます。

開かない場合は、アセットをダブルクリックします。

Unity 6.6では、最初にグラフを作ったときに、作成と同時に開くかどうかを聞く確認(Shader Graph Preferences)が出ました。

Yes を選ぶと、名前を付けた直後にShader Graphのウィンドウが開き、SceneやGameのビューと同じ場所にタブとして並びました。

確認の文では、この設定は後からEditorのPreferencesで変えられると案内されています。

部分役割
Master Stackシェーダーの最終的な見た目を決める終点。VertexとFragmentの2つの区画がある
Blackboardマテリアルから変えられるプロパティやキーワードを作って管理する
Graph Inspector選んだノードやプロパティの設定(Node Settings)と、グラフ全体の設定(Graph Settings)を変える
Main Previewシェーダーの見た目をその場で表示する。ドラッグで回し、ホイールで拡大縮小できる
Shader Graph 17.3のドキュメント(Master Stack・Blackboard・Graph Settings Tab・Main Preview)をもとに作成

Master Stackのドキュメントでは、Vertexの区画につないだノードは頂点の処理に、Fragmentの区画につないだノードはピクセルの処理になると説明されています。

色を変えるだけなら、Fragmentの区画にある Base Color につなぎます。

Unity 6.6で Lit Shader Graph を作ると、Vertexには Position・Normal・Tangent、Fragmentには Base Color・Normal (Tangent Space)・Metallic・Smoothness・Emission・Ambient Occlusion が最初から並んでいました。

この確認では、Main Previewの枠は表示されたものの、中の球は最後まで描かれませんでした。

同じときに、マテリアルのInspectorのプレビューとSceneビューの球には、グラフの色が出ていました。

Main Previewが空のままでも、色が付いたかはマテリアルのプレビューで確かめられます。

ノードを置いて色を付ける

  1. Shader Graphのウィンドウの何もない場所を選び、スペースキーを押す
  2. Create Nodeのメニューの検索欄に color と入力する
  3. Input → Basic の Color をダブルクリックして置く
  4. Colorノードの Out(4) の端子を、Fragmentの Base Color の端子へドラッグする
  5. Colorノードの色の帯をクリックし、色を選ぶ

公式の例では、つないだ直後はColorノードの初期値が黒のため、Main Previewの球は黒く表示されます。

実機でも、置いた直後のColorノードの色の帯は黒で、色を選ぶ画面の値はR・G・B・Aがすべて0でした。

ドキュメントでは、色を選ぶとMain Previewの色がその場で変わると説明されています。

検索欄に color と入れた一覧には、VFXのColorなど同じ名前のノードがほかにもあり、この確認では一覧の一番下の VFX → Particles → Color が選ばれた状態で表示されました。

一覧を上へ戻して、Input → Basic の下の Color を選んでください。

左はCreate Nodeの検索欄にcolorと入力した一覧で、Input、Basicの下にColorがある。右はColorノードのOut(4)をFragmentのBase Color(3)につないだグラフ
2026-10-20 撮影。Unity 6.6(6000.6.5f1、Shader Graph 17.6.0)、Windows 11。スペースキーで開いたCreate Nodeの検索結果(左)と、置いたColorノードをBase Colorにつないだ状態(右)。2か所を切り出して並べています

最後に、ウィンドウの左上の保存のボタンで保存します。

Unity 6.6では、このボタンはディスクの絵だけで、ポインターを乗せると Save と表示されました。

隣の▼には、Save As...・Show In Project・Check Out がありました。

保存していない間は、タブのグラフの名前の後ろに * が付きます。

保存していない変更は、マテリアルには反映されません。

マテリアルを作ってオブジェクトに付ける

  1. Projectウィンドウで、保存したShader Graphのアセットを右クリックする
  2. Create → Material を選ぶ
  3. できたマテリアルを、シーンのオブジェクトにドラッグする

ドキュメントでは、この方法で作ったマテリアルには、元のShader Graphが自動で割り当てられると説明されています。

マテリアルのInspectorの Shader の欄に、グラフの名前が表示されていれば割り当てられています。

実機では、TintLit という名前のグラフから作ったマテリアルの Shader の欄に、Shader Graphs/TintLit と表示されました。

この確認では、できたマテリアルに TintMat と名前を付け、SceneビューのSphereへドラッグして付けました。

既にあるマテリアルを使う場合は、Inspectorの Shader の欄から、作ったグラフを選びます。

プロパティでInspectorから色を変える

Colorノードの色はグラフの中に固定されるため、マテリアルごとに色を変えたい場合は、プロパティを使います。

  1. Blackboardの Add (+) を押し、Color を選ぶ
  2. できたプロパティを選び、Graph Inspectorの Node Settings で Name を分かりやすい名前にする
  3. Show In Inspector がオンになっていることを確かめる
  4. プロパティをBlackboardからウィンドウの作業領域へドラッグする
  5. プロパティのノードを、Colorノードの代わりに Base Color へつなぐ
  6. 保存のボタン(Save)で保存する

Unity 6.6では、Add (+) の一覧に Float・Vector 2〜4・Color・Boolean・Gradient・Texture 2D などが並び、Color を選んだ直後にBlackboardで名前を入力する欄が開きました。

ここで Tint と入力すると、Graph Inspectorの Name は Tint、Reference は _Tint になり、Scope は Per Material、Show In Inspector はオンになっていました。

プロパティのノードを Base Color へつなぐと、それまでのColorノードからの線は外れました。

BlackboardにTintというColorプロパティがあり、Tint(4)のノードがFragmentのBase Colorにつながっている。右のGraph InspectorではNameがTint、Referenceが_Tint、ScopeがPer Material、Show In Inspectorがオン
2026-10-20 撮影。Unity 6.6(6000.6.5f1、Shader Graph 17.6.0)、Windows 11。Blackboardで作ったTintプロパティをBase Colorにつないだ状態。Referenceは自動で _Tint になりました

保存してマテリアルのInspectorに戻ると、作ったプロパティが表示されます。

実機では、マテリアルのInspectorの Surface Inputs に Tint の色の欄が出ました。

プロパティの既定値(Default Value)が黒のままだったので、保存した直後は球が黒くなり、Inspectorの Tint で色を選ぶと、Sceneビューの球がその色に変わりました。

SceneビューにオレンジのSphereがあり、右のInspectorにTintMatマテリアルが表示されている。ShaderはShader Graphs/TintLit、Surface InputsにTintの色の欄がある
2026-10-20 撮影。Unity 6.6(6000.6.5f1、Shader Graph 17.6.0)、Windows 11。グラフから作ったマテリアルのInspector。Shaderの欄にグラフの名前が出て、Tintの色を変えるとSceneの球の色が変わりました

ドキュメントでは、Inspectorで変えた値は、そのマテリアルを使うすべてのオブジェクトに反映されると説明されています。

オブジェクトごとに違う色にしたい場合は、マテリアルを複数作ります。

よく使うプロパティの種類

種類マテリアルのInspectorでの表示
Color色を選ぶ欄
Float数値の欄。Modeを Slider にするとスライダーになる
Texture 2Dテクスチャを選ぶ欄。グラフでは Sample Texture 2D ノードにつないで使う
Booleanオン・オフの欄
Shader Graph 17.3のドキュメント(Property Types・Sample Texture 2D node)をもとに作成

Sample Texture 2D ノードは、Create Nodeのメニューの Input → Texture にあります。

NameとReferenceの違い

項目役割
NameマテリアルのInspectorに表示される名前
Referenceシェーダーの中で使う名前。スクリプトから値を変えるときはこちらを使う
Show In InspectorオンにするとマテリアルのInspectorに表示される
ScopePer Material はマテリアルごとに値を持つ。Global は、同じグローバルプロパティを使うマテリアルで値を共有する
Shader Graph 17.3のドキュメント「Property Types」をもとに作成

ドキュメントでは、Referenceを自分で書き換えたとき、先頭がアンダースコアでなければ自動で付き、HLSLで使えない文字は取り除かれると説明されています。

Referenceを自分で書き換える操作は、この確認では試していません。

スクリプトから値を変える

プロパティの値は、スクリプトから 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 6.6で、このコードを改変せずに ChangeTint.cs として保存し、Component → Scripts → Change Tint でSphereに付けて再生すると、Gameビューの球が赤くなりました。

Consoleにエラーや警告は出ませんでした。

再生中のInspectorでは、マテリアルが TintMat (Instance) という複製に替わっていて、再生を止めた後の TintMat の Tint は元のオレンジのままでした。

再生中のGameビューに赤い球があり、右のInspectorにChange Tint (Script)と、TintMat (Instance)という複製のマテリアルが表示されている
2026-10-20 撮影。Unity 6.6(6000.6.5f1、Shader Graph 17.6.0)、Windows 11。記事のChangeTintスクリプトを付けて再生した結果。球が赤くなり、マテリアルはTintMat (Instance)という複製に替わりました

この例は、同じGameObjectにRendererがあり、最初のマテリアルが_Tintプロパティを持つことを前提にしています。

Renderer.materialは最初のマテリアルを取得し、他のRendererと共有している場合は複製します。

そのため、このコードで変更するのは、このRendererが使う最初のマテリアルです。

同じページでは、こうして作られたマテリアルは、オブジェクトを破棄するときに自分で破棄する必要があるとされています。

上のChangeTintは色変更だけの最小例で、生成したマテリアルを破棄する処理は含んでいません。

ゲーム内で繰り返し生成・破棄する場合は、取得したマテリアルをクラスのフィールドに保持し、OnDestroyでそのインスタンスをDestroyします。

破棄のためにRenderer.materialを取り直さず、自分が生成して保持した参照を使います。

Shader.PropertyToIDは、プロパティの名前を数値のIDに変えるもので、何度もSetColorを呼ぶ場合は文字列で渡すより効率がよいと説明されています。

うまくいかないときの確認

上のコードで取得したmaterialについて、変更対象のマテリアルに_Tintがあるかをmaterial.HasProperty(TintId)で調べられます。

HasPropertyはプロパティの存在を調べるAPIで、色への接続や描画結果までは確認しません。

存在するのに変化しない場合は、TintノードがBase Colorへつながっているか、保存済みか、表示中のRendererのマテリアルを変更しているかを確認します。

判定の範囲は公式のMaterial.HasPropertyリファレンスで確認できます。

症状確かめること
マテリアルがピンク(マゼンタ)になるグラフのターゲットと、プロジェクトのレンダーパイプラインが合っているか
グラフを変えても見た目が変わらない保存のボタン(Save)で保存したか。タブの名前に * が残っていないか
プロパティがInspectorに出ないShow In Inspector がオンか、Scope が Global になっていないか、保存したか
スクリプトから色が変わらないSetColorに渡した名前がNameではなくReferenceか
一部のブロックが灰色になっているGraph Settingsの設定で、そのブロックが使われない状態になっている
Shader Graph 17.3のドキュメントをもとに編集部で整理

Master Stackのドキュメントでは、Graph Settingsを変えると一部のブロックが使われない状態になり、そのブロックと、そこだけにつながったノードは灰色で表示されると説明されています。

Blank Shader Graphで作った場合は、Graph InspectorのGraph Settingsで、Active Targetsにレンダーパイプラインを追加します。

ピンクになる原因の詳しい切り分けは、マテリアルがピンク(マゼンタ)になる原因と直し方で説明しています。

Shader Graphのドキュメントでは、古いチュートリアルはMaster Stackができる前のマスターノードの画面で説明されていることがあると注意書きがあります。

検索で見つけた解説の画面が今と違う場合は、版を確かめてください。

スポンサーリンク

参考にした公式ページ

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

Unityのおすすめ書籍

開発PCの選び方

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

須澤 元貴のアバター 須澤 元貴 代表社員

MOTOKI合同会社 代表社員。
アニメ・映像業界とゲーム業界で、2D・UI・3D・アニメーション制作、映像編集、ツール制作に携わってきました。
現在はWordPressを中心にWebサイトの制作とカスタマイズを手がけています。
著書に『Unity デザイナーズ・バイブル』『Unityゲーム プログラミング・バイブル 2nd Generation』(ボーンデジタル)。
岡山県出身、埼玉県在住。

目次