본 게임개발일지는 본인이 게임개발에 참여한 게임에 대한 얘기이며
게임개발에 느낀점이나 시행착오 등을 기록하기위해 작성된 글입니다
공부해나가는 입장으로서 부족한점이 많아 이해해주시면 감사하겠습니다
현재 서비스중인 픽셀포커디펜스에 대한 문제점 분석을 해보려고 한다
픽셀포커디펜스가 서비스를 한 이후로 특정 기기에서의 발열 문제에 관한 피드백이 계속해서 왔었다
현재 픽셀포커디펜스는 이후에 컨텐츠 업데이트 계획이 없기에 당장에 있는 문제를 해결하는게 숙제라고 생각이 들었다
첫번째로 인지했던 문제는 IOS에서 어플의 용량이 다른 게임어플에 비해 몇배나 높았다는 점이다
제가 IOS 빌드 및 관리 담당이므로 IOS 위주로 설명하겠습니다
게임에서 사용되는 이미지가 많은만큼 이미지를 효율적으로 관리하지 않아서 용량 문제가 발생하는거라고 추측했다
때문에 유니티에서 빌드를 통하여 현재 빌드의 용량 크기를 파악해보았다
Build Report에 의하면 아니나다를까 Build 용량에서 Textrue가 496.8mb로 전체 용량의 88.4%를 차지하고 있었다
따라서 이번에 유니티에서 Texture를 효율적으로 압축하는 방식에 대해 알아보고 이를 프로젝트에 적용해보도록 하겠다
우선 픽셀포커디펜스의 현재 압축 방식에 대해 짚고넘어가보자
임의의 이미지에 대한 압축방식을 캡쳐하여 가져와보았다
우선 처음에 픽셀포커디펜스를 제작할때 처음 게임개발을 하기도 하여서 구현에만 조금 급급했고 이런 부분에 대해서 자세하게 알아보지 못했기 때문에 이런 결과가 나온거같다.
위 압축방식엔 다음과같은 문제점이 있었다
먼저 게임내에서 사용하는 전체 이미지 리소스에 대한 Max Size를 적당한 값으로 조절해주었다
이미지에서 확인할 수 있듯이 Max Size만 해도 기존의 496.8MB에서 389.3MB로 약 100MB 정도 줄어든걸 확인할 수 있었다
두번째로 Compression 방식을 None으로 설정하였는데
이는 게임개발 초기단계에서 최적화에 대한 생각을 안한채 None으로 하였을 때
이미지가 제일 원본과 똑같고 깔끔하게 나온다고 생각했기 때문에(압축을 안했으니 당연한거였다)
None 방식으로 채택하였는데 Texture 용량이 크게 나온 이유가 이같은 이유가 가장 큰거같다
그래서 유니티에서 사용하는 Texture 압축 방식에 대해 알아보았다
ASTC(Adaptive Scalable Texture Compression)
ARM과 AMD가 공동으로 개발한 포맷. 2012년에 처음 선을 보인 비교적 최신 포맷으로, 기존 포맷들의 약점을 개선하여 이미지 품질과 압축 효율을 끌어올린 포맷이다. 안드로이드와 iOS 양쪽 모두 사용이 가능하지만 OpenGL ES 3.2 이상을 지원하는 디바이스에서만 사용이 가능하며, 갤럭시 S6나 아이폰 6 이후 발매된 대부분의 기종에서 지원된다.
ASTC의 알고리즘에 대한 설명은 위의 유튜브 영상을 참고하는게 더 좋을거같다
최적화에 대해 알아보기위해 위 영상을 본인도 다 봤는데 알기쉽게 설명해줘서 좋은거같다
위 설명을 바탕으로 이해 후 프로젝트에 다음과 같이 적용하였다
Format에서 RGB(A) Compressed ASTC 4*4 block을 설정해주고 Compressor Quality는 Best로 설정하였다
ASTC에도 블럭 개수에 따라 다른 설정들이 있는데
이 블럭의 개수같은 경우 숫자가 낮아질수록 퀄리티가 더욱 더 좋아진다
블럭의 개수가 의미하는 것은 한정된 용량 안에서 어느 크기 단위로 표현할것인가를 결정하는 것인데
표현할 수 있는 크기의 블럭이 작을경우 더욱더 세밀한 표현이 가능하기 때문이다
대략적으로 이해한 저의 설명이고 자세한 설명은 영상을 참고해주세요!
픽셀포커디펜스는 배경이나 효과등이 모두 1픽셀로 이루어져있는 도트게임이라 4*4로 모두 압축을 진행하였다
위 이미지에서도 확인할 수 있듯이 기존의 ETC방식에 의해(IOS 플랫폼에서 사용된 압축방식중 하나이다) 용량은 더 작되 오리지널과 비교해봤을때 퀄리티는 더 높다는 것을 알 수 있다
따라서 위와 같이 이미지를 적용하여 나온 픽셀포커디펜스 빌드 결과는 다음과같다
📌 Max Size를 이미지의 크기에 맞게 적당한 값으로 조절
📌 압축 방식을 ASTC로 수정
위 두가지 방식을 적용하니 처음의 용량인 496.8MB 에서 164.2MB 로 약 3배정도 줄었다고 볼 수 있다
IOS 빌드 후 앱 용량 결과는 다음과 같다
이상으로 Texture 압축을 통한 픽셀포커디펜스 용량 최적화를 진행해보았다
우선 ASTC는 분명 좋은 압축방식이지만 문제점이 하나 있는데
지원기기가 위에서 언급한것 처럼 OpenGL ES 3.2 이상을 지원하는 디바이스에서만 사용이 가능하단 점이다
당장에 좋은 방식이라 채택하였지만 지원이 안되는 기종이 많을경우 플랫폼별 다른 방식을 적용하여 새로 빌드해야하지 않을까란 생각을 하고있다
IOS는 현재 앱스토어에서 ios12 부터 지원을 하기 때문에 대부분의 기종에선 문제가 없을거같지만 혹시 모르는 일이기 때문에 일단 테스트후에 빌드해보고 상황을 지켜보도록 해야겠다
또한 당장의 Texture 압축을 통한 어플 용량의 최적화는 진행해보았지만 Texture 압축이
모바일 기기의 발열의 원인인지는 정확히 모르는 상황이다
확실히 용량이 큰 이미지를 게임속에서 렌더링하면 프로세서가 한 번에 가져올 수 있는 데이터의 크기가 한정돼있기 때문에 대역폭 문제가 발생할것이고 이 때문에 발열 및 전력 소모에 큰 영향이 있을거라고 생각해서 텍스쳐 압축에 대한 문제를 해결해보았다
하지만 압축을 진행한 후에도 테스트해보았을때 게임이 진행됨에 따라 발열문제는 여전히 발생을 하고있었다
사실 텍스쳐 이외에도 다양한 방법으로 최적화를 위해 접근을 해보았지만 당장에 수정하기 어려운 부분들이 있어 앞으로 계속해서 고민해봐야겠다
제작단계에서부터 알았다면 좋았을 요소도 많았다
이상으로 효율적인 Texture 압축을 통한 프로젝트 용량 최적화에 대해서 포스팅 해보았습니다
궁금하신 점이 있으시거나 수정해야할 내용이 있다면
관련된 댓글 남겨주시면 감사하겠습니다!!🙇