No Shadows on Tessellated Terrain

Hi all! Long time reader, first time poster. I’m not overly familiar with Shaderlab and I’m having some trouble with a tessellated object not casting or receiving any shadows. Here’s the shader:

Shader "Terrain"{
    Properties {
   	    _EdgeLength ("Edge length", Range(2,50)) = 15
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _HillAlbedo ("HillAlbedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
        _NormalMap ("Normalmap", 2D) = "bump" {}
        _Height ("Height", 2D) = "black"{}
        _Tess ("Tessellation", Range(1,32)) = 4
        _Displacement ("Displacement", Range(0, 10.0)) = 0.3
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200
       
        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows vertex:disp tessellate:tessEdge
        #pragma target 5.0
        #include "Tessellation.cginc"
 
        struct appdata {
        float4 vertex : POSITION;
        float4 tangent : TANGENT;
        float3 normal : NORMAL;
        float2 texcoord : TEXCOORD0;
        float2 texcoord1 : TEXCOORD1;
        float2 texcoord2 : TEXCOORD2;
        };
        
    	struct v2f {
     	float4 pos : SV_POSITION;
        float3 wNormal : COLOR0;
        };
 
		float _EdgeLength;
        float _Tess;
        
        float4 tessEdge (appdata v0, appdata v1, appdata v2)
        {
            return UnityEdgeLengthBasedTess (v0.vertex, v1.vertex, v2.vertex, _EdgeLength);
        }
        
        sampler2D _Height;
        float _Displacement;

        void disp (inout appdata v)
        {
            float d = tex2Dlod(_Height, float4(v.texcoord.xy,0,0)).r * _Displacement;
            v.vertex.xyz += v.normal * d;
        }
 
        sampler2D _MainTex;
        sampler2D _HillAlbedo;
        sampler2D _NormalMap;
 
        struct Input {
            float2 uv_MainTex;
            float3 worldNormal; INTERNAL_DATA
        };
 
        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
 
        void surf (Input IN, inout SurfaceOutputStandard o) {
            // Albedo comes from a texture tinted by color
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Normal = UnpackNormal(tex2D(_NormalMap, IN.uv_MainTex));
            fixed4 hillC = tex2D (_HillAlbedo, IN.uv_MainTex) * _Color;
            o.Albedo = lerp(c.rgb, hillC.rgb, (1.0 - dot(WorldNormalVector (IN, o.Normal), float3(0.0, 1.0, 0.0))));
            // Metallic and smoothness come from slider variables
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

It’s worth noting that the HillAlbedo is also never being displayed anywhere, which leads me to believe that the worldnormal isn’t getting updated by tesselation. Does this mean I need a second pass for the second texture and shadows, or am I just way off the mark here?

Thanks for your time.

In the #pragma, you need to also have addshadow, worked for me.

Just saw how old this post was, sorry I was not here sooner :confused: