본문 바로가기
셰이더 (Shader)/The Art of Code

[GLSL] Starfield - 1 : 별 만들기

by Minkyu Lee 2023. 3. 30.

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = (fragCoord-(iResolution.xy*0.5))/iResolution.y ; 
    uv *= 3.0; // 결과적으로 별의 크기가 된다. 값이 클수록 별이 작아진다.
    vec3 col = vec3(0.0);
    
    // 동그라미 글로우
    float d = length(uv) ;
    float m = 0.02/d ; // 동그란 모양.
    // 0.02까지는 완전히 1, 0.02 이후부터는 서서히 falloff되면서 글로우 형태가 된다.
    
    // 별모양
    float rays = max(0.0, 1.0-abs(uv.x*uv.y*1000.0)) ;
    // x 그라데이션, y 그라데이션을 서로 곱하고, 강하게 쪼아주면 별모양이 된다.
    // 음수를 막기 위해 max사용한다.

    // 적용
    col += m ;
    col += rays ;    
    fragColor = vec4(col,1.0);
}

/*
https://www.youtube.com/@TheArtofCodeIsCool
*/

// uv 변수 해석

좌표를 중앙으로 옮긴다. 해상도의 절반만큼 이동해야 중심으로 옮겨진다.
노말라이즈 하기 위해 나눈다. x보다 짧은 y로만 나눈다. uv 비율이 유지된다.
해상도 800 x 450 기준 1.777... 비율이다.
따라서 x = -0.888... ~ 0.888... y = -0.5~ 0.5이 된다.

댓글