Shader-映射纹理

// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "LXC/11 Single Texture"{
	Properties{
		_Color("Color",Color)=(1,1,1,1)					//纹理颜色
		_MainTex("Main Tex",2D)="white"{}				//纹理,默认白色图片
		_Specular("Specular Color",Color) = (1,1,1,1)	
		_Gloss("Gloss",Range(10,200)) = 20				
	}
		SubShader{
			Pass{
				Tags{"LightMode" = "ForwardBase"}		
				CGPROGRAM
#include "Lighting.cginc"								
#pragma vertex vert										
#pragma fragment frag
				fixed4 _Color;				//纹理颜色
				sampler2D _MainTex;			//定义图片
				fixed4 _Specular;
				half _Gloss;


				struct a2v {
					float4 vertex:POSITION;
					float3 normal:NORMAL;
					float4 textcoord:TEXCOORD0;	//取得纹理坐标
				};

				struct v2f {
					float4 svPos:SV_POSITION;
					float3 worldNormal:TEXCOORD0;
					float4 worldVertex:TEXCOORD1;
					float4 uv:TEXCOORD2;		//取得纹理坐标
				};





				v2f vert(a2v v) {						
					v2f f;		
					f.svPos = UnityObjectToClipPos(v.vertex);
					f.worldNormal = UnityObjectToWorldNormal(v.normal);
					f.worldVertex = mul(v.vertex, unity_WorldToObject);
					f.uv=v.textcoord;
					return f;
				}





				fixed4 frag(v2f f):SV_Target {			
					fixed3 normalDir = normalize(f.worldNormal);
					fixed3 lightDir = normalize(WorldSpaceLightDir(f.worldVertex));
//纹理坐标取对应图片颜色 代替漫反射的颜色
					fixed3 texColor = tex2D(_MainTex,f.uv.xy)*_Color.rgb;		//取得像素点,与颜色融合

					fixed3 diffuse = _LightColor0.rgb * texColor * max(dot(normalDir, lightDir), 0);




					fixed3 viewDir = normalize(UnityWorldSpaceViewDir(f.worldVertex));
					fixed3 halfDir = normalize(lightDir + viewDir);
					fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(dot(normalDir, halfDir), 0), _Gloss);
					fixed3 tempColor = diffuse + specular + UNITY_LIGHTMODEL_AMBIENT.rgb*texColor;	//环境光与纹理融合
					return fixed4(tempColor, 1);
				}
				ENDCG
		}
	}
	Fallback "Specular"
}

猜你喜欢

转载自blog.csdn.net/qq_42459006/article/details/84189200