Posts (Amplify) Tree Growth Shader
Post
Cancel

(Amplify) Tree Growth Shader

Summary


  • 나무가 성장하는 효과 표현하기


Preview


2021_0724_Growth


1. Tree - Body


프로퍼티 목록

image


쉐이더 에디터 설정

image

  • 우측 상단을 클릭하여 Blend ModeMasked로 변경한다.

  • Mask Clip Value 값을 쉐이더 에디터에서 직접 설정해도 되지만
    마테리얼에서 프로퍼티를 통해 조정하려면 우측의 점을 누르고 드롭다운에서 프로퍼티를 선택한다.


쉐이더 노드

ScreenshotASE


설명

식물 성장을 표현하기 위해 사용되는 메시는 특별한 조건이 필요하다.

식물이 아래에서 위로 성장하는 것을 표현하기 위해

메시의 UV.Y 값은 가장 하단 정점에서 0을 갖고

+Y축 방향으로 상단에 위치한 정점일수록 점점 커지는 형태를 가져야 한다.


UV.Y - Grow 값을 마스크로 이용하여 총 두 군데에 사용하게 된다.

2021_0724_Growth_Mask


첫번째로 알파 값으로 사용하여

Alpha Clip 프로퍼티의 값보다 크거나 같은 부분은 렌더링하고

작은 부분을 렌더링하지 않는 용도로 사용되며


두번째로 정점의 위치를 노멀 벡터의 반대 방향으로 이동시킬 때

정점을 이동시키거나 이동시키지 않을 영역을 구분하기 위한 용도로 사용된다.


image

메시의 정상적인 상태는 위와 같다.


그리고 여기에 Grow 프로퍼티 값을 0.14 정도 지정했을 때

image

이런 모습을 확인할 수 있는데,

마스크 색상과 대조해보면 다음과 같다.

image

빨간 선 기준으로 하단부는 마스크의 색상이 까만 부분이며

이 영역에 해당하는 정점들은 별도의 연산이 더해지지 않기 때문에

정상적인 모습으로 보인다.


빨간 선 기준으로 상단부는 마스크 색상이 0보다 큰 값을 가지며

이 영역에 해당하는 정점들은 각각 자신의 노멀 반대방향으로 이동하여

정점이 넓게 펼쳐진 듯한 모습을 확인할 수 있다.


이 상태에서 마스크를 One Minus로 반전시키고

Alpha Clip을 통해 렌더링될 영역을 구분시킨다.

image

그리고 이를 마스터 노드의 Opacity Mask에 적용하게 되면

image

이렇게 빨간 선 기준으로 상단부는 렌더링되지 않고,

하단부는 정상적으로 렌더링되는 모습을 확인할 수 있다.


이 두 가지를 이용하면

2021_0724_Growth_Wireframe

이와 같이 Grow 프로퍼티 값의 증가에 따라 식물이 성장하는 듯한 효과를 표현할 수 있다.


2. Tree - Leaves


프로퍼티 목록

image


쉐이더 에디터 설정

  • Opaque 그대로 두면 된다.


쉐이더 노드

ScreenshotASE


설명

아주 간단한 연산을 적용한다.

Grow 프로퍼티 값이 0일 때는 Local Vertex OffsetVertex Position을 완전히 빼서

모든 정점이 메시의 피벗 위치에 모이도록 하여, 결국 아무 것도 보이지 않는다.

Grow 프로퍼티 값이 1일 때는 Local Vertex Offset0이 더해지므로

쉐이더에서 아무런 연산을 수행하지 않은 것처럼 정상적으로 보인다.

그리고 Grow 값이 0 ~ 1 사이일 때는 이 두 경우 사이에서 보간되어

Grow 값 증가에 따라 오브젝트가 점차 커지는 효과를 나타낼 수 있다.


2021_0724_Growth_Leaf


Download



References


This post is licensed under CC BY 4.0 by the author.