- Home /
Basic gradient vert shader weirdness with 2+ objects
Ok so I cobbled together a basic vertical gradient surface shader, all seems to work fine until you use the same material on two objects and then once only one is visible on the screen (presumably the other object is culled) then the measurements change which screws up the gradient position.
I presumed shaders were calculated on an object by object basis so not sure why the others verts would influence each other. Also if anyone could give me some pointers on how to normalise the verts to make the gradient automatically spread from the top to the bottom of the model without manually adjusting it that would be amazing.
Shader "Gradient/Local" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_Color1 ("Bottom Color", Color) = (0,0,1,1)
_Color2 ("Top Color", Color) = (1,0,0,1)
_Scale ("Scale", Float) = 1
_Offset ("Offset", Float) = 0
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Standard fullforwardshadows vertex:vert
#pragma target 3.0
sampler2D _MainTex;
half _Glossiness;
half _Metallic;
fixed4 _Color1;
fixed4 _Color2;
fixed _Scale;
fixed _Offset;
struct Input {
float2 uv_MainTex;
float3 localPos;
};
void vert (inout appdata_full v, out Input o){
UNITY_INITIALIZE_OUTPUT(Input,o);
o.localPos = v.vertex.xyz;
}
void surf (Input IN, inout SurfaceOutputStandard o) {
half4 c = tex2D(_MainTex, IN.uv_MainTex);
c.rgb *= lerp(_Color1,_Color2, (IN.localPos.y * _Scale)+_Offset);
o.Albedo = c.rgb;
o.Alpha = c.a;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
}
ENDCG
}
Fallback "Diffuse"
}
Answer by neue · Apr 30, 2015 at 07:54 AM
Adding
"DisableBatching"="True"
To the tags fixed it, not sure if that's a good idea or not but at least it works as intended now.
Your answer
Follow this Question
Related Questions
What are the difference between between Unlit/color and Sprite/default material shader? 0 Answers
Why do materials created at runtime show up incorrectly in the inspector? 1 Answer
Dynamically assigning a material doesn't work on mobile? 1 Answer
Laying a texture over an entire terrain 1 Answer
How can I edit Material Textures without creating a new Shader?,How to edit Material Texture 1 Answer