본문 바로가기
Toy Project

Waving Plane (23.02.16)

by YEON-DU 2025. 2. 15.
반응형

오늘의 목표: 파동 만들기

 

Step1. Plane 제작

Quad 그리기로 했었던 Metal 강의 자료 + IndexedDrawing 함수를 사용해서 Plane을 그렸다.

그리고 임시로 Sin함수만 적용했더니 …

 

 

 

 

..!

잘못됨

근데 움직이는 건 묘하게 Sin파같아서 생각해봤는데 Vertex Shader니까 Vertex한테 영향을 주는건데 영향을 줄 점이 단 4개뿐이라는 생각이 들었다.

그런 의미로 Plane 대용으로 찾을 Model을 보다가 기존에 게임에 썼던 공 모델을 가져와서 눌러서 폈다. 그리고 다시 수식 적용!

Step2. 수식 적용

 

일반 Sin 함수의 모양은 위와 같다.

 

그리고 지수 함수의 모양은 위와 같다.

가운데는 가장 진폭이 크고, 바깥으로 갈수록 진폭이 작아지는 형태이니 이 두 함수를 합쳐서 Waving Plane을 만들어보자.

 

Shader.metal

float r = sqrt(out.position.x * out.position.x + out.position.z * out.position.z);
float pi = 3.141592;
float h = 0.3 * exp(-(r * 4)*(r * 4));

out.position.y = 0.5 * h * sin(r*24*pi-timer*0.75*pi);

 

r : 현재 Plane의 중점과 현재 위치의 거리

h : 거리(r)에 비례하는 지수 함수

 

결과값은 진폭이 h에 비례해야 하고 (중간으로 갈수록 y값이 커짐) ,

거리에 따라 몇 주기가 그려질 건지 (n π) 결정하고, 시간에 따라 변화하게 해야한다.

(Sin 함수에서 특정 값을 더해주면 함수가 이동된다! = 시간을 더해준다!)

 

Sin 함수의 진폭 변경
Sin 함수의 이동

 

 

 

 

완료!

반응형

'Toy Project' 카테고리의 다른 글

웹 토이 프로젝트 후기  (2) 2021.04.17
마피아 사회자 어플리케이션  (1) 2020.11.29
github.io 웹 포트폴리오 만들기  (3) 2020.09.15
COLIFE 기획  (0) 2020.08.11
20.08.08  (0) 2020.08.08

댓글