漫反射
光强和 物体表面法线与光的方向的夹角的余弦值有关
我们需要知道 入射光线的颜色 物体表面的法线和光源的方向
计算公式为:光的反射系数 * 光的颜色 * (法线和光线方向的夹角余弦)
逐顶点漫反射
计算都写在了顶点着色器之中
Shader "Custom/DiffuseVertex"
{
SubShader
{
// 逐顶点的漫反射
pass{
Tags{
"LightMode"="ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//内置头文件
#include "Lighting.cginc"
struct a2v{
float4 vertex : POSITION; //模型空间里的坐标
float3 normal : NORMAL;
};
struct v2f{
float4 pos : SV_POSITION;//裁剪空间里的坐标
fixed3 color : COLOR;
};
v2f vert(a2v i){
v2f o;
//环境光照
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
//将模型空间里的坐标转换为世界坐标,或得顶点的标准法线
o.pos = UnityObjectToClipPos(i.vertex);
fixed3 worldNormalStd=normalize(UnityObjectToWorldNormal(i.normal));
//获得光线的方向
fixed3 worldLightDirStd=normalize(_WorldSpaceLightPos0.xyz);
//光照的颜色
fixed3 diffuse = _LightColor0.xyz * max(0,dot(worldNormalStd,worldLightDirStd))+ ambient;
o.color = diffuse;
return o;
}
fixed4 frag(v2f i) : SV_TARGET{
return fixed4(i.color,