DirectX 11 tessellation not working

Hi all,
I am trying to have the most basic DirectX tessellation shader to work.

  • My graphics card (nvidia geforce GTX
    560 ti) supports DirectX 11
  • I verified with dxdiag.exe that I
    have DirectX 11 installed
  • I use Windows 7 and Unity 4.0.0b7
    with DirectX 11 definitely activated
    both in Player Settings and in Preferences > General.
  • I gave all the required textures correctly (diffuse, heightmap and normal map).

The following shader is an EXAMPLE coming from THIS LINK and it just doesn’t work. I don’t see any tessellation happening.

Shader "Tessellation Sample" {
        Properties {
            _EdgeLength ("Edge length", Range(2,50)) = 15
            _MainTex ("Base (RGB)", 2D) = "white" {}
            _DispTex ("Disp Texture", 2D) = "gray" {}
            _NormalMap ("Normalmap", 2D) = "bump" {}
            _Displacement ("Displacement", Range(0, 1.0)) = 0.3
            _Color ("Color", color) = (1,1,1,0)
            _SpecColor ("Spec color", color) = (0.5,0.5,0.5,0.5)
        SubShader {
            Tags { "RenderType"="Opaque" }
            LOD 300

            #pragma surface surf BlinnPhong addshadow fullforwardshadows vertex:disp tessellate:tessEdge nolightmap
            #pragma target 5.0
            #include "Tessellation.cginc"

            struct appdata {
                float4 vertex : POSITION;
                float4 tangent : TANGENT;
                float3 normal : NORMAL;
                float2 texcoord : TEXCOORD0;

            float _EdgeLength;

            float4 tessEdge (appdata v0, appdata v1, appdata v2)
                return UnityEdgeLengthBasedTess (v0.vertex, v1.vertex, v2.vertex, _EdgeLength);

            sampler2D _DispTex;
            float _Displacement;

            void disp (inout appdata v)
                float d = tex2Dlod(_DispTex, float4(v.texcoord.xy,0,0)).r * _Displacement;
       += v.normal * d;

            struct Input {
                float2 uv_MainTex;

            sampler2D _MainTex;
            sampler2D _NormalMap;
            fixed4 _Color;

            void surf (Input IN, inout SurfaceOutput o) {
                half4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
                o.Albedo = c.rgb;
                o.Specular = 0.2;
                o.Gloss = 1.0;
                o.Normal = UnpackNormal(tex2D(_NormalMap, IN.uv_MainTex));
        FallBack "Diffuse"

Console shows this warning:

Shader warning in 'Custom/TessallationBasic': Program 'tessvert_surf', undeclared identifier 'UnityEdgeLengthBasedTess' (compiling for d3d11) at line 93

Thanks in advance for your attention.


Temporary post scriptum: At the moment the search server is totally down so I couldn’t crawl around very much looking for a solution before asking. I don’t see lot of information out there anyway on these topics. I might delete this post if I see it’s a duplicate soon. (I like to be tidy)

Hello Riccardo!

Seems to work fine for me. It’s because you aren’t running the latest version of Unity, these functions didn’t exist when the beta version was around.