个人学习笔记——庄懂的技术美术入门课(美术向)12
该课是在13课之后上的,所以可以先去回顾第13课
1 作业示范
没有标准答案,按照过程做完shader就过关了
- 第一个,环境光影响比较充裕,直接光比较弱,整体通透一些
第二个,体积效果扎实一些,直接光比较强,环境光比较弱
第三个,轮廓光比较强,可能轮廓光没有乘以法线的绿通道
- 右下角菲涅尔过强,没有做法线绿通道顶底关系的相乘
- 金属感欠佳
2 答疑
- 第一条补充:带透贴的物体要计算投影,需要ShadowCastPass
3 作业示范思路
首先进入作业网站,从大纲入手,告诉我们有哪些贴图,mask,遮罩
- cubemap,wrap(ramptex)这些是可以共用的
右边从依次介绍
color是基础颜色;
MetalnessMask是金属度遮罩,哪里是金属,哪里不是金属;
Normal是法线
看起来像AO又和AO不太一样的RimMask;
自发光贴图纯黑,不发光;
高光次幂;
高光mask,理解为高光强度;
TintByBaseMask,高光颜色混合basecolor的强度遮罩,越偏白越不混合,越偏黑越混合;
最后一张透贴,黑透白不透;
- 资源优化
4 作业实现·准备
5 作业实现·光照模型
以上完成了
面板上贴图的槽,输入参数
输入输出结构,顶点shader,该要拿的信息都拿到了
像素shader里向量准备好了,三个中间量拿到,纹理都进行了采样和提取
接下来就是光照模型,这个是带点物理又不是纯物理
- 这一步把漫反射和镜面反射颜色拿到
同学可能会考虑,BaseColor不就是漫反射颜色吗?不就是diffuse吗?
BaseColor ≠ diffuse
两者在非金属的部分没有区别
但是金属的部分,diffuse的金属部分是很黑的,BaseColor金属部分还是亮的
所以我们要做的,就是把BaseColor通过金属度压暗,得到diffuse - 镜面反射的部分也是换算出来,不过没有这么彻底的物理
材料里是用高光染色的遮罩去插值,更加人为控制,金属去染色,非金属不去染色
可以看到,装备上虽然是黑白灰,但是皮肤给了个蓝色
如果是较真的PBR,对于白光来说,非金属的反光肯定是黑白灰,金属是有颜色
- 菲涅尔信息的提取
我们一开始做资源优化的时候,把这三张ramptex合成一张,分别存到RGB通道里了,现在一次采出来 - 回顾一下菲涅尔,非金属有菲涅尔,金属度越高越没有菲涅尔的现象
所以拿到菲涅尔,第一件事是用金属度去插值,金属度越高越0(虽然还是很不理论,经验性的物理) - 看到图里武器的菲涅尔效果就比身上弱
- 食人魔身上的diffuseRampTex不是必须的,这里只有身上的肉有
实际做项目的话,会做一个开关,但是这里还没学怎么写,就先过
- specPow是美术画的那个高光图,黑白图不足以来控制高光,所以又乘以_SpecPow
- 直接用单色漫反射了
- 结合菲涅尔和金属度两者做镜面
- 轮廓光颜色 × 菲涅尔轮廓光部分 × 轮廓光强度的mask × 法线绿通道部分 × 面板定义的强度
6 作业实现·细节
- 这个fallback,需要_Color参数,一定要声明,不声明不起作用
参数如果是给另外的pass用的话,就不需要和输入一一对应
- 因为只有披风暂时会被看出来背面剔除,所以按道理这个参数要放到面板上,手动指定要不要剔除背面
7 开源Shader
(由衷感谢庄懂老师,对一个角色的示范讲的好详细Orz)