- Home /
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?
Answer by Sparrowfc · Nov 20, 2013 at 08:38 AM
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"
}
I don't know if I'd call it fog. It's just right now my terrain is made up of solid colors and has no differentiation between what's close to the player and what's far away so it doesn't look very appealing. I'll look at your shader. Thanks.
in that case you can try linear fog. just set it in render settings.