效果图如下
准备工作
-
一张png的角色图片
一张噪声图片,这次使用的是Godot自动生成噪声图片,当然你也可以使用Gimp等第三方工具制作的噪声图片
步骤
添加一个
Sprite
命名为mario
并且给mario
指定图片为
mario
新建ShaderMaterial
,再为这个ShaderMaterial
新建Shader-
在资源视图中新建一个
NoiseTexture
类型的资源,命名为dissolve_noise.tres
编辑
dissolve_noise.tres
,将其大小设置为和角色图片相同大小(128×128),然后在Noise
属性那里新建一个OpenSimplexNoise
- 将这个
dissolve_noise.tres
资源在编辑器中指定给下面代码中的noise
就可以了
提示
为uniform
指派值的位置在下图所示Shader Param
中
代码如下
shader_type canvas_item;
uniform sampler2D noise;
void fragment(){
vec4 color = texture(TEXTURE,UV);
float n = texture(noise,UV).x;
color.a = n > cos(TIME) ? .0 : color.a;
COLOR = color;
}
小结
- 只有变色没有形变所以只用到了
fragment
函数。 - 噪声的作用是取对应点的一个分量作为阈值,不同的噪声纹理可以得到不同的溶解走向。
- 加上
TIME
就可以实现动画效果了,并且不同的时间曲线也可以获得不同的溶解效果。 - 实际上3D溶解的原理也是类似的。