최근 오랜만에 게시물을 올리긴 했지만 사실 빌드 용량 줄이기는 예전부터 계속 노력해오던 숙원과도 같은 일입니다.
처음에는 위의 이미지처럼 용량이 200이 넘어갔는데,
용량 200MB가 엄청나게 크다..!
까진 아니지만 제 단순한 게임에 비해서 용량이 크다는 말이었습니다.
그 당시에는 용량에 크게 신경을 안써서 리소스 정리도 되지 않은 상황이었고
그냥 PC게임도 아닌 모바일 게임의 경우에는 글로벌로 나갈경우,
용량이 적은 저가폰 유저들이 생각보다 상당히 많다고하여 처음으로 리소스 정리를 시작했었습니다.
1. 텍스처 압축(Texture Compression)
먼저 텍스처 압축을 얘기하며서 POT을 빼놓고 말할 순 없을거같습니다.
POT(Power Of Two)이란 이미지의 크기가 2의 거듭제곱인 경우를 얘기하고,
반대로 크기가 2의 거듭제곱이 되지않을 경우는 NPOT이라고 합니다.
위 이미지를 보면 알 수 있는 것처럼 단지 이미지의 크기를 2의 제곱승으로 변경한 것밖에 없는데
300KB가 넘게 용량이 줄어들었습니다..!
이유를 찾아보니 꽤 많은 이유들이 있었습니다.
1.1. GPU 메모리 효율성
GPU의 메모리는 2의 거듭제곱 블록 크기로 주소가 정렬되고 관리되기 때문에,
POT이미지의 경우 주소계산이 단순해져 빠르게 접근할 수 있다.
1.2. 하드웨어 최적화
POT이미지는 Mipmap 생성, 필터링, 래핑 등의 하드웨어의 부담을 줄이는(성능을 높이는)기술이 완벽하게 적용됨.
(Mipmap : 거리에따라 이미지 크기가 일정하게 선명할 수 있도록 해상도에 맞게 이미지 크기변경하는 기술
-> 컴퓨터 부담이 줄어 성능 향상)
1.3 텍스처 압축 알고리즘과의 호환성
심지어 2의 거듭제곱으로 하기 전까지는 접근자체가 되지않았던 압축형태도 지정할 수 있어
RGB(A) Compressed ASTC 6x6 형태로 지정했더니 85KB -> 39KB까지 또 절반 가까이 떨어진걸 확인할 수 있었습니다.
쓸데 없는 이미지들을 제거해주고, 텍스처 압축을 한 결과..
204MB -> 162MB로 줄어들었습니다..!
2. 사용하지 않는 폰트 제거
게임에 어울리는 폰트들을 화면에 직접 적용하고 테스트하기 위해 여러 폰트들을 저장만 해두고
정작 사용하진 않았습니다..
그게 이제 문제가 되었는데 ..
2.1 폰트는 많은 용량을 차지한다
폰트는 단순한 텍스트가 아니라 벡터정보, 커닝(간격), 글리프(모양) 등이 다 포함되어 있고
심지어 한국어뿐만 아니라 여러 외국어까지 포함할 경우 엄청나게 늘어남....
2.2 사용여부와 관계없이 빌드에 포함된다
유니티의 기본 빌드 시스템에서 폰트는 항상 필요할 수 있는리소스로 간주된다.
그래서 다른 리소스들은 사용하지 않으면 빌드에서 제외되지만
폰트는 사용여부와 관계없이 빌드에 포함되는 특성이 있다.
그래서 사용하지 않는 폰트를 제거한 결과...
162MB -> 101MB로 줄어들었습니다..!
🎉🎉
그렇게 하하호호 즐겁게 사나싶었지만... 다시 용량을 줄이는 일이 발생하게 되는데....
'STUDY > 유니티' 카테고리의 다른 글
[C#] null을 비교하기위한 여정3, ==과 is 그리고 Equals(,) 속도 (1) | 2023.01.22 |
---|---|
[C#] null을 비교하기위한 여정2, is 와 FakeNull (0) | 2023.01.21 |
[C#] null을 비교하기위한 여정1, ==와 Equals() (0) | 2023.01.18 |
[Unity] 메지카복셀에서 내가 만든 캐릭터 유니티로 불러오기 (0) | 2022.09.10 |
[Unity] C# 문자열보간 (0) | 2022.08.02 |