2016
04.17

이전 글 링크


 

2016/04/12 - [Unity/최적화] - 유니티 최적화 : 배칭과 드로우콜

2017/10/03 - [Unity/최적화] - 유니티 스프라이트 UI 최적화 / Unity Sprite UI Optimize

2017/05/21 - [Unity/이펙트] - 이펙트 드로우 콜에 대하여

2016/12/04 - [Unity/최적화] - Unity 파티클 시스템 최적화에 관해

2016/07/14 - [Unity/최적화] - 유니티 최적화 : 배경제작, 모듈화냐 컴바인이냐

2016/07/14 - [Unity/최적화] - 유니티 최적화 : 메쉬의 정점갯수 최적화

2015/12/03 - [Unity/그래픽] - [SlideShare] 유니티 최적화 테크닉 총정리

 


 

※ 본 문서는 NDC 2015 띵소프트의 이득규님의 강연을 바탕으로 정리한 문서입니다.

삼국지조조전 Online의 unity3D 아트 리소스 최적화 기법들 : 링크

Unity 성능개션옵션(출처불명인데 엄청 좋은내용) : 링크 

게임 개발 포에버 : http://www.gamedevforever.com/333 / http://www.gamedevforever.com/332

 

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  계속 플레이되는 긴 배경음악 

 

 

 

 

 

 

 

COMMENT