개발 이야기 안하는 개발자

Liquid Effect 본문

Unity/URP_Shader

Liquid Effect

07e 2023. 4. 11. 22:25
반응형

 

목표

https://youtu.be/tI3USKIbnh0

 

시작

 

빈 그래프로 시작

 

병은 Blender로 제작했음

 

Universal로 제작할 예정이니 추가

 

선택하면 나오는 화면

 

 

그중에서 Unlit으로 진행

 

Unlit 선택하고 Render Face는 양면

 

 

Alpha Clipping선택 (이건 물의 찰랑거림을 표현하기 위함. 담겨져 있는 정도를 표현하기 위함)

각 버텍스의 위치값(Position)에서 오브젝트의 위치값(Object->position)을 뺀다(Substract)

 

나온 값을 Split으로 하나씩 쪼갠다.

 

쪼갰을때, x값(Split에선 R값)을 Step(0 또는 1값을 반환함)

 

Step은 들어온 In의 값이 Edge값보다 크거가 같으면 1을, 아니면 0을 반환한다.

 

이때, 두 값의 차는 Edge로 들어오니 해당 Step의 사용용도는 두 값의 차가 양수인가 음수인가를 물어보는 용도이다. 

양수일땐 0을 반환하고, 음수일땐 1을 반환한다. (0이 기준이기 때문에 음수가 나와야 0이 더 큰값이 된다)

 

즉, Object의 위치좌표를 기준으로 오른쪽인가 왼쪽인가를 묻는 내용이다.

왼쪽이 0보다 작은 수, 즉 0이 더 큰 수들의 모임은 왼쪽이기 때문에 그림은 왼쪽만 그려진다.

 

(해당 내용은 병 안에 있는 물에게 적용되었음)

해당 값을 y좌표(G값) 을 사용해서 위 아래로 나누었다.

채워지는 정도를 임의로 수정하기 위해서 변수로 바꿨다.






영상에서 보면 In의 값이 0이면 절반정도 채워진다.

애초에 식을 그렇게 짰으니 당연하다.

 

0이 아닌 -1보다 작은 수로 해서 0일땐 완전히 비워지고, 1일땐 가득 채워지게끔

ReMap을 사용해서 수정했다.

 

Is front Face는 지금 보고있는 면이 앞면인가 뒷면인가를 묻는 키워드 이다.

 

Branch는 URP에서 사용하는 If문으로

True인 경우엔 정의한 SideColor로 색을 칠하고

False인 경우엔 정의한 TopColor로 색을 칠할 예정이다.

이렇게 함으로써 뭔가 물이 차 있는 것 같은 시각적 효과가 생겼다.

현재위치를 wobbleZ값에 따라서 회전하도록

Position값을 Rotate About Axis를 통해 회전했다.

 

지금 값은 Z축을 통해 90도 회전한다는 내용인데,

wobbleZ값을 곱해서 회전하는 그 정도를 임의로 수정했다.

 

수정된 값은 보여지는 물 높낮이에 더했다.

 

축이 수정되었기 때문에 해당 연산은 가능하다.

같은 방식으로 X축 기준으로 회전하는 내용도 추가했다.

스크립트 추가.

 

해당 내용은 병 오브젝트를 흔들면

wobble값을 수정해주는 스크립트이다.

최종 결과물





후기 :  Mesh를 잘 못 만들어서 X축 기준으로 회전할때 회전이 잘안되서 아쉬웠음.

 

반응형

'Unity > URP_Shader' 카테고리의 다른 글

PIXELSHADER  (0) 2023.04.11
SPACE TRAVEL_2  (0) 2023.04.11
SPACE TRAVEL_1  (0) 2023.04.11
Galaxy Shader  (0) 2023.04.11
ToxicWaterFall  (0) 2023.04.11