Surface shaderA program that runs on the GPU. More info
See in Glossary is placed inside CGPROGRAM..ENDCG block, just like any other shader. The differences are:
#pragma surface ... directive to indicate it’s a surface shader.The #pragma surface directive is:
#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"
  }
Here’s how it looks like on a model with two Lights set up:
