5.Unity_Shader_Texcoord

1.基本的纹理属性以及注释

 

// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'

Shader "Ycb/Texture/Simple" {
	Properties {
		_Color ("Color", Color) = (1,1,1,1)
		_MainTex ("Albedo (RGB)", 2D) = "white" {}
		_Specular("Specular",Color)=(1,1,1,1)
		_Gloss ("Gloss",Range(8.0,256))=20
 
	}
	SubShader {
	Pass{
		Tags{"LightMode"="ForwardBase"}
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "Lighting.cginc"
		fixed4 _Color;
		sampler2D _MainTex;
		float4 _MainTex_ST; // S缩放T平移。得到材质面板的纹理属性的细节
		float4 _Specular;
		float _Gloss;
		struct a2v{
			float4 vertex:POSITION;
			float3 normal:NORMAL;
			float4 texcoord:TEXCOORD0; //模型的第一组纹理坐标存储到该变量, 而v2f中的用于存储纹理坐标的uv,便于在偏远着色i中使用该坐标进行纹理采样
		};
		struct v2f{
			float4 pos:SV_POSITION;
			float3 worldNormal:TEXCOORD0;
			float3 worldPos :TEXCOORD1;
			float2 uv: TEXCOORD2;
		};
		v2f vert(a2v v){
			v2f o;
			o.pos =mul(UNITY_MATRIX_MVP,v.vertex);
			o.worldNormal=UnityObjectToWorldNormal(v.normal);
			o.worldPos=mul(unity_ObjectToWorld,v.vertex).xyz;
//			o.uv=v.texcoord.xy *_MainTex_ST.xy+_MainTex_ST.zw; //缩放,平移  
			o.uv=TRANSFORM_TEX(v.texcoord,_MainTex);//第一个参数:顶点纹理坐标,第二个参数纹理名,实际用 纹理名_ST

			// 内置如下:
			//#define TRANSFORM_TEX(tex,name) (tex.xy* name##_ST.xy  + name##_ST.zw)
			return o;
		}

		fixed4 frag(v2f i):SV_Target{
			fixed3 worldNormal =normalize(i.worldNormal);
			fixed3 worldLightDir =normalize(UnityWorldSpaceLightDir(i.worldPos));

			fixed3 albedo=tex2D(_MainTex,i.uv).rgb*_Color.rgb; //第一个参数被采样的纹理,第二个参数 float2类型的纹理坐标。返回纹素值
			//采样结果和颜色属性成绩作为材质的反射率 albedo

			//结果与环境光照乘机,得到环境光部分。
			fixed3 ambient =UNITY_LIGHTMODEL_AMBIENT.xyz*albedo;

			//虽有使用albedo来计算漫发射光找结果,个人感觉,只要是混合颜色全是乘法,若是类似于结果的样颜色叠加则是+法
			fixed3 diffuse =_LightColor0.rgb*albedo*max(0,dot(worldNormal,worldLightDir));

			fixed3 viewDir=normalize(UnityWorldSpaceViewDir(i.worldPos));
			fixed3 halfDir=normalize(worldLightDir+viewDir);
			fixed3 specular=_LightColor0.rgb*_Specular.rgb*pow(max(0,dot(worldNormal,halfDir)),_Gloss);
			return fixed4(ambient +diffuse +specular,1.0);				
		}


		ENDCG
	}
	}
	FallBack "Diffuse"
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值