shader "Custom/VertexFragment003"{
Properties{
_MainColor("Main Color:",color) = (1,1,1,1)
_MainTexture("Main Texture",2d) = "white" {}
_SpecularColor("Specular Color:",color) = (1,1,1,1)
_SpecularShininess("shininess Range",range(0,100)) = 10
}
SubShader{
pass
{
Tags{ "LightMode" = "ForwardBase" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
float4 _LightColor0;
float4 _MainColor;
float4 _SpecularColor;
sampler2D _MainTexture;
float _SpecularShininess;
//頂點輸入的信息
struct appData{
float4 vertex:POSITION; //頂點的座標
float3 normal:NORMAL; //頂點的法向量
float2 texcoord:TEXCOORD0; //一級紋理UV座標
};
//頂點着色器輸出的結構
struct v2f{
float4 pos:SV_POSITION; //頂點像素的位置
float3 normal:NORMAL; //頂點法線的位置
float2 texure0:TEXCOORD0; //一級紋理的座標
float4 worldPos:TEXCOORD1; //在世界座標中的位置
};
v2f vert(appData IN)
{
v2f OUT;
OUT.pos = mul(UNITY_MATRIX_MVP,IN.vertex); //mvp的座標
OUT.normal = mul(float4(IN.normal,0.0),unity_ObjectToWorld).xyz;
OUT.worldPos = mul(unity_ObjectToWorld,IN.vertex);
OUT.texure0 = IN.texcoord; //輸出的紋理就等於輸入的紋理
return OUT;
}
float4 frag(v2f IN):COLOR
{
float4 textColor = tex2D(_MainTexture,IN.texure0);
//計算diffuse = MainColor * LightColor * max(0,dot(N,L))
float3 normalDirection = normalize(IN.normal);
float3 lightDiretion = normalize(_WorldSpaceLightPos0.xyz);
float3 viewDirection = normalize(_WorldSpaceCameraPos - IN.worldPos.xyz);
float3 diffuseColor; //計算出 diffuse = maincolor * lightColor * max(0,dot(N,L))
float3 specularColor; //specula = mainColor * specularColor * pow( max(0,dot(r,v)),shininess ) R = reflet(-N,L)
if (dot(normalDirection,lightDiretion) < 0.0){
diffuseColor = float3(0,0,0);
}
else{
diffuseColor = _MainColor.rgb * _LightColor0.rgb * max(0,dot(normalDirection,lightDiretion));
}
float3 reflectDirection = reflect(-normalDirection,lightDiretion);
specularColor = _MainColor * _SpecularColor * pow(max(0,dot(reflectDirection,viewDirection)),_SpecularShininess);
float4 finalColor = float4(diffuseColor,1.0) + float4(specularColor,1.0) + UNITY_LIGHTMODEL_AMBIENT;
//將漫反射 鏡面反射 環境光 乘以紋理的顏色值 極爲最終的顏色值。
return finalColor * textColor;
}
ENDCG
}
}
FallBack "Diffuse"
}
透明效果+紋理融合 vertex和fragment
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.