[Godot] CPU Particles 3D 制作面片刀光特效 2

552 阅读2分钟

1.使用 SmoothStep 代替 GradientTexture

之前做的面片刀光的渐隐是使用了一个从黑到白的 Mask,这就使得刀光的尽头瞬间出现,没有那种流动的感觉

我尝试在原来的基础上组合一个从白到黑的渐变,但是始终效果不太好,越搞越乱

[Godot] CPU Particles 3D 制作面片刀光特效

1.1 Shader

因此我放弃了原来的 shader 思路,使用一个更加直观的思路

只需要使用两个 smoothstep 相减就可以得到中间白两边黑,将其作为 Mask,就可以达成只显示一部分面片的效果

shader.png

在时间轴中调整四个参数,就可以达到流动的效果

图片.png

参数初值终值Easing
.:material_override:TailEdge00.00.51.0
.:material_override:TailEdge10.20.71.0
.:material_override:HeadEdge00.30.81.0
.:material_override:HeadEdge10.51.01.0

效果

output.gif

1.2 Easing

显然,匀速运动看上去很不好看。可以通过调整各个关键帧的 Easing 以及关键帧之间的插值模式来修改动画缓动效果。这种动画效果的高度自定义也是相较于单纯的 GradientTexture 的优势

参数较多的时候,可能不太好直观地看到某些参数的某些属性调整之后的变化。可以在调整某轨道的时候禁用其他不必要的轨道,这时起作用的就只有少数轨道了,更方便看到变化

调整之后的参数

截图 2022-09-17 23-46-16.png

参数初值终值Easing
.:material_override:TailEdge00.00.80.3
.:material_override:TailEdge10.21.00.3
.:material_override:HeadEdge00.30.80.1
.:material_override:HeadEdge10.51.00.1

效果

output.gif

1.3 边缘羽化

锐利或者羽化边缘都有独特的风格

只需要把 smoothstep 在 y 方向上再运用一次就得到羽化边缘

shader.png

1.4 柱面 uv

不过当我对柱面做这个 shader 的时候出现了一些难看的锯齿,不管 UV 是怎么分的

测试 shader

图片.png

不同 UV 分法

图片.png

图片.png

锯齿

图片.png

感觉这应该是同一个 uv 值在上下面是相同的,所以产生了透明度的重叠导致的,我不知道怎么解决……

看来我这个方法还是不太行