Shader "Tutorial/Outline" { Properties { _Texture ("Texture", 2D) = "White" {} _OutlineColor ("Outline Color", Color) = (0, 0, 0, 1) _OutlineWidth ("Outline Width", Range(0, 0.1)) = 0.03 } Subshader { Tags { "RenderType" = "Opaque" } CGPROGRAM #pragma surface surf NoLighting noambient sampler2D _Texture; fixed4 LightingNoLighting(SurfaceOutput s, fixed3 lightDir, fixed atten) { return fixed4(s.Albedo, s.Alpha); } struct Input { float2 uv_MainTex; }; half4 _Color; half _Glossiness; half _Metallic; void surf(Input IN, inout SurfaceOutput o) { fixed4 c = tex2D (_Texture, IN.uv_MainTex); o.Albedo = c.rgb; } ENDCG Pass { Cull Front CGPROGRAM #pragma vertex VertexProgram #pragma fragment FragmentProgram half _OutlineWidth; float4 VertexProgram( float4 position : POSITION, float3 normal : NORMAL) : SV_POSITION { position.xyz += normal * _OutlineWidth; return UnityObjectToClipPos(position); } half4 _OutlineColor; half4 FragmentProgram() : SV_TARGET { return _OutlineColor; } ENDCG } } }