Adjust mesh vertex colors based on distance

I’d like to adjust the vertex colors of my terrain mesh based on distance from the player. I’m thinking doing this through code is not the best way to go about it and doing it in the shader is. I have no idea how to go about doing this though. The shader I’m using is the VertixLit.shader that comes with Unity. Can someone point me in the right direction?

It sounds like fog, anyway I write a simple shader based on the default shader. Hope it can shed some light.

Shader "Custom/Distance" {
	Properties {
		_MainTex ("Base (RGB)", 2D) = "white" {}
		_MinColor ("Color in Minimal", Color) = (1, 1, 1, 1)
		_MaxColor ("Color in Maxmal", Color) = (0, 0, 0, 0)
		_MinDistance ("Min Distance", Float) = 100
		_MaxDistance ("Max Distance", Float) = 1000
	SubShader {
		Tags { "RenderType"="Opaque" }
		LOD 200
		#pragma surface surf Lambert

		sampler2D _MainTex;

		struct Input {
			float2 uv_MainTex;
			float3 worldPos;

		float _MaxDistance;
		float _MinDistance;
		half4 _MinColor;
		half4 _MaxColor;

		void surf (Input IN, inout SurfaceOutput o) {
			half4 c = tex2D (_MainTex, IN.uv_MainTex);
			float dist = distance(_WorldSpaceCameraPos, IN.worldPos);
			half weight = saturate( (dist - _MinDistance) / (_MaxDistance - _MinDistance) );
			half4 distanceColor = lerp(_MinColor, _MaxColor, weight);

			o.Albedo = c.rgb * distanceColor.rgb;
			o.Alpha = c.a;
	FallBack "Diffuse"