欢迎光临散文网 会员登陆 & 注册

Unity 学习第五篇:Lambert (兰伯特)光照模型

2023-03-10 22:49 作者:依稀爱恋  | 我要投稿

漫反射的定义

漫反射是投射在粗糙表面上的光向各个方向反射的现象。当一束平行的入射光线射到粗糙的表面时,表面会把光线向着四面八方反射,所以入射线虽然互相平行,由于各点的法线方向不一致,造成反射光线向不同的方向无规则地反射,这种反射称之为“漫反射”或“漫射”。这种反射的光称为漫射光。

Lambert定律

漫反射光的强度近似地服从于Lambert定律,即漫反射光的光强与表面法线和光源方向之间的夹角的余弦成正比。


原理公式:diffuse = I*cosθ;

diffuse:反射光线的的光强;

I:入射光线的光强,方向如上图所示;

cosθ:光源方向和该顶点法线的余弦,光源方向 · 法线方向,cosθ = dot(L,N);

在Unity中当颜色值小0时会按0处理,所以我们最后的数学表达式为:diffuse = I*max(0,dot(L,N));

在Unity Shader

半兰伯特光照模型

把上面的效果应用到Unity中,可以看出不被光照射的背面是比较暗的,此时我们可以优化兰伯特光照模型,有人提出了半兰伯特光照模型。
由上面的公式diffuse = I*max(0,dot(N,L)),可知dot(N,L)的范围为-1~1,如果我们可以把范围调整为0 ~1,那么模型看起来会更亮些,我们优化下让 dot(L,N)*0.5+0.5,这样范围就改为了0 ~1。
最后的公式为:
diffuse = I*max(0,dot(N,L)*0.5+0.5)

半兰伯特Shader程序

从相同的视角来观察两个模型,效果对比如下:


Unity 学习第五篇:Lambert (兰伯特)光照模型的评论 (共 条)

分享到微博请遵守国家法律