1.使用 SmoothStep 代替 GradientTexture
之前做的面片刀光的渐隐是使用了一个从黑到白的 Mask,这就使得刀光的尽头瞬间出现,没有那种流动的感觉
我尝试在原来的基础上组合一个从白到黑的渐变,但是始终效果不太好,越搞越乱
[Godot] CPU Particles 3D 制作面片刀光特效
1.1 Shader
因此我放弃了原来的 shader 思路,使用一个更加直观的思路
只需要使用两个 smoothstep 相减就可以得到中间白两边黑,将其作为 Mask,就可以达成只显示一部分面片的效果
在时间轴中调整四个参数,就可以达到流动的效果
参数 | 初值 | 终值 | Easing |
---|---|---|---|
.:material_override:TailEdge0 | 0.0 | 0.5 | 1.0 |
.:material_override:TailEdge1 | 0.2 | 0.7 | 1.0 |
.:material_override:HeadEdge0 | 0.3 | 0.8 | 1.0 |
.:material_override:HeadEdge1 | 0.5 | 1.0 | 1.0 |
效果
1.2 Easing
显然,匀速运动看上去很不好看。可以通过调整各个关键帧的 Easing 以及关键帧之间的插值模式来修改动画缓动效果。这种动画效果的高度自定义也是相较于单纯的 GradientTexture 的优势
参数较多的时候,可能不太好直观地看到某些参数的某些属性调整之后的变化。可以在调整某轨道的时候禁用其他不必要的轨道,这时起作用的就只有少数轨道了,更方便看到变化
调整之后的参数
参数 | 初值 | 终值 | Easing |
---|---|---|---|
.:material_override:TailEdge0 | 0.0 | 0.8 | 0.3 |
.:material_override:TailEdge1 | 0.2 | 1.0 | 0.3 |
.:material_override:HeadEdge0 | 0.3 | 0.8 | 0.1 |
.:material_override:HeadEdge1 | 0.5 | 1.0 | 0.1 |
效果
1.3 边缘羽化
锐利或者羽化边缘都有独特的风格
只需要把 smoothstep 在 y 方向上再运用一次就得到羽化边缘
1.4 柱面 uv
不过当我对柱面做这个 shader 的时候出现了一些难看的锯齿,不管 UV 是怎么分的
测试 shader
不同 UV 分法
锯齿
感觉这应该是同一个 uv 值在上下面是相同的,所以产生了透明度的重叠导致的,我不知道怎么解决……
看来我这个方法还是不太行