[ 게임 개발 ] 유니티 쉐이더 그래프 3 - Dissolve Shader

2024. 7. 15. 16:44게임개발

Dissolve란?

이런 것이다.

흔히 게임 내에서 오브젝트가 파괴되거나 적이 사망하여 소멸될 때 등등

사용처가 굉장히 많고, 꽤 만들기도 간단한 기능이다.

함 만들어보자


준비

우선 Unlit으로 쉐이더그래프를 하나 만들어주고 (Lit 해도 된다)

 

그래프 세팅은 Surface Type

Transparent로 바꾸어준다

 

Transparent가 무엇인지는 아트 직군이거나

포토샵을 좀 다루어 보았다면 알 것이다.

이것은 텍스쳐의 알파값이 0일 경우

그 픽셀을 투명하게 처리할 것인지

검은색으로 처리할 것인지를 정하는 것이다.

 

따라서 우리는 Dissolve 될 때 검은색이 되는 게 아니라

투명하게 안 보여 야하기 때문에

Transparent를 선택해 준다

3D에서 쉐이더그래프를 만들었다면

Fragment자리에 BaseColor와 Alpha를 제외한

다른 노드블록이 들어가 있을 수 있는데

우리는 이것들만 쓸거라 다 지워줘도 상관없다.


원리

쉐이더그래프는 Simple Noise라는 노드를 지원한다

 

이는 간단하게 UV와 scale을 입력받아

랜덤 한 값을 무작위 배열시켜
ValueNoise라는 것을 만든 것이다

 

이름에 걸맞게 간단하게 노이즈를 뽑아주는 노드이고

많은 쉐이더 그래프에서 이를 사용한다

 

이 노드의 활용도는 꽤 다양한데

보통 그냥'랜덤'이라는 키워드가 필요하면

노이즈를 쓴다고 보면 된다.

 

 

 

사실 간단한 Dissolve자체는 노드 두 개로 구현가능하다

저 Step이라는 노드만 붙여주면 벌써 의도대로 동작한다

 

원리를 알았으니 한번 제대로 만들어보자

 


만들기

우선 필요한 프로퍼티들부터 만들어준다

대충 이렇게 세 개만 만들어놓고

 

DissolveHeight 같은 경우에는

 

 

Mode를 Slider로 바꾸어주면

최대 최솟값을 제한하고, 에디터에서 슬라이더로

값을 간단하게 조작할 수 있게 된다

 

 

 

 

 

그리고 이렇게 연결하여 저장하고

메테리얼을 하나 만들어 테스트해 보자

 

메테리얼을 만들 때

그냥 Create> Material 해서 

이렇게 찾아서 적용시킬 수도 있지만

 

더 간단한 방법으로는 

 

쉐이더그래프 파일을 우클릭하고

Create> Material을 하면 바로 만들어진다

 

 

 

약간의 꿀팁이었고 다시 테스트로 돌아와서

오브젝트를 하나 만들어 아까 만든 메테리얼을 적용시킨다

그리고 아래의 슬라이더를 한번 움직여보자

 

잘된다

근데 뭔가 심심하지 않은가?

뭔가 타들어가면서 사라지는 느낌을 추가로 주고 싶다.

꽤 간단한데

이 원리를 이용해서 아우트라인을 만들어줄 것이다.

깨알 팁. 저기 Edit을 누르면 바로 편집창으로 갈 수 있다.

에디터 창으로 가서

일단 Float로  Outline의 굵기로 쓸 Outline에 적용할 색에 해당하는 Color프로퍼티를  만들어준다.

혹시 빛나게 하고 싶다면 노드 세팅에서 Mode를 Default에서 HDR로 변경해 주면 된다.

 

일단 외곽선에 해당하는 부분을 먼저 빼주자면


이와 같은 원리로 Outline을 따왔다.

DissolveHeight에 OutlineWidth를 더하여

Step에 오프셋을 줘서 더 큰 노이즈를 만들고

거기서 작은 노이즈를 빼서 그 외곽선만

가져왔다.

 

이제 기존 Base Color노드에 붙어있던 Color를 떼서 작은 노이즈에 곱해주고

OutLine에 OutlineColor를 곱하여 둘을 더해주면 저런 흰색과 OutlineColor색에 해당하는

아웃라인이 보일것이다. (임의로 빨간색으로 설정했다)

 

그리고 알파에는 큰 노이즈를 넣어주는데 왜냐하면

작은 노이즈를 넣으면 Outline부분이 안보이고 Outline을 넣으면 Outline만 보이기때문에

두 영역의 크기를 모두 포함하고있는 큰 노이즈를 넣으면 둘다 보이게 된다.

 

이제 저장하고 나가서 색깔 설정하고 한번 DissolveHeight를 조절해보자

아 잘된다~

 


노드 정리