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"
}
<Shader>透明效果+纹理融合 vertex和fragment
最新推荐文章于 2022-08-11 09:32:36 发布