7aeed471b38a3ef53bef85e710867738c2a221bf231cca51e2b8c83c6cbf57356a412278154ef9619fd56590c554e18ff1ff7957cc696613

(미리 말하자면 해결책을 알려주는 글은 아니야)


나도 22~23년도에 유니티 처음 써서 겜 만들었을 때 도트 찌그러지는 것 때문에 고민을 많이 했었는데, 원인에 대해 명쾌한 답을 얻을 수가 없었음. 나중에야 이게 그냥 종특이구나 해서 감안하고 보게 됐지만, 요즘도 가끔 이렇게 스프라이트 찌그러짐에 대해 원통해 하는 뉴비가 보이는데 나도 비전문가라 그냥 '원래 그렇다'라고만 말해줄 수밖에 없었던 부분이고...


인개갤 N년차 고인물 인붕이들은 그냥 그러려니 하고 관심 안 두고 있었겠지만, 나처럼 이유도 모른 채 그저 받아들여야 한다는 현실에 답답함을 느끼는 뉴비가 있을 것 같아서 써봄.

그냥 받아들여! 하는 것보단 이러이러해서 안 되는 거라 어쩔 수 없다, 라고 명쾌하게 이유를 말해주는 게 더 낫자나. 내가 23년도에 인개갤에 질문했을 땐 이걸 알려주는 사람이 아무도 없었는걸...


https://discussions.unity.com/t/pixel-art-distortion-in-game-window/820336

Pixel Art Distortion in game window

Hey everyone, I’m hoping someone has some experience with this. I’ve done a good amount of research online and there seems to be a lot of confusion regarding the topic. I’m trying to build a game with pixel art. For a while now I’ve been having some issues in which the sprites can get distorted based on certain settings. These include the GAME window resolution and some canvas settings. I’ll try to be a through and detailed as possible. If something is unclear I’ll be happy to clarify as best ...

discussions.unity.com


하여튼 이유 자체는 이 글에 쉽게 설명되어 있음. '픽셀과 픽셀 사이에 색이 위치할 때, 유니티는 이를 처리할 수 없기 때문에 걸쳐 있는 두 칸 모두 색을 표시하거나, 둘 중 하나만 표시하거나, 둘 다 안 해버린다. 그래서 색이 정확한 위치에 정확한 크기만큼 차지하지 못하는 순간이 온다면, 필연적으로 찌그러진다.' 애당초 3D 엔진으로 설계된 유니티고, 2D의 표현 방식 역시 페이퍼마리오처럼 2D인 척하는 판떼기를 세워두는 것이기 때문에 일어나는 일이라고 볼 수 잇다...


픽셀 정렬의 문제이기 때문에 고해상도 스프라이트보다 픽셀의 구분이 명확한 도트 스프라이트에서 더 눈에 띄는 현상이지만, 이론상으로는 크기에 관계 없이 어떤 2D 스프라이트에서도 일어날 수 있음.


그리고 이를 완벽하게 해결하기 위한 방법은....아쉽게도 존재하지 않음. 개발자 입장에서 '해결책'이라고 부를 만한 건 그나마 픽셀 퍼펙트뿐인데, 기준 해상도*n 해상도만 지원이 된다는 치명적인 문제가 있음. 예컨데 기준이 640*360이면 2배인 1280*720, 3배인 1920*1080...n배인 640*360*n만 제대로 출력이 되고, 그 사이에 낀 나머지 1600*900 이런 것들은 잘못 빤 옷처럼 화면 전체가 싹 다 쪼그라들어버림. 따라서 최대한 다양한 해상도를 지원하는 요즘 메타에는 제대로 써먹기가 힘듦.


참고로 스프라이트의 찌그러짐 문제 역시 저 픽셀 퍼펙트의 해상도 문제와 어느정도 관계가 있는데, 마찬가지로 기준 해상도 * n의 해상도에서 도트가 거의 완벽하게 보이지만, 그 사이에 낀 다른 해상도에서는 찌그러지는 현상임

a15714ab041eb360be3335625683746f0153452cd6a6e889d63c63f39e10cd6ea02ab1a2228a55823abea5


a15714ab041eb360be3335625683746f0153452cd6a6e889d63c63f29810cd6efeb0796d203263d8918579

위에는 1600*900에서, 아래는 1920*1080에서. 아래는 거의 완벽하게 보이는 반면, 위는 그냥 누가 봐도 찌그러졌음. 참고로 윗짤의 저 왼쪽 검은 선은 원본 아틀라스에서 옆에 붙어 있는 검은색 윈도우 스프라이트에서 삐져나온 건데, 해상도를 안 맞추면 찌그러짐에 더해서 이런 일도 일어나기 때문에 항상 스프라이트를 만들 땐 충분히 상하좌우로 여유 공간을 두고 만드는 게 좋음.


아무튼 결론은... '해결책이 없으니 받아들여라'임. 하지만 왜 그런지 이유를 이제 알았기 때문에 뉴비들은 더 이상 '씨발! 왜 이러는데!' 하지 않고 '아하! 유니티가 바보멍청이라 그렇구나! 내가 넓은 아량으로 이해해줘야겠는걸!'이라고 말하고 멘탈을 지킬 수 있게 되었음!



그리고 마지막으로..


'아니 그러면 저렇게 찌그러진 걸 보고도 플레이어들이 아무렇지도 않아할까요? 개발자인 나조차도 개 거슬리는데!'

라는 의문에는?


나는 아직 증명도 못했기 때문에 뭔가 이런 것에 대해 의견을 낼 위치는 아니라고 생각하지만....그래도 개인적인 생각을 말해보자면 '어차피 안 보인다. 너는 네가 만든 거라 보이는 거다. 설령 봤다고 하더라도 그다지 신경쓰지 않는다.'라고 답해도 될 것 같음. 그리고 요즘 대부분의 플레이어들은 1920*1080 전체화면 빠방하게 해놓고 하는 경우가 많으니, 스프라이트 사이즈만 잘 지켰으면 실제로 잘 안 찌그러지기도 하고.


내가 유니티로 맨 처음 만들었던 I WANNA KILL THE WITCH라는 아이워너비더보시 아류작이 있는데, 여기선 스프라이트 크기도 16, 32, 48 뭐 이렇게 맞춰놓은 게 아니라 20, 23, 40, 27 뭐 이런 개 근본없는 사이즈로 맞춰놓은 스프라이트가 한트럭이었음. 당연히 찌그러짐도 엄청 심했고. 그런데도 불구하고 이 게임을 라이브에서 씹고뜯고맛봤던 스트리머조차 스프라이트가 찌그러졌다는 얘기는 한 번도 하지 않았음. 근본적으로 저 게임 장르 자체가 매우 하드코어한 플랫포머 런앤건 게임이었고, 그런 미세한 찌그러짐에 눈이 갈 틈이 없었기 때문임. 즉 '작정하고 보지 않으면 안 보인다.'라는 것. 스프라이트 찌그러짐을 경험해 본 사람들은 알겠지만 워낙 요상한 모양새로 찌그러지니까 눈에 띄었다면 얘기를 안 하고 넘어갈 수가 없는 부분이었을 텐데도..지인들에게 시켜봤을 때도 사디스트가 만들었냐는 소리만 들었지 스프라이트 찌그러짐 얘기는 없었음.



한편, 유니티가 3D 특화 엔진이기 때문에 이런 일이 일어나는 거라 반대로 2D 특화 엔진들에게선 당연히 이런 일이 거의 없음. 쯔꾸르는 말할 것도 없고, 겜메도 요즘 겜메는 잘 모르겠지만 적어도 내가 어렸을 때 본 게임메이커 스튜디오에선 확실히 없었음. 클릭팀퓨전 같은 기타 마이너한 2D 게임 엔진들도 마찬가지일 거고, 고도도 없나? 아무튼, 그러니 도저히 유니티의 찌그러짐을 못 참겠다! 하면 저 엔진들을 고려해봐도 될듯


4



저도 2~3년 간 독학하면서 여기저기서 누더기골렘처럼 주워얻은 지식으로 쓴 글이라 틀린 부분이 있을 수도 있는데 틀린 얘기가 있으면 댓글로 알려주시길...