【无标题】

文章介绍了兰伯特光照模型和半兰伯特光照模型的计算原理,以及如何通过UV映射实现渐变效果。在处理中,将点乘结果限制在0到1之间以避免奇怪的视觉效果,并通过乘以0.5和加0.5转换为半兰伯特模型。同时,文章提到了UV映射时可能出现的斑点问题,解决方案是将纹理的WrapMode设置为Clamp,以防止像素溢出导致的异常。
摘要由CSDN通过智能技术生成

兰伯特光照模型

通过计算光照方向的反方向向量与模型表面法向量的点乘结果,我们可以得到光线照射在模型上的效果,简单的计算方式如下图所示。需要注意的是因为负数表示亮度没有意义,我们会将小于零的点乘结果统一按照零计算,这样可以避免带来一些奇怪的效果,这一处理被称为兰伯特光照模型
在这里插入图片描述
但是我们发现上面的状态并不是很合适,于是我们对它的明度乘上1/2,再加上1/2,这被称为半兰伯特光照模型,它所产生的效果会比兰伯特模型更透气(视觉上疏密得当,层次分明一目了然)
在这里插入图片描述
分别实现兰伯特光照模型(将点乘结果限制到0和1之间)在这里插入图片描述
解释:本来是-1到1,clamp0-1后变成0到1

半兰伯特光照模型

在这里插入图片描述
解释:本来是-1到1,乘以0.5,-0.5到0.5;加0.5就变成了0到1

我们可以在半兰伯特状态下进行一个映射,将明度在0到1之间的取值作为u坐标,然后取一个渐变色的调子作为v坐标,通过uv坐标之间的映射实现一个渐变的效果

UV映射

在这里插入图片描述
我们调用Append节点将上面得到的明度值和一常量(一般渐变是横向渐变的,这时v坐标我们只需要随意取一常量值即可)组合为一个向量作为我们的uv坐标
![在这里插入图片描述](https://img-blog.csdnimg.cn/443d2c3a2e03472a9cc80d8689d911d4.png在这里插入图片描述

这里的u坐标就是横坐标,需要直接拿点乘结果,v坐标即纵坐标随便取一个值即可
经过append合成一个向量来用,赋值给一个渐变色的2D材质来用
在这里插入图片描述

tips

导致斑点问题的原因:《Shader入门精要》158页,解决:贴图的WrapMode从Repeat改成Clamp
将纹理的环绕方式改为Clamp,以防止使用UV坐标采样像素点时,出现因有像素溢出而导致的最亮处有暗点的情况

拆解

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值