Unity Shaders之为创建Half Lambert光照模型

2016年10月18日 18:12 0 点赞 0 评论 更新于 2025-11-21 20:39

一、Half Lambert光照模型概述

Half Lambert(半兰伯特)是由Value公司提出的一项技术,主要用于在低光照区域照亮物体。该技术基于提升材质和物体表面周围的漫反射光照效果,能有效改善物体在低光照环境下的视觉表现。

二、操作步骤

我们继续沿用上一节创建自定义漫反射光照模型的代码,按以下步骤实现Half Lambert光照模型的计算:

  1. 将漫反射计算结果乘以0.5,然后把下面的代码添加到光照函数中:
inline float4 LightingBasicDiffuse (SurfaceOutput s, fixed3 lightDir, fixed atten)
{
float difLight = max(0, dot (s.Normal, lightDir));
float hLambert = difLight * 0.5 + 0.5;
float4 col;
col.rgb = s.Albedo * _LightColor0.rgb * (hLambert * atten * 2);
col.a = s.Alpha;
return col;
}

在着色器的光照模型中加入Half Lambert之后,能看到明显的效果变化。在添加之前,物体在低光照区域可能会显得比较暗;添加之后,低光照区域的物体亮度得到提升,整体视觉效果更加均匀。

三、实现原理

Half Lambert技术的实现原理是将漫反射光照值的范围进行重新映射。具体来说,是把漫反射光照值的范围分成两半,然后加上0.5。例如,如果光照值为1,将其除以2得到0.5,再加上0.5,结果仍为1;如果光照值为0,经过同样的操作后会得到0.5。通过这种方式,我们将原本在0 - 1之间的漫反射光照值重新映射到了0.5 - 1的区间。

下图展示了漫反射的值经过Half Lambert计算后的函数曲线图,从图中可以更直观地看到光照值的映射变化。

作者信息

孟子菇凉

孟子菇凉

共发布了 3994 篇文章