glsl 마스크 요약

8068 단어 GLSL

개요



glsl에서 마스크 방법을 요약합니다.
glsl의 마스크는 거리 필드에서 만든 모양을 곱하는 것이 기본입니다.

수시로 추가하겠습니다.

가면



방사형 마스크



? 마크 등, 주로 극좌표계의 도형의 일부를 각도를 지정해 주었을 때에 사용할 수 있습니다.

const float PI  = 3.141592653589793;
const float PI2 = PI * 2.;

/*
vec2   p 中心の座標
float a1 開始角度(-1.~1.)
float a2 マスクする角度(0.~1.)
*/ 
float maskRadial(vec2 p,float a1,float a2){
  float a = fract(atan(p.y,p.x)/PI2+1.-a1);
  return step(a,a2);
}

  • 사용 샘플 (로딩 바)



  • 범위 마스크


    #define between(x,min,max) step(min,x)*step(x,max)
    

    glsl 듀플리케이트로 패턴을 만드는 것은 간단하지만, 그대로는 무한히 복제되어 버린다.
    패턴의 횟수를 지정하고 싶을 수 있다.

    이 경우, 마스크를 병용함으로써 패턴의 횟수를 제한할 수 있다.

    가장 사용하는 것으로 보이는 마스크. 응용범위는 넓은



    직사각형 마스크



    도형의 일부만을 직사각형으로 빼내고 싶을 때에 사용한다.
    정사각형 및 직사각형 모양을 사용해도 동일
    #define between(x,min,max) step(min,x)*step(x,max)
    
    float maskRect(vec2 p,vec2 p1,vec2 p2){
        return between(p.x,p1.x,p2.x)*between(p.y,p1.y,p2.y);
    }
    



    알파 마스크



    원형 알파 마스크 (비네트)



    거리 필드 유형에 따라 거는 방법이 달라집니다.
     precision mediump float;
     uniform vec2  m;       // mouse
     uniform float t;       // time
     uniform vec2  r;       // resolution
     uniform sampler2D smp; // prev scene
    
     float pCheckers(vec2 p,float n){vec2 q=p*n;return mod(floor(q.x)+floor(q.y),2.0);}
    
     void main(void){
        vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);
        float l = pCheckers(p,5.);
        l*=1.-length(p);
        //l*=1.-dot(p,p);
    
        gl_FragColor = vec4(vec3(l), 1.0);
     }
    

    길이(p)




    h tps://오. gl / M로 s1

    dot(p,p)




    h tps://오. gl/P7GRH1

    좋은 웹페이지 즐겨찾기