- 一.Lambert
在SubShader中的CG片段里,需要指定光照函数,一般为Lambert,即默认的拉姆伯特
#pragma surface surf Lambert
Lambert的函数是默认的,代码同下:
inline float4 LightingBaseDiffuse(SurfaceOutput s,fixed3 LightDir,fixed atten){ float lightDif=max(0,dot(s.Normal,LightDir)); float4 col; col.rgb=s.Albedo*_LightColor0.rgb*(lightDif*atten*2); col.a=s.Alpha; return col; }
其中BaseDiffuse是可以改的,如果我们将第一句的声明改为别的,那么与其对应的LightingXXX就是光照函数.
- 二.HalfLambert
半拉姆伯特是经典的一种光反射算法,用来防止图像过暗,代码如下
Shader "Custom/11.26.1" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf HalfLamBert sampler2D _MainTex; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = c.a; } inline float4 LightingHalfLamBert(SurfaceOutput s,fixed3 lightDir,fixed atten){ float difLight=max(0,dot(s.Normal,lightDir)); difLight=0.5*difLight+0.5; float4 col; col.rgb=s.Albedo*_LightColor0.rgb*(difLight*atten*2); col.a=s.Alpha; return col; } ENDCG } FallBack "Diffuse" }
效果如图:
偏亮的那个就是进行了增亮处理.