Shader "Custom/FW03exeable" { SubShader { Tags {"Lighting" = "ForwardBase"} //定义LightMode(前项渲染),获取UNITY内部光照变量 Pass { CGPROGRAM // Upgrade NOTE: excluded shader from DX11; has structs without semantics (struct v2f members temp) #pragma exclude_renderers d3d11 #pragma vertex vert//声明顶点着色器 #pragma fragment frag//声明片段着色器
	 //定义结构体-方便传值
     语义中的数据来自Mesh Rander组件,每帧调用Draw Call时此组件将模型数据发给Shader
	 struct a2v {//从应用程序传递到顶点函数的语义POSITION:顶点坐标,NURMAL:法线(模型空间下),TEXCOORD0-n:纹理坐标,COLOR:顶点颜色
			float4 vertex:POSITION;//获取顶点坐标
			float3 nol:NORMAL;//获取法线方向
			//float4 textcoord:TEXTCOORD0;//获取纹理坐标
		};
	struct v2f {//从顶点函数传递到片原函数的语义SV_POSITION:(剪裁空间中的顶点坐标-系统直接使用),COLOR0/COLOR1:可以传递一组值(4个),TEXCOORD0~7:传递纹理坐标
				//f2s片原函数传递给系统:SV_Target:颜色值-输出到屏幕上的颜色(缓存颜色)
			float4 position:SV_POSITION;
			fixed3 temp:COLOR0;	//可用于传递值
		};

	  v2f vert(a2v v)
	  {
		  v2f f;
		  f.position = UnityObjectToClipPos(v.vertex);
		  f.temp = v.nol;
		  return f;
	  }
	 

	fixed4 frag(v2f f) :SV_Target//片原函数,片段在屏幕上像素颜色,返回颜色值存储到渲染目标,帧缓存
	{
	return fixed4(f.temp,1);//返回法线
	}
   ENDCG
		}

}
	FallBack "Diffuse"

}

光照模型公式:计算某个点的光照效果
标准光照模型:
1.自发光
2.高光反射 Specular = 直射光*pow(max(cos夹角,0)*高光参数) ,夹角:反射光与视野方向夹角。(夹角越小高光越强,大于90度时即没有高光);pox(a,b):a的b次方,高光参数取值(1~10)高光参数越大可以看到高光的夹角范围越小
3.漫反射 Diffuse = 直射光颜色 * cos夹角(光与法线)
4.环境光
——————————————————————————————————————
包含文件Unity.cginc、UnityShaderVariables.cginc:自动包含不需引入,包含许多内置全局变量如MVP矩阵、Lighting.cgin:包含各种光照模型,Surface Shader会自动包含。HLSLSupport.cginc:着色器编译时自动包含,声明了许多跨平台编程的宏和定义

一、UnityCG.cginc包含文件中一些常用函数、宏、结构体
结构体:


摄像机方向
float3 WorldSpaceViewDir(Float4 v)//根据模型空间下的顶点坐标 -》世界空间下从这一点到相机的观察方向(返回值需要归一化)
float3 UnityWorldSpaceViewDir(float4 v)//世界空间中的顶点坐标-》世界空间从这一顶点到摄像机的方向
float3 ObjSpaceViewDir(float4 v)//模型空间中的顶点坐标-》模型空间下这个点到摄像机的观察方
光源方向
float3 WorldSpaceLightDir(Float4 v)//根据模型空间下的顶点坐标 -》世界空间下从这一点到光源的方向(返回值需要归一化)
float3 UnityWorldSpaceLightDir(float4 v)//世界空间中的顶点坐标-》世界空间从这一顶点到光源的方向
float3 ObjSpaceLightDir(float4 v)//模型空间中的顶点坐标-》模型空间下这个点到光源的观察方向
方向转换
float3 UnityObjectToWorldNormal(float3 norm)//把法线方向 从模型空间转到世界空间
float3 UnityObjectToWorldDir(float3 dir)//把方向 从模型空间转到世界空间
float3 UnityWorldToObjectDir(float3 dir)//把方向 从世界空间转到模型空间