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이 된다.
'셰이더 (Shader) > The Art of Code' 카테고리의 다른 글
[GLSL] Starfield - 5(완) : 마우스 상호작용, 별 팍 사라지는 이슈 수정 (0) | 2023.04.08 |
---|---|
[GLSL] Starfield - 4 : 별 깊이감, 움직임 추가 (0) | 2023.04.08 |
[GLSL] Starfield - 3 : 별 여러개 만들기 (2) (0) | 2023.04.08 |
[GLSL] Starfield - 2 : 별 여러개 만들기 (1) (0) | 2023.03.30 |
댓글