Tornado Shader

오늘은 움직이는 토네이도를 구현해봤다

먼저 핵심 노드들을 살펴보자

 

Radial Shear노드를 알아보자

Description

Applies a radial shear warping effect similar to a wave to the value of input UV. The center reference point of the warping effect is defined by input Center and the overall strength of the effect is defined by the value of input Strength. Input Offset can be used to offset the individual channels of the result.

(출처 - https://docs.unity3d.com/Packages/com.unity.shadergraph@6.9/manual/Radial-Shear-Node.html)

 

이게 뭔뜻이냐? warping효과를 UV에 준다는 뜻인데 warping이 무엇이냐? 왜곡이라는 뜻이다! 뜻 중심부가 왜곡돼서 중심부가 전반적으로 볼록한 느낌이 든다!

Time과 곱해준 값을 Radial Shear의 offset에 연결해주고 SimpeNoise의 UV에 연결해준다!

즉 Radial Shear은 UV에 이용된다!

 

다음으로 Twirl노드이다!

 

휘감기(Twirl)

Twirl 이미지 이펙트는 원형 영역 안에 렌더링된 이미지를 왜곡합니다. 원의 중심에 있는 픽셀은 지정된 각도로 회전되고, 원에서 나머지 픽셀의 회전은 중심에서 멀어질수록 감소하여 원의 가장자리에서 0이 됩니다.

휘감기는 소용돌이라는 다른 이미지 이펙트와 유사하지만, 소용돌이는 하나의 점이 아닌 중심 원을 주위로 이미지를 왜곡시킵니다.

 

사전적 의미이다!

(출처 - https://docs.unity3d.com/kr/530/Manual/script-Twirl.html)

 

이게 뭔 뜻일까? 

일반적인 Twirl노드를 가져왔다. 노드를 보면 소용돌이 치는듯한 모양이지 않나?

 

이해를 돕기위해 움짝을 가져왔당! 이렇게 time노드를 이용해 중심으로부터 회전하는 듯한 UV를 만들어 낼 수 있다!

이 Twirl노드도 Simple Noise와 곱해주고

마지막으로 위에서 만든 노드와 이 노드를 곱해주면 끝난다!

나같은 경우에는 Lit을 이용해 Emission을 가능하게끔 했고

알파클립과 알파를 적절히 사용해 토네이도느낌을 주었다.

 

 

최종결과물이다.

나같은 경우에는 토네이도의 움직임을 표현해야해서 움직임까지 나타내봤다.

Obaque를 사용해야 투명해지지 않는다!

 

토네이도의 움직임같은경우 가장 쉬운방법으로 구현했다.

재귀함수를 이용했고, Translate함수를 이용해 움직임을 표현했다! 

if(time >1.3f) 같은경우 time의 값이 너무 크면 그냥 break해주기 위함이다.

다르게 이동하는 방법이다.

저번에 공부한 Lerp를 이용해 좀더 부드럽게 이동시켜봤다.