工程搭建
使用Unity2019,连连看用的ShaderForge,比较基础,这里就不多做说明了
基础知识 Part1
结构(Struct)
一些相关数据的组织方式(结构体)

渲染的过程
一般简单的渲染过程:

模型其实就是点、线、面这些信息的数据集合,可能还包含其他信息(UV、法线、顶点色)。
在渲染管线中,先读取模型的数据,输入到shader中;
在shader中,我们需要定义好输入结构体,来接收我们需要的模型数据。

输入结构接收到模型数据后,会传入顶点Shader中进行计算,主要进行空间转换的计算,可能会有顶点数据的计算(顶点动画),随后传入输出结构中。

随后传入到片元Shader中,进行颜色计算(光照等)

向量
很简单的数学知识,直接放图了。

点乘
也是数学知识

光照与明暗
图形学中,通过模型表面 法线方向 与 光照方向 点乘操作,可以得到-1到1的值;
注意:这里的光照方向,其实是模型表面点指向光源的方向
再将这个值钳制到0到1范围内,我们就可以得到光照的明暗变化
为什么要钳制到0-1:负值在颜色中同样是黑色,在计算中负值有可能会带来一些问题,所以钳制到01范围内更好

透气
在原来点乘得到值的基础上,使用另一种方式将值的范围变为01,也就是x0.5+0.5;
这样的做法会让明暗变化更加均匀,在美术上更透气(?),暗部不会特别黑。

基础知识 Part2
映射
同样是数学上的知识

调子映射
这里的意思就是给上述明暗部分上颜色,使用一张RampTexture渐变贴图,NdotL点乘结果作为u坐标,v坐标随意,Append合成一个新的向量,去采样Ramp贴图。

作业
做一个简单的卡渲效果

交一下作业:左边是自己魔改的,右边是正常做的
感觉做的非常的丑陋,主要是两个问题:
- 模型面数太少了
- ramp贴图效果并不好

方法一

这里用到的是一个叫BandedLight的魔改的光照模型,主要作用就是给颜色增加了一个floor,像分层一样的效果。
具体连连看:
先连个HalfLambert,然后乘上Step,floor一下,然后再除以Step

接下来用四种颜色分别Lerp


即可达成以上效果。
可以看到效果其实还是有的
这样做的好处在于可以不用采样贴图,直接选择颜色就可以实现这样的一个渐变效果。
缺点在于,在step参数比较低的时候,由于是lerp来的,整体效果有,但是细节部分的效果就差一点了,比如亮部不够亮,暗部不够暗,这样做更偏风格化一点,颜色与颜色之间有硬边。

如果把参数拉的很高效果也比较贴近Ramp图。

方法二
这个方法就是HalfLambert采样Ramp贴图来实现的

简单易懂,模型和贴图的质量决定了效果,这里模型面数就比较低,看起来一块一块的。
不同贴图下的效果:




总结
之前一直没有看这个入门课程,虽然课程里面的工具确实比较老了,但是还是让我收获很多。
不仅仅是一些基础的知识的补充,更是认识到了TA学习方法与思维方式。
