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
CGPROGRAM
#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;
}
ENDCG
}
FallBack "Diffuse"
}