Godot Shader特效:SpatialShader(即3D)溶解效果

之前写过canvas_item类型即2d Shader的溶解效果,原文请见Godot Shader特效:溶解效果(改进版)

今天来实现一个spatial即3D版的溶解效果,效果图如下:

3D溶解

原理分析:

原理上和2D是一样的,都需要一张噪声贴图来引导溶解走向。区别在于Godot的spatial着色器和canvas_item着色器一些内置参数有所不同。
canvas_item着色器中,图像的透明度由vec4类型的COLORa来控制,而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;效果会变成如下的样子,即球的背面也被显示出来了,两种效果可以根据实际应用选择

没有剔除背面的效果

你可能感兴趣的:(Godot Shader特效:SpatialShader(即3D)溶解效果)