유니티

유니티 - 스프라이트(Sprite)가 겹칠 때 검정으로 나오는 문제 해결

근본넘치는개발자 2024. 12. 16. 22:12

오늘은 스프라이트(Sprite)가 겹칠 때

검정으로 나오는 문제를 해결한 과정을 공유하고자 합니다.

 

사실 이 문제를 겪고 해결한 지는 꽤 시간이 지났었는데

(대략 반년 전 처음 진행했던 프로젝트에서 겪었던 문제 ㄷㄷ)

올 한 해 동안 진행해 왔던 프로젝트들을 정리하면서

이 부분은 한번 작성해 봐도 좋겠다는 생각에 써봤습니다.

 

당시 내가 원했던 결과  / 완성본

 

 

문제 상황 

 

플레이를 진행하고 애니메이션 효과가 재생되면 저렇게 겹치는 부분이 이상해졌습니다.

 

 

원인 

 

기본적으로 Unity는 알파 블렌딩을 사용하는데,

겹치면서 색상이 중첩되어 더 어둡게 보이는 현상이 발생한 것이었습니다.

 

해결 과정

처음엔 Material을 만들어서 처리하는 방법을 찾아 시도했었는데 

당시에는 입문한 지 얼마 안 되어 잘 몰랐을 때라 중간에 막혀서 다른 방법을 찾았었고,

 

그때 해결했던 방법은 

Sprite Renderer의 Mask Interaction에서

Visible Outside Mask로 변경하는 방식이었습니다.

 

 

Sprite Mask는 다른 스프라이트의 특정 부분을 보이게 하거나

숨기는 데 사용되는 Unity의 2D 그래픽 컴포넌트입니다.

 

그런 Mask와 어떻게 상호작용 할지 속성을 선택할 수 있는데 

각 속성에 대해 간단히 소개하겠습니다.

None

기본값으로 Sprite Mask와 전혀 상호작용을 하지 않으며,

마스크의 영향을 받지 않고 항상 보이게 해주는 속성입니다.

 

Visible Inside Mask

마스크 영역 내부에만 스프라이트가 보이고,

마스크 밖의 부분은 모두 숨겨지는 속성입니다.

 

Visible Outside Mask

마스크 영역 외부에만 스프라이트가 보이며,

마스크 안의 부분은 모두 숨기는 속성입니다.

 

 

당시  겹치는 부분을 투명하게 만들 때 VisibleOutsideMask를 사용한다는걸 찾아서

적용하여 문제를 해결 했습니다.

 

**

맨 처음 시도했던 방식

Material의 Rendering Mode를 "Additive"로 변경하면 된다는데 

Material을 아무리 봐도 RenderMode가 보이지 않아서 당시 유니티 버전 차인가보다 하고 넘어갔었습니다.

 

정리하면서 다시 찾아보니 

URP(Universal Render Pipeline) 또는 HDRP(High Definition Render Pipeline)에서는 

Material Inspector 창이 달라서 안 보이는 게 맞더군요. 

 

이런 경우 Material의 Shader를 "Universal Render Pipeline/Lit"으로 설정한 후

Surface Type을 Transparent로 변경하면 추가 블렌딩 옵션들을 확인 할 수 있고, 

이곳에서 Addictive로 변경하여 적용하면 되는 간단한 문제였습니다.

 

당시에는 이걸 못 찾았다니;;

지금 와서 보니 조금은 성장하긴 했나 봅니다.

 

당시 검색을 해봐도 명확하게 알려주는 곳을 못 찾았었는데

(아마도 숙련도 문제였겠죠;; )

이 글을 읽는 분은 도움이 되셨길 바랍니다.