WALLPAPER GROUPS → *632 (p6m)

vec2 mirror(vec2 uv, vec2 n, float d){
  float s = dot(n, uv) + d;
  return uv + n * (abs(s) - s);
}

vec2 p6m(vec2 uv){
    float cos6 = 0.866033; // cos(3.1415/6.)
    
    vec2 stp = vec2(1.5/cos6, 1.);
    uv = abs(fract(uv / stp * .5) * 2. - 1.) * stp;
  
    vec2 n3 = vec2(-cos6, -.5);
    vec2 n2 = -vec2(.5, -cos6);
    vec2 n1 = -vec2(cos6, -.5);
    uv = mirror(uv, n3, 1.);
    uv = mirror(uv, n2, 0.);
    uv = mirror(uv, n1, 0.);
    return uv;
}