Unity Shader学习(二) ShaderForge① - 兰伯特光照模型

        接下来一段时间的TA学习会专注在庄懂老师的课程上,一节课整合为一篇文章,主要为课程理论笔记Unity实操作业完成 三个部分。
        本次为第一节课程的记录,讲解了兰伯特光照模型的数学原理,以及初步使用ShaderForge来实现该模型。作业为一个二分效果的实现。

参考:
(1)庄懂的技术美术入门课-01
(2)ShaderForge官方文档


一、课程理论笔记

1. 兰伯特

        众所周知,点积能求出向量间的投影
                如果两个向量同向,点积结果>0 ,
                俩向量垂直,没有投影 点积=0 ,
                俩向量方向相反,点击结果<0。

        所以我们可以想象一下,现在有一个物体和一个光源,该物体上的每个法向量(nDir),与光线向量相反的向量(lDir)进行点积,(看图),将结果进行归一化 该模型上的每个点就都能得到一个数值,并且都在范围[ -1 , 1 ] 之间。[ 0 , 1]对应明度关系中的黑到白,对于<0的值,毕竟也没有比黑色更黑的颜色了,所以索性就将负数全部也改为0,而这个步骤用表达式即为 Max(0,nDir · lDir) ,这就是兰伯特光照模型。

当时我有一个小疑问,难道不是明暗交界线才是最黑的吗?其实这是因为暗面有反光的关系才使得明暗交界线是最黑的,所以如果想要渲染出这种效果,就需要添加一个“反光”的光线(再加个物体上去提供一个有反光的条件即可)。

2. 半兰伯特

        兰伯特的结果对于美术来说暗部会太闷,所以为了能够使画面更加通透,就有了半兰伯特模型,而半兰伯特其实就是将一开始得到的[ -1 , 1 ]范围映射到[ 0 , 1 ]中,这样从亮到暗变化的节奏就会变缓一倍,这就是半兰伯特。而做这一步,只需要将[ -1 , 1 ]中的每个值,*0.5,再+0.5

3. 渐变纹理

       为了能够给模型贴上渐变纹理,我们需要把这个黑白关系映射为有色彩倾向的,这个只要我们自己备一个喜欢的渐变色图片即可。之后,我们就需要利用 uv坐标(一个以u为横坐标,v为纵坐标的坐标系),这个坐标的作用就是用来给我们的贴图定位的,告诉我们材质上的每个像素应该定位于模型的哪个点上。此时用前面计算的黑白关系作为该材质的u轴,然后任意取一个常量a作为v轴,之后模型上任意明暗的像素颜色就会在a上找到。

        注意这个图片渐变的方向!!!!!可以看到,这个选的渐变色本身的黑白关系是与调子方向是对应的,这样去渲染,最后物体该暗的地方颜色也就是暗的;但是如果我们把这个材质图进行翻转,最后的呈现效果也会完全相反,本该被照得最亮的地方映射的反而是暗色,而暗部是亮色。

        那么如果是旋转90°呢?大家有想过吗~

二、课程实践操作

        最重要的就是知道想要完成的操作如何用对应的数学公式实现即可,也就是弄懂ShaderForge中右键后这些菜单栏对应的操作:

1. 兰伯特

模型表面法向量:Geometry Data - Normal Dir
光照的反向量:Lighting - Light Direction
点乘:Vector Operations - Dot Product

(可以再添加一个将数据钳制在0-1区间的操作:Arithmetic - Clamp 0-1 )

2. 半兰伯特

乘:Arithmetic - Multiply  ,加:Arithmetic - Add
常数:Constant Vector - Value

3. 渐变纹理

将调子和一个常量合并为一个二维向量(形成uv坐标):Vector Operations - Append
材质图:直接拖入

三、作业布置与讲评

1. 作业布置

2. 我的作业

        ① 二分:

        ② 再添加描边后就是很卡通的形象啦:

3. 老师讲评

① 可以学一下老师的布局,有模块又节省空间
② 纹理图的过度卡得太死,可以稍微软一点,卡硬即可,别卡死
③ 可以在同一阶中添加一点变化玩出花样
解答了我的疑惑:为什么我做的草莓模型叶子上那块被果肉挡住的那个位置是亮的!因为这个模型是没有考虑投影
⑤ 描边暂时不是很顺滑,是需要后处理抗锯齿的,暂不处理
⑥ 大家都太卷了啊啊啊太超纲了吧!!!有些是选择用简单模型做复杂效果,有些是课程内容做复杂模型。另外只是通过修改材质图的画法,也能玩出很多很特别的效果!
       
⑦ 金属材质不适合用兰伯特模型,因为金属材质镜面反射比较严重,高光是会随着视角变的

下一篇再讲同学作业的具体实现~

  • 27
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值