ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Unity - Shader Graph 入門

初めに

 Shader Graph を使うことで、Shader の書き方が分からなくても Shader を作ることができます。本記事では、Shader Graph でできることや使い方についてまとめます。

Shader Graph とは

Shader とは

 Shader(シェーダー)は描画方法を記述したプログラムであり、1つの Material に1つのシェーダーを設定します。

(例:デフォルトの CustomRenderTexture)

Shader "CustomRenderTexture/MyShader"
{
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex("InputTex", 2D) = "white" {}
     }

     SubShader
     {
        Blend One Zero

        Pass
        {
            Name "MyShader"

            CGPROGRAM
            #include "UnityCustomRenderTexture.cginc"
            #pragma vertex CustomRenderTextureVertexShader
            #pragma fragment frag
            #pragma target 3.0

            float4      _Color;
            sampler2D   _MainTex;

            float4 frag(v2f_customrendertexture IN) : COLOR
            {
                float2 uv = IN.localTexcoord.xy;
                float4 color = tex2D(_MainTex, uv) * _Color;

                // TODO: Replace this by actual code!
                uint2 p = uv.xy * 256;
                return countbits(~(p.x & p.y) + 1) % 2 * float4(uv, 1, 1) * color;
            }
            ENDCG
        }
    }
}

 Shader の書き方については、別の記事にまとめておりますので、そちらをご覧ください。

fineworks-fine.hatenablog.com

Shader Graph とは

 Shader を作るには上で紹介したようなコードを書く必要がありました。

 バージョン2018.1 以降の Unity では Shader Graph という Shader の書き方が分からなくても Shader を作ることができる機能が追加されました。

Shader Graph アセットの作り方

準備

 Shader Graph は HD レンダーパイプライン (HDRP) とユニバーサルレンダーパイプライン (URP) にのみ対応しています。現在、Shader Graph は HDRP および URP パッケージに含まれています。

 HDRP や URP をプロジェクトに追加するには、次の方法があります。

  • プロジェクト作成の際に、はじめからこれらが含まれているテンプレートを選ぶ

  • Package Manager から追加する


 HDRP または URP パッケージをインストールすると、自動的に Shader Graph を読み込みます。

 Create > Rendering から URP Assets を作成し、Edit > Project Settings の Graphics にある Scriptable Render Pipeline Settings に設定します。

Shader Graph アセットの作成

 Assets で右クリック > Create > Shader Graph から作成したい Shader Graph を選択します。

 Lit は光の影響をうける、Unlit は光の影響をうけないシェーダーになります。

 Lit Shader Graph を作ってみます。


Shader Graph ウィンドウ

 Shader Graph ウィンドウで Shader を作成していきます。

Shader Graph ウィンドウの開き方

  • 作成した Shader Graph アセットをダブルクリック
  • Inspector の Open Shader Editor をクリックする


Shader Graph ウィンドウの構成

要素 説明
Blackboard シェーダーのプロパティやキーワードを設定する
Graph Inspector 要素を選択したときに、要素の設定が表示される
Main Preview アクティブな レンダリングパイプライン上のシェーダーを表示
タイトルバー Save 等 Graph 上で実行できるアクションが含まれている
ワークスペース ノードのネットワークを作成する場所

Shader Graph を使ってみる

 Shader Graph の基本操作を実際に Shader を作りながら確認します。

今回作る Shader Graph

 最も簡単だと思われる色だけ変更できる Shader を作成します。



基本的な流れ

  1. 新しいシェーダーグラフを作る
  2. Blackboardに必要な変数を用意する
  3. ノードをつないでシェーダーを作る
  4. 新しいマテリアルを作って設定を行う

新しいシェーダーグラフを作る

 Lit Shader Graph または Unlit Shader Graph を作成します。

※本記事では、Lit Shader Graph で作っていますが、色を変えるだけで光の影響を考える必要がないので、Unlit で良いです。

Blackboardに必要な変数を用意する

 Blackboard で用意するプロパティは Material から設定を変更できるものになります。今回は Material 毎に色が設定できるようにしたいので、Blackboard に Color プロパティを追加します。

 余談ですが、各要素を選択すると Graph Inspector にその要素の設定が表示されることが確認できます。


ノードをつないでシェーダーを作る

 プロパティをワークスペースにドラッグ&ドロップすることで、プロパティをノード化することができます。

 ワークスペースでノードを繋ぎ、Shader の設定を構築していきます。

 今回は、色を変えたいので、Base Color と先ほどノード化した Color を繋ぎます。

 ワークスペースの操作方法は Scene ビューと同じでマウスのホイールやドラッグなどで行います。

新しいマテリアルを作って設定を行う

 Assets で右クリック > Create > Material で Material を作成します。

 Material の Shader を Inspector から変更します。先ほど作成した Shader に変更します。

 オブジェクトにこの Material をつけて、確認しましょう。


今後の展望

 本記事は入門として、書いたためこれで終了にしようと思います。

 ワークスペースで右クリックすると、Create Node ができることが確認できます。本記事では、プロパティをノード化したものしか出てきませんでしたが、他のノードがあることが確認できます。

 これらのノードを使いこなすことが、Shader Graph を使う上で必須になります。