之前写过
canvas_item
类型即2d Shader的溶解效果,原文请见Godot Shader特效:溶解效果(改进版)
今天来实现一个spatial
即3D版的溶解效果,效果图如下:
原理分析:
原理上和2D是一样的,都需要一张噪声贴图来引导溶解走向。区别在于Godot的spatial
着色器和canvas_item
着色器一些内置参数有所不同。
在canvas_item
着色器中,图像的透明度由vec4
类型的COLOR
的a
来控制,而spatial
着色器有一个专门的内置属性ALPHA
,控制贴图透明通道。
代码如下:
shader_type spatial;
uniform sampler2D noise;
uniform sampler2D tex;
uniform float dissolve : hint_range(0.0,1.0);
void fragment(){
float diff = texture(noise,UV).r - dissolve;
if(diff > 0.1){
ALPHA = 0f;
}
METALLIC = 0.0;
ROUGHNESS = 1.0;
ALBEDO = texture(tex,UV).rgb;
}
没有剔除背面的效果注意:如果在代码中声明了
render_mode cull_disabled;
效果会变成如下的样子,即球的背面也被显示出来了,两种效果可以根据实际应用选择
网友评论