Shader "Unlit/chapter6"
{
Properties
{
_Diffuse("Diffuse",Color) = (1,1,1,1) //材质漫反射颜色
}
SubShader{
Pass{
Tags{"LightMode" = "ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
fixed4 _Diffuse;
struct a2v{
float4 vertex : POSITION;
float3 normal : NORMAL; //顶点法线normal
};
struct v2f{
float4 pos : SV_POSITION;
fixed3 color : COLOR;
};
//漫反射光照模型需要四个参数:漫反射 = (入射光颜色和强度 * 材质漫反射系数)max(0, 法线 · 光源方向)
v2f vert(a2v v){
v2f o;
//UNITY_MATRIX_MVP是Unity内置的模型*世界*投影矩阵
o.pos = UnityObjectToClipPos(v.vertex); //世界坐标系转换成裁剪坐标系
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; //由内置变量UNITY_LIGHTMODEL_AMBIENT得到环境光
fixed3 worldNormal = normalize(mul(v.normal,(float3x3)unity_WorldToObject)); //由模型空间法线到世界空间中
fixed3 worldLight = normalize(_WorldSpaceLightPos0.xyz); //主方向光源,由于假设场景只有一个光源且是平行光
//Unity内置变量LightColor0来访问该Pass处理的光源颜色和强度信息
fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal,worldLight));
o.color = ambient + diffuse;
return o;
}
fixed4 frag(v2f i) : SV_Target {
return fixed4(i.color,1.0);
}
ENDCG
}
}
Fallback "Diffuse"
}
07-05
1006
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-23
09-12