漫反射
法向量和顶点指向光源的向量的点积(dot)== cos角度
代码注意地方:
- 点乘的向量必须为单位向量
- 两条向量必须起点一致才能求夹角
注意的函数:
_WorldSpaceLightPos0
求顶点到光源的方向
saturate
将数字0~1
_LightColor0
光的颜色
tag
Unity工程默认是ForwardBase光照模式!
手册
Shader "Custom/light"
{
Properties
{
_Color("Color", Color) = (1,1,0,1)
}
SubShader
{
pass{
Tags { "RenderType" = "Opaque" }
LOD 200
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
#include "lighting.cginc"
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
struct v2f
{
float4 pos:POSITION;
fixed4 color:COLOR;
};
v2f vert(appdata_base v)
{
v2f o;
o.pos=UnityObjectToClipPos(v.vertex);
float3 N=normalize(v.normal);
float3 L=normalize(_WorldSpaceLightPos0);
float ndotl=saturate(dot(N,L));
o.color=_LightColor0*ndotl;
//o.pos=UnityObjectToClipPos(v.vertex);
return o;
}
fixed4 frag(v2f o) :COLOR
{
//本身材质
//return _Color;
//光照
//return o.color;
//环境光
//return UNITY_LIGHTMODEL_AMBIENT;
//加漫反射,加本身颜色,不加环境光
//return o.color*_Color;
return o.color*UNITY_LIGHTMODEL_AMBIENT;
}
ENDCG
}
}
FallBack "Diffuse"
}
案例
不加漫反射,不加环境光,只显示材质本身的颜色
_Color("Color", Color) = (1,1,0,1)
return _Color;
![\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8qLvpDyr-1681800439383)(image-20230320232205104.png)\]](https://img-blog.csdnimg.cn/e2291e4d2c23419ca4a360cd4ffbd9a4.png)
漫反射
加漫反射,加本身颜色,不加环境光
return o.color*_Color;
加漫反射,不加本身颜色,不加环境光
return o.color;
环境光
加环境光,不加漫反射
return _Color*UNITY_LIGHTMODEL_AMBIENT
加环境光,加漫反射
return o.color*UNITY_LIGHTMODEL_AMBIENT*_Color;