unity-shader-01
2024年1月22日
摘要:Struct、Vector、Dot、Mapping、渲染过程、lambert、Halflambert
结构(Struct) 向量(Vector 点乘(Dot) 屏幕映射(Screen Mapping)lambert Halflambert
了解:结构(Struct)
- Struct:一些相关数据的组织方式
打个比方:
可以把学生证理解为:相关学生信息的组织方式;
很显然,方便之处是: 进校门时不用出示多张姓名卡,学号卡,班号卡...,而只用出示一个信息集中的学生证.
渲染时发生了什么?
模型信息》输入结构
输入结构》顶点shader》输出结构
输出结构》像素shader》渲染结果
了解:向量(Vector)
- 标量(Scalar): 只有大小,没有方向的量,如: 年龄,体重等;
- 向量(Vector): 既有大小,也有方向的量,如: 力,速度等;
- 理论上不存在没有大小,只有方向的量;但存在大小无现实意义的量,我们多把它归一化处理。
了解:点乘(Dot)
- 点乘/点积/Dot: 两向量间的一种运算方式,结果为一标量具有良好的几何含义;
- 结果的几何意义为:一个向量在另一向量上的投影长度;
- 结果的图形学表现为:两向量,方向同时 结果=1(白色),方向反 结果=-1(黑色),垂直 结果=0(黑色);
lambert
半lambert
实战环节
在shaderforge新建无光照shader
运用上述所学,使用点乘实现lambert
我们可以在shaderforge 通过右键菜单-获取自己所需要的数据结构
获取点乘Dot
获取模型的法线方向-以及灯光的方向
然后我们就可以得到一个基础的光照模型,这里使用clamp 控制最大值和最小值在0~1 之间。这样就能把负数给清理掉,以及大于1的值。
lambert
Halflambert
clamp 节点
clamp 节点的解释-我们可以在shaderforge的官网文档中找到
了解:映射 (Mapping)
两个集合,元素间相对应的关系,可以理解为UV与贴图之间的关系。
导致斑点问题的原因是由浮点精度造成的: 《Shader入门精要》158页,
解决方法:贴图的WrapMode从Repeat改成Clamp。
- Repeat模式会保留小数部分,例如:1.0001
- clamp模式会把小数部分给化为整数,例如:1
课后作业
作业:
实现节点:
通过直接绘制贴图和shaderforge内的描边接口实现