title: Send vertice shader changes to surface shader
body: <p>I'm trying to do a shader to curve the world like <a href="https://www.youtube.com/watch?v=Muh7QFisCfE&amp;ab_channel=Throneful" rel="nofollow noreferrer">Subway Surfer</a> does.</p>
  
  <p>I have found a <a href="https://gist.github.com/grimmdev/9e63af5ab00c91d7ad09" rel="nofollow noreferrer">GitHub repo</a> where someone pushes an approximation for it that works cool.</p>
  
  <p>This is the code:</p>
  
  <pre><code> Shader "Custom/Curved" {
   Properties {
       _MainTex ("Base (RGB)", 2D) = "white" {}
       _QOffset ("Offset", Vector) = (0,0,0,0)
       _Dist ("Distance", Float) = 100.0
   }
   SubShader {
       Tags { "RenderType"="Opaque" }
       Pass
       {
           CGPROGRAM
           #pragma vertex vert
           #pragma fragment frag
           #include "UnityCG.cginc"
  
                       sampler2D _MainTex;
           float4 _QOffset;
           float _Dist;
  
           struct v2f {
               float4 pos : SV_POSITION;
               float4 uv : TEXCOORD0;
           };
  
           v2f vert (appdata_base v)
           {
               v2f o;
               float4 vPos = mul (UNITY_MATRIX_MV, v.vertex);
               float zOff = vPos.z/_Dist;
               vPos += _QOffset*zOff*zOff;
               o.pos = mul (UNITY_MATRIX_P, vPos);
               o.uv = v.texcoord;
               return o;
           }
  
           half4 frag (v2f i) : COLOR
           {
               half4 col = tex2D(_MainTex, i.uv.xy);
               return col;
           }
           ENDCG
       }
   }
   FallBack "Diffuse"
  }
  </code></pre>
  
  <p>The point is that now I want to send that new vertex positions to the surface shader to be able to have illumination an others.</p>
  
  <p>I have read that I have to delete the fragment shader but I still having the problem that I can not send the new information to the surface shader. </p>
  
  <p>This is my code:</p>
  
  <pre><code>Shader "Custom/Curve" {
   Properties{
       _Color("Color", Color) = (1,1,1,1)
       _MainTex("Albedo (RGB)", 2D) = "white" {}
       _Glossiness("Smoothness", Range(0,1)) = 0.5
       _Metallic("Metallic", Range(0,1)) = 0.0
  
  
       _QOffset("Offset", Vector) = (0,0,0,0)
       _Dist("Distance", Float) = 100.0
   }
       SubShader{
       Tags{ "RenderType" = "Opaque" }
       LOD 200
  
       CGPROGRAM
  
   #pragma surface surf Standard fullforwardshadows vertex:vert addshadow
  
   #pragma target 3.0
  
   sampler2D _MainTex;
  
   struct Input {
       float2 uv_MainTex;
   };
  
   half _Glossiness;
   half _Metallic;
   fixed4 _Color;
  
   float4 _QOffset;
   float _Dist;
  
   void vert(inout appdata_full v)
   {
       v.position.x += 10;
   }
  
   void surf(Input IN, inout SurfaceOutputStandard o) {
       // Albedo comes from a texture tinted by color
       fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
       o.Albedo = c.rgb;
       // Metallic and smoothness come from slider variables
       o.Metallic = _Metallic;
       o.Smoothness = _Glossiness;
       o.Alpha = c.a;
   }
   ENDCG
   }
       FallBack "Diffuse"
   }
  </code></pre>
  
  <p>As you can see now in the vertex shader I'm just trying to add some units to the X position of the vertex because I think that if I achieve that apply the "curved change" would be trivial but If you think It is not going to be that easy I would appreciate if you warn me.</p>