その他のシェーダー同様、サーフェスシェーダーは CGPROGRAM..ENDCG ブロック内に置かれますが、以下のような違いがあります。
#pragma surface ... ディレクティブを使用して、サーフェスシェーダーであることを示しています。以下は #pragma surface ディレクティブの例です。
#pragma surface surfaceFunction lightModel [optionalparams]
Shader "Example/Diffuse Simple" {
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Lambert
struct Input {
float4 color : COLOR;
};
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = 1;
}
ENDCG
}
Fallback "Diffuse"
}
2 つのライトが設定されたモデルでは、以下のようになります。