메모리 최적화 꿀 팁
Unity Square에서 Tip으로 소개된 메모리 최적화 꿀 팁과
작업하면서 경험한 여러가지 경험을 종합해서 정리하는 포스팅이다.
<1. 메모리 프로파일러>
<2. 프레임 디버거 사용하기>
<3. Unity Addressable >
<4. Audio / Sound 설정>
옵션 | 설명 |
Force to Mono | 오디오의 스테레오 정보를 없애고 Mono로 만드는 만큼 용량이 줄어듭니다. 특히 모바일에서는 스테레오로 설정할 일이 드물어 추천 드립니다. |
읽기 방식(Load type) | |
권장 압축 형식(Compression Format) |
Unity는 하드웨어 가속이 아닌 소프트웨어로 오디오 디코딩을 처리하고 있어 안드로이드/iOS 구분 없이 사용할 수 있는 Vorbis 타입을 권장합니다.
매우 짧은 클립의 경우 ADPCM 포맷을 권장 드립니다.
|
< 5. 불필요한 옵션 삭제 >
< Mesh>
Mesh 데이터 관리를 통해 메모리를 최적화할 수 있습니다.
Read / Write Enabled 옵션은 CPU와 GPU메모리 양측에 존재하여 옵션을 OFF하는 것이 좋습니다.
< Physics >
< 6. 압축 포맷 설정 >
압축이 가능한 항목에 대해서는 압축을 진행하자.
플랫폼 | |||||
Windows, Linux, macOS | RGB | RGB 24비트 | RGB Compressed DXT1 | RGB(A) Compressed BC7 | RGB Compressed DXT1 |
RGBA | RGBA 32비트 | RGBA Compressed DXT5 | RGB(A) Compressed BC7 | RGBA Compressed DXT5 | |
HDR | RGBA Half | RGB Compressed BC6H | RGB Compressed BC6H | RGB Compressed BC6H | |
WebGL | RGB | RGB 24비트 | RGB Compressed DXT1 | RGB Compressed DXT1 | RGB Compressed DXT1 |
RGBA | RGBA 32비트 | RGBA Compressed DXT5 | RGBA Compressed DXT5 | RGBA Compressed DXT5 | |
Android (설정 가능) | RGB | RGB 24비트 | RGBA Compressed ASTC 6x6 블록 RGB Compressed ETC2 RGB Compressed ETC |
RGBA Compressed ASTC 4x4 블록 RGB Compressed ETC2 RGB Compressed ETC |
RGBA Compressed ASTC 8x8 블록 RGB Compressed ETC2 RGB Compressed ETC |
RGBA | RGBA 32비트 | RGBA Compressed ASTC 6x6 블록 RGBA Compressed ETC2 |
RGBA Compressed ASTC 4x4 블록 RGBA Compressed ETC2 |
RGBA Compressed ASTC 8x8 블록 RGBA Compressed ETC2 |
|
iOS (설정 가능) | RGB | RGB 24비트 | RGBA Compressed ASTC 6x6 블록 RGB Compressed PVRTC 4비트 |
RGBA Compressed ASTC 4x4 블록 RGB Compressed PVRTC 4비트 |
RGBA Compressed ASTC 8x8 블록 RGB Compressed PVRTC 2비트 |
RGBA | RGBA 32비트 | RGBA Compressed ASTC 6x6 블록 RGBA Compressed PVRTC 4비트 |
RGBA Compressed ASTC 4x4 블록 RGBA Compressed PVRTC 4비트 |
RGBA Compressed ASTC 8x8 블록 RGBA Compressed PVRTC 2비트 |
|
tvOS | RGB | RGB 24비트 | RGBA Compressed ASTC 6x6 블록 | RGBA Compressed ASTC 4x4 블록 | RGBA Compressed ASTC 8x8 블록 |
RGBA | RGBA 32비트 | RGBA Compressed ASTC 6x6 블록 | RGBA Compressed ASTC 4x4 블록 | RGBA Compressed ASTC 8x8 블록 | |
Default | RGBA | RGBA 32비트 | RGBA 16비트 | RGBA 16비트 | RGBA 16비트 |
모바일의 경우 공통적으로 사용가능한(Android / iOS) ASTC 사용
Adaptive Scalable Texture Compression |
손실 블록 기반 텍스쳐 압축 알고리즘 블록 크기를 설정하여 용량 및 품질을 유연하게 설정할 수 있다. 블록 크기가 작을수록 용량이 크고, 품질이 좋아진다. 일반적으로 ETC 포맷보다 품질이 더 좋고, 압축 시간이 더 오래 걸린다. 안드로이드, iOS 모두 지원한다. 구형 기종에서는 지원하지 않을 수 있으므로 주의해야 한다. 최근 들어 모바일에서 ASTC를 사용하는 경우가 많다. |
Unity 플랫폼별 권장 기본 지원 텍스처 압축 포맷 : [링크]
< 7. TextMesh Pro >
Unity 버전이 올라가면 기존의 Text는 Legecy 로 포함되어서 결국 TextMeshPro(TMP)를 사용해야 한다.
특히 한글은 초성+중성+종성 조합 방식으로 11,000자가 넘는 글자를 텍스트 아틀라스와 텍스처로 제작한다면 메모리가 커질 수 밖에 없습니다. 메모리 최적화를 위해 사용 시 여러 테스트를 통해 제작하는 것을 권장합니다.
< 8. UI 최적화 >
UI 최적화 | 설명 |
Canvas 분할 하기 | UI의 드로우 콜 및 배칭은 캔버스 단위로 발생한다. 만약 하나의 UI에 변경사항이 발생하면 캔버스 전체가 다시 그려진다. 따라서 변경이 자주 발생하는 UI는 캔버스를 따로 분리하는 것이 좋다. |
보이지 않는 UI 비활성화하기 | UI를 화면 영역 밖으로 옮기거나, 투명도를 0으로 설정하는 경우가 있다. 이렇게 하면 보이지 않을 뿐이지, 모두 연산에 포함된다. 따라서 안보이게 하려면 비활성화하는 것이 좋다. |
그래픽 레이캐스터 제거하기 |
Graphic Raycaster 컴포넌트는 해당 게임오브젝트의 모든 자식 UI 오브젝트에 대해 그래픽 레이캐스트 연산을 수행한다. 만약 해당 캔버스에 이미지와 텍스트처럼 사용자 입력이 필요 없는 UI만 존재한다면, 제거하는 것이 좋다. |
레이캐스트 타겟 설정 해제하기 |
UnityEngine.UI.Graphic을 상속받는 UGUI 컴포넌트들에는 raycastTarget 프로퍼티가 존재한다. 인스펙터에서 체크/해제할 수 있다. 체크된 경우 그래픽 레이캐스터의 연산 대상이 되므로, 사용자 입력을 받지 않는 UI의 경우에는 해제하는 것이 좋다. |
재사용하는 오브젝트는 풀링 사용하기 | 간단하게 다 사용한 오브젝트를 다시 사용하는 개념이다. Unity ObjectPool : [링크] |
과도한 레이러링 주의 | 다수의 UI 요소를 레이어링하면(예: 카드 시합 게임에서 쌓여 있는 카드) 오버드로우가 발생합니다. 코드를 커스터마이즈하여 런타임에 레이어링된 요소를 병합하여 요소나 배치(batch)의 수를 줄이세요. |
< 9. Scene 전환을 통한 Loading 및 Scene Additive , DontDestory 사용하기 >
Scene 전환 시 기존 Scene A 의 데이터가 남아있는 상황에서 추가적으로 Scene B의 데이터를 로드할 경우 순간적으로 메모리에 과부하가 발생할 수 있습니다.
이렇게 자주 씬을 로드해야하는 경우에는 차라리 Scene Additive 옵션을 사용하거나
DontDestroyOnLoad로 삭제를 안하는 방법도 고려해 봐야한다.
결국 Scene 을 삭제하고 로드하는 과정에서 부하가 많이 생기기 때문이다.
Additive Scene | DontDestroyOnLoad |
Unity 모바일 게임 성능 최적화: 물리,UI 오디오 설정에 대한 전문가의 팁 : [링크]
Unity Tips: 메모리 최적화 꿀팁 : [링크]
[Unity -Top Paid Package]
[Unity -Top Free Package]
[Unity -New Asset Package]
★★★★★
'개발 > Unity 자료' 카테고리의 다른 글
Unity) 커스텀 디바이스 추가 하기(Custom Simulator : iPhone 14,15 Pro / etc) (12) | 2024.10.09 |
---|---|
Unity 전자책) 멀티플랫폼 게임의 성공적인 출시를 위한 5가지 원칙 (0) | 2023.08.26 |
Unity Blog)Bleak Sword DX (Demo) 모바일 게임 디자인에 대한 미니멀한 접근 방식 (0) | 2023.05.09 |
Unity) 프로그래머를 위한 워크플로 속도 향상 팁 (0) | 2023.04.30 |
댓글