[펌] 메모리 최적화 꿀팁
Unity3D/Tips / 2023. 4. 12. 14:41
성능이 한정된 기기에서 실행되는 애플리케이션의 충돌을 방지하려면 메모리 최적화가 반드시 필요합니다. 여러 기기를 대상으로 출시하려는 경우, 각 플랫폼에서 최고의 성능을 끌어내기 위해 메모리 사용량을 조정해야 할 수도 있습니다.
메모리에 영향을 끼치는 요소는 매우 다양하지만, 그 중에서도 에셋을 중심으로 메모리를 효율적으로 관리할 수 있도록 지원하는 Unity 툴과 최적화할 수 있는 방안에 대해 소개합니다.
제공: 오지현 에반젤리스트, 2023년 2월
1. 메모리 프로파일러 모듈
빌트인 프로파일러 모듈로, 애플리케이션이 메모리를 사용하는 위치에 대한 기본 정보를 제공합니다.
메모리 프로파일러 모듈은 애플리케이션에 할당된 전체 메모리를 나타내는 카운터를 시각화합니다. 메모리 모듈을 사용하여 로드된 오브젝트의 수와 카테고리 별로 해당 오브젝트가 차지하는 메모리 양과 같은 정보를 볼 수 있습니다.
2. Memory Profiler 1.0 (필수)
2. Memory Profiler 1.0 (필수)
Unity 애플리케이션 및 Unity 에디터의 메모리 사용량을 검사하는 데 사용할 수 있는 도구로, 어떤 에셋이 메모리를 사용하고 있는지 애플리케이션의 메모리 할당에 대한 정보를 자세하게 확인할 수 있습니다. 특히 Unity 에디터에 메모리 프로파일러 창을 추가하여 메모리 스냅샷을 캡처, 검사 및 비교할 수 있습니다.
Unity 패키지 관리자를 통해 다운로드하고 메모리를 최적화할 수 있습니다.
▶ Memory Profiler 1.0.0 관련 블로그 아티클 보기
3. Unity Addressables
▶ 어드레서블 에셋 시스템으로 메모리 최적화하기 블로그 아티클 보기
4. Audio / Sound 설정
5. Mesh
Mesh 데이터 관리를 통해 메모리를 최적화할 수 있습니다.
Read / Write Enabled 옵션은 CPU와 GPU메모리 양측에 존재하여 옵션을 OFF하는 것이 좋습니다.
6. 셰이더 배리언트
7. TextMesh Pro
Unity 패키지 관리자를 통해 다운로드하고 메모리를 최적화할 수 있습니다.
▶ Memory Profiler 1.0.0 관련 블로그 아티클 보기
3. Unity Addressables
Unity Addressables는 복잡한 라이브 콘텐츠를 전달해야 하는 대규모 제작팀의 요구사항을 보다 효과적으로 지원하기 위한 Unity 에디터 및 런타임 에셋 관리 시스템입니다.
Unity Addressables을 활용해 불필요한 에셋의 로드를 방지하는 약한 참조를 도입하여 런타임 메모리를 개선할 수 있습니다.
▶ 어드레서블 에셋 시스템으로 메모리 최적화하기 블로그 아티클 보기
4. Audio / Sound 설정
[Force to Mono]
오디오의 스테레오 정보를 없애고 Mono로 만드는 만큼 용량이 줄어듭니다. 특히 모바일에서는 스테레오로 설정할 일이 드물어 추천 드립니다.
[읽기 방식(Load type)]
사운드가 어떤 성격인지에 따라 로드 타입과 포맷을 설정하는 것을 추천 드립니다.
[권장 압축 형식(Compression Format)]
[권장 압축 형식(Compression Format)]
● Unity는 하드웨어 가속이 아닌 소프트웨어로 오디오 디코딩을 처리하고 있어 안드로이드/iOS 구분 없이 사용할 수 있는 Vorbis 타입을 권장합니다.
● 매우 짧은 클립의 경우 ADPCM 포맷을 권장 드립니다.
※ 오디오는 음소거(Mute) 상태여도 메모리에는 존재하고 있어 선택 옵션이 아니라면, 지우는 것을 권장합니다.
5. Mesh
Mesh 데이터 관리를 통해 메모리를 최적화할 수 있습니다.
Read / Write Enabled 옵션은 CPU와 GPU메모리 양측에 존재하여 옵션을 OFF하는 것이 좋습니다.
6. 셰이더 배리언트
하나의 셰이더라도 여러 조건에 따라 수많은 바이너리로 파생되어 빌드 시간, 패키지 사이즈는 물론 메모리까지 영향을 줄 수 있습니다.
셰이더 배리언트의 개념부터 이슈 발생 원인, 최적화하는 방법으로 메모리를 최적화해 보세요.
7. TextMesh Pro
시각적 품질을 크게 개선할 뿐만 아니라 텍스트 스타일 지정 및 텍스처링 부문에서 사용자에게 뛰어난 유연성을 선사하는 TextMesh Pro
특히 한글은 초성+중성+종성 조합 방식으로 11,000자가 넘는 글자를 텍스트 아틀라스와 텍스처로 제작한다면 메모리가 커질 수 밖에 없습니다. 메모리 최적화를 위해 사용 시 여러 테스트를 통해 제작하는 것을 권장합니다.
8. 메모리에 영향을 주는 텍스처
텍스처 에셋의 화질이 높을수록 픽셀당 비트가 더 높으며, 그에 따라 빌드 크기, 로드 시간, 런타임 메모리 사용량이 늘어납니다.
기기에서 지원하지 않는 포맷 사용 시 압축이 풀리기 때문에 기기별 지원하는 텍스처 포맷을 사용하는 것이 좋습니다. 모바일에서는 ASTC 형식을 사용하는 것을 권장합니다. (타겟 디바이스에 따라 상이)
[Mipmap]
Mipmap(밉맵)은 3D 그래픽스에서 텍스처를 적용하는 과정에서 렌더링 속도를 가속화하기 위해 축소한 비트맵 이미지의 집합으로, 카메라로부터의 거리에 따라 달라질 수 있습니다.
Mipmap 사용 시 원래 텍스처보다 33.3333%의 메모리가 증가합니다. 2D 맵에서는 원근법이 필요하지 않기 때문에 Off를 하는 것이 좋습니다.
[Scene Loading]
9. 메모리 최적화에 도움이 되는 Unity 가이드
8. 메모리에 영향을 주는 텍스처
대부분의 게임에서는 텍스처로 인한 메모리 이슈가 발생합니다.
[Baked Lighting]
Lightmap, Light Probe, Reflection Probe와 같은 조명 설정으로도 메모리 문제가 발생할 수 있습니다. 메모리에 영향을 주는 요소로 적절하게 사용하는 것이 좋습니다.
● Lightmap은 배경, 건물과 같은 스태틱 오브젝트에 라이트 결과를 미리 적용하여 저장하기 때문에 텍스처 메모리 이슈가 발생할 수 있습니다.
● Reflection Probe는 6면의 큐브로 만들어진 텍스처로, 텍스처 6개가 생성됩니다. 그에 따라 메모리 이슈 발생 가능성이 큽니다.
가능한 시각 효과 대비 사이즈를 작게 제작하고, 적절한 압축 형식을 사용하는 것을 권장합니다.
[텍스처 압축]
[텍스처 압축]
텍스처 에셋의 화질이 높을수록 픽셀당 비트가 더 높으며, 그에 따라 빌드 크기, 로드 시간, 런타임 메모리 사용량이 늘어납니다.
기기에서 지원하지 않는 포맷 사용 시 압축이 풀리기 때문에 기기별 지원하는 텍스처 포맷을 사용하는 것이 좋습니다. 모바일에서는 ASTC 형식을 사용하는 것을 권장합니다. (타겟 디바이스에 따라 상이)
[Mipmap]
Mipmap(밉맵)은 3D 그래픽스에서 텍스처를 적용하는 과정에서 렌더링 속도를 가속화하기 위해 축소한 비트맵 이미지의 집합으로, 카메라로부터의 거리에 따라 달라질 수 있습니다.
Mipmap 사용 시 원래 텍스처보다 33.3333%의 메모리가 증가합니다. 2D 맵에서는 원근법이 필요하지 않기 때문에 Off를 하는 것이 좋습니다.
[Scene Loading]
Scene 전환 시 기존 Scene A 의 데이터가 남아있는 상황에서 추가적으로 Scene B의 데이터를 로드할 경우 순간적으로 메모리에 과부하가 발생할 수 있습니다.
9. 메모리 최적화에 도움이 되는 Unity 가이드
[출처]
반응형
'Unity3D > Tips' 카테고리의 다른 글
[펌] [Android] Tips to reduce android build times. (0) | 2023.08.29 |
---|---|
[Unity] dll 등 import 후, Revert Factory Settings 무한루프에 빠질 때 (0) | 2023.08.23 |
AssetPostprocessor_Audio(Audio 최적화 설정 셋팅) (0) | 2023.04.05 |
[펌] Preload Audio Data & How Unity Decides Which Audio Assets to Load to a Scene (0) | 2023.04.05 |
[펌] AudioImporter에서 Force to mono를 사용하도록 설정하면서 Normalize 만 사용하지 않도록 설정 (0) | 2023.04.05 |