微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GLSL/Shadertoy 生长六边形网格

如何解决GLSL/Shadertoy 生长六边形网格

我是 Shadertoy 和着色器的新手,想为我的 UE4 项目制作一个很酷的效果。我来自 Blender 和材料背景,所以对如何做各种事情有一个很好的总体了解,但这让我很难过。您可以查看我的 shadertoy 页面 here

我有一个六边形网格和一个圆形蒙版,我想将它们组合起来,以便随着圆形的扩展,当它通过六边形中心点时,它会从每个单元格的中心开始扩展。这就是我所坚持的,因为我没有找到很多用于这种效果的资源。我在其中的大部分内容中也遵循了代码艺术,并认为我可以自己将它们结合起来。

    float Hexdist(vec2 p){
    p = abs(p);
    
    
    float c = dot(p,normalize(vec2(1,1.73)));
    c = max(c,p.x);
    return c;
    }

float Circledist(vec2 uv,float radius){
    float d = length(uv);
    // Generates a smooth falloff for the circle mask
    float c = smoothstep(radius,radius-2.,d);
    
    return c;
}

vec4 HexCoord(vec2 uv){
    // Generates a grid of Hexagons
    vec2 r = vec2(1.,1.73);
    vec2 h = r*0.5;
    vec2 a = mod(uv,r) -h;
    vec2 b = mod(uv-h,r)-h;
    
    vec2 gv;
    if(length(a) < length(b))
        gv  = a;
    else
        gv = b;
        
    float x = atan(gv.x,gv.y);
    float y = 0.5-Hexdist(gv);
    // Makes an ID for each grid cell
    vec2 id = uv - gv;
    return vec4(x,y,id.x,id.y);
}


void mainImage( out vec4 fragColor,in vec2 fragCoord )
{


    float radius = iTime;

    // normalized pixel coordinates (from 0 to 1)
    vec2 uv = (fragCoord-0.5*iResolution.xy)/iResolution.y;    
    // Controls size of grid cells
    uv *= 2.;

// Time varying pixel color
    vec3 col = vec3(0);
    
    
       
    vec4 hc = HexCoord(uv);
    float mask = (Circledist(uv,radius));


    float c = smoothstep(0.05,0.2,hc.y* mask);
    
    col += c;

    // Output to screen
    fragColor = vec4(col,1.0);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。