<Shader>透明效果+纹理融合 vertex和fragment

来源:互联网 发布:java程序员太多了知乎 编辑:程序博客网 时间:2024/06/08 09:05
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 fragfloat4 _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"}

阅读全文
0 0
原创粉丝点击