Unity——Shader学习02——From庄懂

是这样的,想请问下,Unity——Shader学习02——From庄懂
最新回答
长青诗

2024-10-16 12:18:43

第二课上节课作业——做一个简单的卡渲效果思路:答案分析:注意点:补充:作业案例点评:作业1:简单珠宝效果知识点:具体节点过程:1.Half Lambert的应用:

确定固有色

珠宝效果:一般珠宝会将暗面的一部分作为亮部,向两边过渡

2.高光制作:

2.1将光照的方向加上一个三维坐标偏移(偏移量设为变量),然后进行归一化处理,因为只需要它的方向,再进行Half Lambert

2.2给一个一维变量,用if语句将偏移后的HLB(Half Lambert)的值与该变量进行比较,大于变量值,就为1,小于就为0

作用:1.能够随意控制高光的范围大小; 2.得到了一个只有0和1的遮罩

2.3.将2个高光combine合并起来,用max节点,有亮的就取亮的,(虽然用add也可以,但是2个高光重叠区域会输出2,所以需要clamp0~1)

3.添加颜色:

用lerp节点进行2颜色的渐变,使得高光处颜色为HighLightCol,非高光处颜色为RampTexture

Lerp (线性插值)

4.菲涅尔(fresnel):

可以用ShaderForge自带的节点

5混合固有色、高光和菲涅尔:

这里用Blend节点,模式选用Screen(具体模式可以凭自己感觉抉择)

Task1最终效果:作业2:屏幕空间条纹效果知识点:Screen Position (屏幕位置)

它就相当于将整个屏幕作为限制在一个(-1~1)之间,一般模式会将(0,0)放在中心位置,(1,1)在右上角

常用作UV坐标来采样贴图,因为UV坐标是(0,1)第一象限的一个面积为1的方,这个范围内会显示全图,而不在这个范围内的,会被映射到这个位置

所以因为这里范围是 -1~1,因此一个贴图就出现了4份

这里补充一下UV采样贴图的知识:如果贴图不是正方的,如长方的,那么在采样贴图的时候,会将贴图压成正方的(UV坐标正常情况下)

Depth (深度)

摄像头平面到对象每个顶点的距离,对象离摄像头越远,值越大

将Depth和Screen Position相乘,再作为UV坐标采样贴图得到的结果

分析:

平面离相机远的时候,Depth值很大,所以相乘之后得到的值很大,之前屏幕是-1~1,假设现在是-10~10,那么屏幕上就会出现10×10×4张图,

相反,方平面离相机近的时候,Depth值很小,假设现在相乘之后为-0.5~0.5,那么整个屏幕就会显示4张1/4的图片

具体节点过程:1.用Screen作为UV采样贴图

用Depth和Screen Position相乘,作为UV的方式采样贴图

贴图是一张黑白线图,因为右Depth深度相乘,所以黑白线贴图会有所缩放变化

★补充:UV坐标的Triling和Offset

Triling后面的XY分别代表UV坐标值的倍数,如原先是0~2,那么乘15后,这个2就变成了30;原本范围内只采样2×2张图,现在就采样15×15张图,因此每张图就缩小了

简单理解:X增大,在U方向采样的图片越多,越小

Offset后面XY分别代表UV坐标轴的偏移值,如X为0.3,那么原先0的位置变成了0.3;0.8的位置就变成了1.1也就是0.1,可想而知,在X慢慢增大的时候,我们可以看到图片在慢慢往左边移动(可以理解为原先采样0.3的位置,现在被0位置采样了)

简单理解:X增大,图片向左移动

2.放大UV坐标

因为原图的条纹数不够多,因此我们在采样的时候,将U和V的坐标乘上15,来加细,加多条纹

3.得到Lambert与采样的黑白线稿进行Step计算

Step:B>A,出1;B<=A,出0 相当于特定的if语句

采样贴图后可以输出单通道,因为此黑白线稿只有明度信息0和1(RGB为000000,FFFFFF)

分析:因为采样贴图出来的结果肯定在0~1之间,而此Lambert没进行钳制范围,其范围为-1~1,再进行Step就会出现,一些地方完全死黑的情况(因为这些地方B为负数)

4.加颜色,加渐变

加颜色:这里用了Lerp节点,提供了种颜色分别作为亮部和暗部

加渐变:用lambert乘上颜色再add之前的条纹得到

Task2最终效果:作业3:程序化点阵纹理HalfTone知识点:关于HalfTone半色调

利用黑白点的大小和疏密来表达亮暗面

具体节点过程:1.屏幕位置(2维)乘一个值之后Frac取小数

得到的结果就会是屏幕上好多个0~1的小方格

2.进行Remap重映射

将0~1重映射为-0.5~0.5

分析

Remap前:

Remap后:

3.取长度Length,生成黑点程序纹理

Length是取向量的模长,为

根据上面Remap后的图和模长公式不难判断出得到的是一个个黑点

4.制作光照模型

光线衰减Light Attenuation可以产生阴影(自身对自身,其他物体对自身都有效)

Remap(1,0)→(-0.5,2)

结果就是亮暗对调,且范围超出了0~1

5.将程序化点纹理和光照模型进行Power

Power(乘方)

分析:正零点几的数Exp一个负数,变成大于1的数(白);Exp一个大于1的正数,就会减小——(其实这里慢慢数学分析即可)

6.Round四舍五入,非0即1,增加对比

Task3最终效果情报·卡渲

卡渲不只是只有一种风格,风格有很多种:赛璐璐,大色块等等

卡渲的技术也有很多,下图左边是各种用RampTexture做出来的效果;右边是各种效果(HalfTone、手绘线等等)

常用成熟的卡渲技术Cell/ToonShading

GDC Vault - GuiltyGearXrd's Art Style : The X Factor Between 2D and 3D

《火影忍者:究级风暴》渲染技术的究极解析业界资讯电玩巴士psv (tgbus.com)

HatchingShading,用电,线等表达,古朴游戏较多

内容规范

TA需要整理团队项目资源,因此规范自身很重要

一个项目里面可能有好几个小项目,每个小项目要命名规范,内部文件有夹:Shader、Material、Texture、Model

场景文件夹可以建在总项目问价夹下

之后打包的时候右键点击Export Package,打包完后就可以发给其他人了

第二课总结

这一节课我们主要了解了卡渲效果,巩固和拓展了Lambert光照模型,知道了描边效果,学习了三个案例

案例一——简单珠宝效果

案例二——屏幕空间条纹效果

案例三——程序化点阵纹理HalfTone

知道了一些有关卡渲的情报,和TA如何对项目内容进行规范整理

感想:

其实在写Shader的时候我发现,只要你能够理解数学内容,通过数学分析出缘由,结果,你就会发现其实这些都不算太难,要时刻学会Debug,一步步推敲,你也可以向我一样拿一些模型、贴图等进行测试,这样有助于自己理解。