不是完全还原,不过大体是那个意思了,并且为了看效果把扫光的频率速度调快了;
美术资源截帧获取的,纹理通道可以合并的处理了一下;
基本上都是是特效shader常规做法,涉及uv变换,颜色调整等,下面详细介绍一下。
面闪
各个区域Mask贴图
第一个Mask图R通道是边框遮罩,G通道是卡图遮罩,A通道是半透
第二张图是属性字遮罩图集;第三张图是卡名和星级遮罩,该卡是魔法卡,无星级。另外字体的RGB是法线,用于碎闪金字的效果。
CombineMask除了uv.y需要上下颠倒一下,直接采样
1 | |
NameStarMask需要调整一下uv,并且纹理需要设置成Clamp
1 | |
AttributeMask的uv需要先转化到对应位置,用此uv得到属性图标位置[0,1]的mask,再计算应用图集后的uv
1 | |
最后准备好的各区域遮罩如下
1 | |
扫光
观察可知扫光的区域是卡框、卡名(星级)和属性,所以:
1 | |
旋转uv,并且随时间游动采样渐变Mask
1 | |
卡面闪烁
观察md的面闪,卡图实际上就是部分区域亮度的变化,没有虹彩的效果(碎闪有),所以使用3个通道的noise贴图,用不同方向随时间流动采样,结果相乘,可以让噪声更随机一些,得到的值经过数值调整,在略小于1和大于1之间变化,最终乘到卡图上,让卡面有一些明暗(更亮一些)变化
1 | |
整合
1 | |
前面补上切圆角的clip
1 | |
碎闪
开始前先定义一下Keywords,碎闪和面闪有些变量纹理是相同的,部分计算也可以共用,可以使用一个shader实现
1 | |
边框碎闪
只有edgeMask上有旋转的粉蓝白三色碎闪,形状有上面的三角形“法线”贴图提供;
通过旋转uv采样第一张“方向”贴图,和第二张法线贴图做类似漫反射计算的点乘,获取0-1的渐变值
1 | |
再用这个值去插值3个颜色,使用normal来处理一下明暗变化,然后应用到边框上;
1 | |
卡名金字
卡名颇有一些金属质感,这里用简单的光照模型,并且使用上一部的碎闪模拟全局反射,来体现金字质感
1 | |
卡面虹彩
复用面闪卡面计算noise的部分,叠乘FlickerDirMap.rgb作为虹彩颜色
1 | |
旋转光
作用于整个卡的旋转的光效,并且把前面的效果整合
1 | |
流动碎闪
最后是流动的碎闪膜,会用到之前的FlickerNormal和一个随时间变化的随机方向做点乘,再用这个点乘结果作为uv采样上面的贴图,模拟虹彩颜色
1 | |