1、diffuse漫反射包含两个部分:一部分是环境光照,一部分是漫反射
2、
3、将小球着为蓝色
Shader "Custom/s_diffuse" { SubShader{ pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "unitycg.cginc" struct v2f { float4 pos:POSITION; fixed4 color : COLOR; }; v2f vert(appdata_base v) { v2f o; o.pos = mul(UNITY_MATRIX_MVP,v.vertex); o.color = fixed4(0,0,1,1); return o; } fixed4 frag(v2f IN) :COLOR{ return IN.color; } ENDCG } } }
4、两个向量的点积的结果决定光的强度,这两个向量都必须是规范化的,光向量必须是从顶点指向光源的方向
Shader "Custom/s_diffuse" {
SubShader{
pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
#include "lighting.cginc"
struct v2f {
float4 pos:POSITION;
fixed4 color : COLOR;
};
v2f vert(appdata_base v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
//o.color = fixed4(0,0,1,1);
float3 N = normalize(v.normal);
//世界空间中光源的位置
float3 L = normalize(_WorldSpaceLightPos0);
//saturate将点积的值限定在0到1之间
float ndotl = saturate(dot(L,N));
//_LightCColor0:光源颜色
o.color = _LightColor0*ndotl;
return o;
}
fixed4 frag(v2f IN) :COLOR{
return IN.color;
}
ENDCG
}
}
}
5、添加上环境光照
6、window-->lighting-->Source:Color-->Ambient Color:设置环境光的颜色,可以看到环境光对颜色的影响
7、支持顶点光照
Shader "Custom/s_diffuse" { SubShader{ pass { //支持顶点光照 tags{"LightMode" = "ForwardBase"} CGPROGRAM #pragma vertex vert #pragma fragment frag #include "unitycg.cginc" #include "lighting.cginc" struct v2f { float4 pos:POSITION; fixed4 color : COLOR; }; v2f vert(appdata_base v) { v2f o; o.pos = mul(UNITY_MATRIX_MVP,v.vertex); //o.color = fixed4(0,0,1,1); float3 N = normalize(v.normal); //世界空间中光源的位置 float3 L = normalize(_WorldSpaceLightPos0); //saturate将点积的值限定在0到1之间 float ndotl = saturate(dot(N, L)); //_LightCColor0:光源颜色 o.color = _LightColor0*ndotl; return o; } fixed4 frag(v2f IN) :COLOR{ //环境光照 return IN.color+UNITY_LIGHTMODEL_AMBIENT; } ENDCG } } }