默认shader的光照过渡太明显,不够柔和,使用伪兰伯特光照模型进行处理
伪兰伯特
默认材质
Shader "Custom/SimulateLambert"
{
Properties
{
_Diffuse("漫反射颜色",COLOR) = (1,1,1,1)
_Shadow("阴影过渡",float) = 0.3
_White("反光值",float) = 0.3
_MainTex("MainTex",2D) = "white"{
}
}
SubShader
{
Pass
{
Tags {
"LightMode" = "ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include"Lighting.cginc"
fixed4 _Diffuse;
float _Shadow;
float _White;
sampler2D _MainTex;
float4 _MainTex_ST;
struct v2f
{
float4 pos:POSITION;
float4 color:COLOR;
float4 uv:TEXCOORD3;
};
v2f vert(appdata_base v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);//将顶点转换到裁剪空间
o.color = UNITY_LIGHTMODEL_AMBIENT;//环境光
o.uv.xy = v.texcoord * _MainTex_ST.xy + _MainTex_ST.zw;
float3 L = normalize(WorldSpaceLightDir(v.vertex)).xyz;
float3 normal = UnityObjectToWorldNormal(v.normal);
//float ndotl = saturate(dot(normal,L));//兰伯特模型
float ndotl= _Shadow *(dot(normal,L))+ _White;//伪兰伯特模型
o.color += ndotl * _LightColor0 * _Diffuse;
return o;
}
fixed4 frag(v2f i) : COLOR
{
fixed4 texcolor = tex2D(_MainTex,i.uv.xy);
return i.color * texcolor;
}
ENDCG
}
}
Fallback"Specular"
}