Shader problem: length() en distance()

I’m writing a shader but it doesn’t work correctly,
I’ve found that problem lies in this line (which is in the vertex shader):

float S = length(;

for some reason it has the same value for every vertex, and this appears to be the maximum value (the highest distance between any of the vertices and the sun).

I’ve tried distance() as well but I get the same result.

Here’s the entire shader:

Shader "Custom/PlanetFog"
        _DayColor ("Day Color (RGBA)", Color) = (1,1,1,1)
        _NightColor ("Night Color (RGBA)", Color) = (1,1,1,1)
        _Dist ("FadeOut Distance", float) = 5
        h ("Atmosphere Radius", float) = 1
	    SunPos ("Sun projected on atmosphere", Vector) = (0,0,0,0)  //projectie van zon op atmosfeer

        ZWrite Off
        Fog { Mode off }
        Tags { "Queue" = "Transparent" }
        Blend SrcAlpha OneMinusSrcAlpha 

            #pragma vertex vert     
            #pragma fragment frag
            #include "UnityCG.cginc"

            half4 _DayColor;
            half4 _NightColor;
            float _Dist;
            float h;  //straal atmosfeer
            float3 SunPos;  //projectie van zon op atmosfeer

            struct v2f
                float4 pos : SV_POSITION;
                float4 color0 : COLOR;
                float4 wpos : TEXCOORD0;
                float4 spos : TEXCOORD1;
                float3 norm : TEXCOORD2;

            v2f vert(appdata_base v)
               v2f output;
               output.pos = mul(UNITY_MATRIX_MVP, v.vertex);
               float S = length(; //afstand v elke vertex tot de zon(projectie op atmosfeer)
	           S /= 2.0*h;
               output.color0 = S*_NightColor + (1-S)*_DayColor;
                output.wpos = v.vertex;
                output.spos = output.pos;
                output.norm = v.normal;
                return output;

            half4 frag (v2f i) : COLOR
                float4 color1 = i.color0;

                if (i.spos.z<_Dist)
                	color1.w *= 2*(i.spos.z/_Dist)-1; 
                if (color1.w<0)   
	                float3 viewDir = normalize(ObjSpaceViewDir(i.wpos));
	            	float alpha = dot(viewDir,i.norm)*3-0.1;
	            	if (alpha>1) alpha=1;

                return color1;


    Fallback Off

Found the problem,
length() en distance() do return the correct value,
but what I didn’t know was that the vertex position is in local space and not in global space.