728x90

출처 : http://mentum.tistory.com/55

 

1. 외국 시장의 용량과 메모리 문제


- WIFI가 원활하게 사용 가능한 나라는 생각보다 많지 않다. 게임의 용량이 진입장벽이 될 수 있다.

- 일부 중국 퍼블리셔는 200MB 초과게임은 심사거부

- 저가 안드로이드 폰의 저장용량 160MB~4GB에 불과함. (2015년 기준 안드로이드 ONE)

- 실제 가용 메모리는 256MB~400MB 정도라고 보면 된다.


결론 : 중국시장을 노린다면 200MB이내, 메모리 400MB 이내로 해결하자.



2. 최적화 요소 점검


- 유니티로 빌드할때 생성된 로그파일에서 용량별 퍼센트를 볼 수 있다. (콘솔 화면에서 open Editor Log)

- 용량이 큰 파일부터 최적화요소를 점검하자



3. 폴더 필더링


- 유니티는 Assets 폴더 내의 폴더명으로 빌드에 반드시 포함할 것을 구분한다. 폴더의 네이밍이 특히 중요하다.


폴더명

 기능

 Resources

 - 여기에 들어있는 파일은 사용 여부와 무관하게 모두 빌드에 포함된다.

 Assets\

 Editor Default Resources

 - Resources와 유사하지만, 에디터에서만 접근 가능.

 - 편집엔 필요해도 빌드에 불필요한 아틀라스 원본텍스쳐나 에디터 리소스를 보관

 Gizmos

 - Gizmos.DrawIcon을 위한 아이콘과 텍스쳐 모음 폴더. 에디터 전용 폴더로 빌드 제외.

 .으로 시작하는 폴더

 - .으로 시작하는 폴더는 무시

 Editor

 - Unity Editor Scription API만 접근할 수 있는 폴더. 

 - UnityEditor 네임 스페이스를 사용하는 스크립트는 이 폴더에 있어야 함.

 - 빌드에 포함되지 않고 에디터 상에서만 동작

 - 동명의 폴더가 여기저기 있어도 모두 동일하게 동작

 Standard Assets

 - 이 폴더 하위의 스크립트는 최우선 컴파일 

 Plugins

 - Native 플러그인은 이 폴더에 있어야 함

 - 이 폴더의 파일은 모두 빌드에 포함

 - 이 폴더 내의 스크립트는 먼저 컴파일

 




4. 텍스쳐 최적화


[ size ]

- 모바일에서 최대 사이즈는 4K를 지원하지만, 저가 안드로이드는 2K 까지 지원한다. 언제나 2K를 유지하자!

- 축소 시 원본 훼손이 안되도록 항상 2배 수로 축소

- 소스 자체는 언제나 크게만들고 유니티 자체로 크기를 축소하면 된다! 이 방법이면 고사양 버전 제작시 재작업 불필요


[ Alpha ]

- 알파를 쓰느니 폴리곤 갯수를 늘리는게 훨씬 좋다.

- ETC1 등을 사용할 경우 아티펙트로 경계 노이즈가 발생


[ Atlas ] 

- 호출 빈도 등에 따라서 쓸모없는 메모리를 들고 있어야 하는 경우가 있다.


#. 유니티 Quality Setting에서 메모리상 텍스쳐 해상도를 전체 1/2로 하는 기능도 있다. 이를 기기 성능에 맞춰서 원활한 플레이를 하는 방법!



5. 소스 최적화


[ POT ]

- 가능한 모든 텍스쳐를 POT 규격으로 제작. POT가 불가능한 리소스는 텍스쳐 아틀라스로 패킹.

- NPOT 리소스는 압축 텍스쳐가 불가능하다 = 용량 증가


[ Alpha ]

- ETC1은 alpha가 없는 텍스쳐 포멧이다. 알파가 존재할경우 유니티는 RGBA16으로 변환한다.

- ETC1을 두 장 사용해서 alpha문제를 해결 (로딩빠르고, 용량적고, 메모리도 적게먹는다!)

- 하지만 쉐이더/로딩 코드를 수정해야 된다. 드로우 콜 증가. (직접 쉐이더 코드를 수정하지 못하면 사용 못함!)



6. 텍스쳐 포멧(유형)


[ 어떤 포멧으로 import 할까? ]

- 유니티 엔진은 어떤 텍스쳐라도 넣을 수 있고, 어떤 텍스쳐포멧을 넣던 유니티에서 한번 더 변환한다.

- PNG 압축사이트에서 압축해서 쓰세요! 이러는건 PNG를 유니티 변환하지않고 우회해서 사용할 때의 얘기다.

- 어차피 압축을 다시 하기때문에 무조건 가장 품질 좋은 것을 넣으면 된다! (프로젝트파일 용량걱정만 없다면!)


[ Format 설정 ]

- Format 쪽에 가보면 Compressed, 16 bits, Truecolor 3가지가 있다. 이 외의 것을 하면 안돌아가는 기기가 있다!

- 만약 사용자 앱이지원되지않는 텍스쳐압축을 사용할 경우 그 텍스쳐는 RGBA32무압축(엄청난용량!)으로 메모리손실


설정 값 

설명 

 Compressed 

 기본 설정 값. 압축효과 가성비 높음. 알파가 있을 때는 차라리 알파없는 텍스쳐 한장을 더 쓴다.

 16Bit

 압축하지 않고 색상만 줄어든다. TA가 없다면 사용하지 말 것.

 TrueColor

 압축을 전혀 하지않음. UI에만 사용해야한다. 알파가 있다면 어쩔 수 없는 선택.

 


[ 세부 Format 설정]

- 알파 필요없는데 PNG등으로 들여오면 RGBA로 임포트가 되버린다.

- 아 물론 알파채널을 스펙큘러등으로 쓰는경우 (Toony Pro의 스펙큘러 등)은 그냥 RGBA로 써야된다!

- Texture가 아니라 Advanced를 선택하면 세부 설정을 지정할 수 있다.


종류

 사용해야하는 포멧

 POT전용 - 직사각형O 

 RGB Compressed ETC 4 bits

 POT전용 - 직사각형O

 RGB Compressed PVRTC 2 bits 

 RGBA Compressed PVRTC 2 bits 

 RGB Compressed PVRTC 4 bits 

 RGBA Compressed PVRTC 4 bits 

 NPOT

 RGB 16 bit

 RGB 24 bit

 RGBA 16 bit

 RGBA 32 bit 

 


 

- Texture가 아니라 Advanced로 선택한 뒤, RGB Compressed ETC 4 bits를 선택하자. ( 무려 2배차이 ! )

- Quality는 100으로 하면 약간의 딜레이가 발생하지만 더 품질이 손상없어짐!


[ 결론 ]

- 알파가 없다면 일단 Compressed를 사용하자!

- 알파가 존재하는 UI라면 TrueColor를, 그 외의 것이라면 차라리 알파 없는 것을 하나 더 써서 마스킹을 하시길.



7. UGUI 최적화


[ Draw Call ]

- 유니티 UI의 드로우 콜은 캔버스 단위로 이루어진다. 

- 하나의 캔버스 하위에 쓰이는 이미지들이 Sprite Packing이 되어있다면, 모두 하나의 드로우콜로 처리가 가능하다.

- 동적으로 반응하는 버튼이나 Fill Image를 처리할 때 매번 갱신비용이 발생하기 때문에, UI요소들을 하나의 Canvas에 몰아넣는 것만이 좋은 것이 아니다.


[ Text ]

- 텍스트는 Font 종류당 하나씩 드로우 콜이 발생한다.




8. FBX 최적화


[ Model ]


 

- Mesh Compression은 기본적으로 꺼져있는 상태지만, 모양이 뭉개지지 않는 범위내에서 최대값을 선택한다.

  (왼쪽이 OFF, 오른쪽이 High 상태인데... 사실 뭔가 인지못할정도로! 바뀐다)

- Materials의 Import Material은 체크해제한다.


[ Animations ]

- 애니메이션이 포함되어 있지 않다면 체크해제한다.




9. 사운드 최적화


- 사운드는 디폴드 값으로 3D 스테레오 사운드로 설정되는데, 사실 모바일 게임에서는 스테레오는 의미없음.

- Force to Mono를 체크함

- Load Type은 메모리에 영향을 주는데 사운드 유형에 따라서 설정한다.


 유형

사용처 

 Decompress on load

 짧은 효과음

 Compressed in memory

 성우 대사 정도의 음성 

 Stream

 계속 플레이되는 긴 배경음악 

 



 

728x90
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침