- Home /
Question by
kaiyum · Jan 05, 2014 at 10:14 AM ·
shadercgproperties
Material doesn't have a color property '_Color'
Shader "kaiyum/cg basic shader"
{
Properties
{
_Color ("Color", Color) = (1, 1, 1, 0.5)
}
SubShader
{
Tags { "Queue" = "Transparent" }
Pass
{
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
uniform float4 _Color;
struct vin
{
float4 vertexpos : POSITION;
float3 normal : NORMAL;
};
struct vout
{
float4 vertexpos : SV_POSITION;
float3 normal : TEXCOORD0;
float3 viewdir : TEXCOORD1;
};
vout vert(vin i)
{
vout o;
o.vertexpos=mul(UNITY_MATRIX_MVP,i.vertexpos);
o.normal=normalize(mul(float4(i.normal,0.0),_World2Object));
o.viewdir=normalize(_WorldSpaceCameraPos-float3(mul(_Object2World,i.vertexpos)));
return o;
}
float4 frag(vout o):color
{
float3 nd=normalize(o.normal);
float3 vd=normalize(o.viewdir);
float curThres=abs(dot(nd,vd));
if(curThres > 0.2){discard;}
else
{
float newOpacity = min(1.0,_Color.a/abs(dot(vd,nd)));
return float4(float3(_Color),newOpacity);
}
}
ENDCG
}
}
}
I have examined it several times. I do not know why unity does not compile my shader!! Can anybody point me here?
Comment
The odd fact is: I removed if-else block. the new code structure is like:
float curThres=abs(dot(nd,vd));
float newOpacity = $$anonymous$$(1.0,_Color.a/abs(dot(vd,nd)));
if(curThres > 0.2){discard;}
return float4(float3(_Color),newOpacity);
Then it works! Why does it happen?
Your answer
