Question by
Biggzlar · Sep 22, 2018 at 03:30 PM ·
shader programmingcgglsl
Shaders are horrible. Why does the shader of one object affect the shader of the other object???
Basically this. I was trying to build an interactive plant shader. Nothing works because the documentation is a joke and I don't know anything about shaders.
Nevertheless, at one point I found out that changing the shader of the floor (a cube object) to something other than the default material, the plants (with the supposedly interactive shader applied) would move to a different position. WHAT?!
Interactive plant shader:
Shader "Custom/plant_shader" {
Properties {
}
SubShader {
Tags { "RenderType"="Grass" }
LOD 200
CGPROGRAM
#pragma surface surf Standard fullforwardshadows vertex:vert
#pragma target 3.0
sampler2D _HistoryTex;
float4 _HistoryWorldPos;
float4 _MainColor;
half _HistoryScale;
float4 tex;
struct Input {
float2 uv_HistoryTex;
};
float getHistoryWorldPos(appdata_full v, float4 vertex_position){
float2 historyOffset = vertex_position.xz - _HistoryWorldPos.xz;
float2 historyUV = historyOffset / _HistoryScale * 0.5f + 0.5f;
tex = tex2Dlod(_HistoryTex, float4(historyUV, 0, 0));
vertex_position.y -= tex.r * 2.4f * v.color.r;
return vertex_position.y;
}
void vert(inout appdata_full v){
float4 world_pos = mul(unity_ObjectToWorld, v.vertex);
v.vertex.y = getHistoryWorldPos(v, world_pos);
}
void surf (Input IN, inout SurfaceOutputStandard o) {
fixed4 c = tex2D (_HistoryTex, IN.uv_HistoryTex);
o.Albedo = tex.rgb;
}
ENDCG
}
FallBack "Diffuse"
}
Comment