본문 바로가기

Shader CG33

FireWorks 불꽃놀이 파티클폭발하는 파티클 단계를 만들어 본다.먼저 가운데 밝은점 만들어 보자.uv 값의 범위는 x : -.5 ~ .5, y : -.5 ~ .5 로 설정되어 있다.uv 값의 크기를 구하면 uv와 원점과의 거리가 나오며, 그 거리를 역수를 취해서 컬러값에 넣어주면 다음과 같이 나온다.vec2 uv = (fragCoord - .5 * iResolution.xy) / iResolution.y;col = length(uv) * vec3(1); length(uv) 값을 d 값으로 설정하고, 소수를 d 값으로 나눈 값을 컬러값으로 사용하면d 값 작으면 컬러값이 커지게 되고, d 값이 커지면 컬러값이 작아져 다음과 같이 나온다.col = .1 / length(uv) * vec3(1); 이제 해쉬함수를 생성한다.해.. 2024. 9. 29.
Star 별자리 애니메이션 를 만들어본다.별자리 렌더링을 하기 위해서 다음 과정을 진행한다.  1> 화면의 구간을 여러개로 나누고 나눈 구간마다 공이 돌아다니는 씬을 만들어 본다. 화면의 중심을 원점으로 옮기고 uv 값에 특정 수를 곱해주고 fract를 시켜주면특정 수 만큼 패턴이 반복이된다.예를 들어 5를 곱하게 되면 uv 값은 0~5의 범위를 가지게 된다.fract를 시켜주면 0.0 ~ 1.0의 구간이 5개가 생기므로 반복된 색상의 패턴이 나오게 된다..5를 빼주어서 반복된 패턴의 중심도 좌측하단에서 원점으로 바꾸어 준다. vec2 uv = (fragCoord - 0.5*iResolution.xy)/iResolution.y;vec2 repeat = vec2(10);vec2 st = fract(uv * repe.. 2024. 9. 10.
12. RayMarching - rain and lights struct ray { vec3 o; vec3 d;};// 직선과 점이 수직으로 만났을때 지점vec3 clossestPoint(ray r, vec3 p) { return r.o + max(0., dot(p - r.o, r.d)) * r.d;}// 직선과 점과 최단 거리float DistRay(ray r, vec3 p) { return length(p - clossestPoint(r, p));}// 카메라 좌표계 구하기.ray GetRay(vec2 uv, vec3 camPos, vec3 lookat, float zoom) { ray a; a.o = camPos; vec3 f = normalize(lookat - camPos); vec3 r = cross(vec3(0,1,0), f); vec.. 2024. 8. 18.
11. RayMarching - Snow man 지금까지 공부했던 내용 바탕으로 눈사람 만들어보자. 머리와 몸통은 구 렌더링이다.머리와 몸통을 경계를 스무스하게 만드는 opSmoothUnion() 을 사용한다.눈과 입 전부 구 렌더링이라 특별한 것은 없다. 코의 경우 콘 형태이며, z 축방향으로 삐죽하게 만들기 위해 y,z 축을 교환했다.콘을 만드는 코드는 아래 사이트를 참고https://iquilezles.org/articles/distfunctions/ Inigo QuilezArticles on computer graphics, math and artiquilezles.org 눈사람 내부 컴포넌트를 전부 union 후, 컬러를 적용한다.옆에서 바라보는 효과를 위해 아래 코드를 사용했다.p.x -= 0.75; // move entire scene s.. 2024. 8. 14.