【Unity】【シェーダ】UsePassで他のシェーダのパスを使う

UnityのシェーダでUsePassにより他のシェーダのパスを使う方法です。

Unity2018.2

UsePass?

他のシェーダのパスを使用する機能です。
UnityのShaderLabの機能として提供されています。

docs.unity3d.com

使用例

まず適当なシェーダを作り、パスの名前を定義しておきます。

Shader "Example"
{
    SubShader
    {
        Pass
        {
            // パスの名前を定義
            Name "Base"

            CGPROGRAM
            
           #pragma vertex vert
           #pragma fragment frag
           #include "UnityCG.cginc"
            
            float4 vert (float4 vertex : POSITION) : SV_POSITION
            {
                return UnityObjectToClipPos(vertex);
            }
            
            fixed4 frag () : SV_Target
            {
                return fixed4(1, 0, 0, 1);
            }

            ENDCG
        }
    }
}

このパスを別のシェーダから使用してみます。
UsePass "[シェーダ名]/[パス名]"で他のシェーダのパスが使えます。

Shader "Example2"
{
    SubShader
    {
        UsePass "Example/BASE"
    }
}

結果

レンダリング結果から、この二つのシェーダは全く同じように機能していることが確認できました。

f:id:halya_11:20181106205835p:plain