美文网首页
Godot Shader特效:海面效果

Godot Shader特效:海面效果

作者: 吃烧烤的老王 | 来源:发表于2019-07-21 13:10 被阅读0次

    本文参照了Godot官方文档Shader部分的海洋案例,官方文档大家可以参看我的译文,官方文档的代码有一些BUG,导致无法编译运行,我按照自己的理解修改了一下。

    效果图

    海面效果

    先附上代码

    shader_type spatial;
    render_mode diffuse_toon, specular_toon;
    
    uniform sampler2D noise;
    
    float wave(vec2 position){
        position += texture(noise, position / 10.0).x * 2.0 - 1.0;
        vec2 wv = 1.0 - abs(sin(position));
        return pow(1.0 - pow(wv.x * wv.y, 0.65), 4.0);
    }
    
    float height(vec2 position, float time) {
        float d = wave((position + time) * 0.4) * 0.3;
        d += wave((position - time) * 0.3) * 0.3;
        d += wave((position + time) * 0.5) * 0.2;
        d += wave((position - time) * 0.6) * 0.2;
        return d;
    }
    
    void vertex(){
        vec2 pos= VERTEX.xz;
        float k = height(pos, TIME);
        VERTEX.y = k;
        NORMAL = normalize(vec3(k - height(pos + vec2(0.1, 0.0), TIME), 0.1, k - height(pos + vec2(0.0, 0.1), TIME)));
    }
    
    void fragment(){
        float fresnel = sqrt(1.0 - dot(NORMAL, VIEW));
        RIM = 0.2;
        METALLIC = 0.0;
        ROUGHNESS = 0.01;
        ALBEDO = vec3(0.01, 0.03, 0.05);
    }
    
    

    其中 噪声纹理我并没有用Godot自带的OpenSimplexNoise,而是使用了一个在线纹理生成工具生成的,该网站也顺便推荐给各位Perlin Noise Maker

    Perlin Noise Maker

    未完待续

    相关文章

      网友评论

          本文标题:Godot Shader特效:海面效果

          本文链接:https://www.haomeiwen.com/subject/vvpmlctx.html