Unity 메모리 관리 및 배칭(Batching)
2024. 12. 23. 21:32ㆍUnity
Unity 메모리 관리 및 배칭(Batching) 이해
Unity에서의 성능 최적화는 게임 개발의 핵심 과제 중 하나입니다. 특히, 메모리 관리와 배칭(Batching)은 부드러운 게임 플레이 경험을 제공하는 데 필수적인 요소입니다. 이번 포스팅에서는 Unity의 메모리 관리 기법과 배칭의 개념 및 활용 방법을 살펴보겠습니다.
1. Unity 메모리 관리의 중요성
메모리 관리는 게임이 적절한 메모리를 사용하도록 조정하여 성능 문제를 방지하는 작업입니다.
잘못된 메모리 관리로 인해 발생할 수 있는 문제:
- 메모리 누수: 더 이상 사용하지 않는 데이터가 메모리에 남아 있는 경우.
- GC(Garbage Collection) 과부하: 불필요한 메모리 해제가 많아 프레임 드롭 발생.
2. 메모리 관리 기법
1) 메모리 사용 추적
Unity의 Profiler를 사용해 메모리 사용 현황을 추적하세요.
- Unity Profiler에서 Memory 탭을 열어 오브젝트, 텍스처, 메쉬, 오디오 클립의 메모리 사용량을 확인.
- 스크립트 메모리는 Mono Behaviour와 관련된 데이터를 보여줍니다.
2) 텍스처 및 오브젝트 관리
- 텍스처 압축: 텍스처의 해상도를 낮추거나 압축 형식을 사용하세요.
- 오브젝트 풀링(Object Pooling): 자주 생성 및 파괴되는 오브젝트를 재사용해 메모리 할당을 줄입니다.
- 불필요한 리소스 해제: Resources.UnloadUnusedAssets()를 호출해 사용하지 않는 리소스를 메모리에서 해제.
3) 스크립트 최적화
- 할당 최소화: new 키워드를 과도하게 사용하지 말고, 기존 객체를 재사용하세요.
- GC 호출 줄이기: 큰 데이터 배열은 미리 할당하고, 매 프레임 재할당을 피하세요.
3. 배칭(Batching)이란?
배칭(Batching)은 여러 오브젝트의 렌더링 작업을 묶어 처리하여 CPU와 GPU의 부하를 줄이는 기술입니다.
- Draw Call: GPU가 화면에 오브젝트를 렌더링하는 요청.
- 배칭을 사용하면 Draw Call 수를 줄여 성능을 최적화할 수 있습니다.
4. Unity에서의 배칭 종류
Unity는 Static Batching과 Dynamic Batching, GPU Instancing을 제공합니다.
1) Static Batching
- 특징: 움직이지 않는 정적 오브젝트를 하나의 메쉬로 결합해 배칭.
- 활용법:
- Inspector에서 Static 체크박스 활성화.
- 정적 환경 오브젝트에 적합 (예: 건물, 나무).
- 장점: CPU 사용량 감소.
- 단점: 메모리 사용량 증가.
2) Dynamic Batching
- 특징: 소형, 동일한 쉐이더를 사용하는 오브젝트를 한 번에 처리.
- 활용법:
- 오브젝트 크기와 Vertex 수가 작아야 함 (300개 이하).
- 동적으로 움직이는 오브젝트에 적합.
- 장점: Draw Call 감소.
- 단점: CPU 부하 증가 가능.
3) GPU Instancing
- 특징: 동일한 메쉬를 공유하는 오브젝트를 GPU에서 한 번에 처리.
- 활용법:
- Material에서 Enable GPU Instancing 체크 활성화.
- 적합 예: 동일한 나무 모델을 대량으로 배치.
- 장점: 메모리 절약 및 GPU 부하 감소.
- 단점: 복잡한 쉐이더는 효과 감소.
5. 배칭 최적화 사례
예시 1: Static Batching 적용
GameObject building = GameObject.Find("Building");
building.isStatic = true; // 정적 오브젝트로 설정
예시 2: GPU Instancing 활용
Material treeMaterial = Resources.Load<Material>("TreeMaterial");
treeMaterial.enableInstancing = true; // GPU Instancing 활성화
예시 3: Draw Call 확인
- Stats 패널을 통해 현재 Draw Call 수를 확인하고 최적화 목표를 설정하세요.
6. 메모리 관리와 배칭의 통합 활용
효율적인 메모리 관리와 배칭은 게임의 성능을 극대화합니다.
- 메모리 사용량을 줄여 GC 호출을 최소화.
- 배칭을 통해 Draw Call 수를 줄여 렌더링 성능 향상.
- Profiler와 Frame Debugger를 사용해 최적화 상태를 지속적으로 점검.
7. 요약
- 메모리 관리는 게임이 부드럽게 실행되도록 보장하며, Profiler를 사용해 문제를 추적하세요.
- 배칭 기법(Static, Dynamic, GPU Instancing)을 사용해 Draw Call을 줄이세요.
- 두 기술을 통합적으로 활용해 높은 퍼포먼스와 낮은 메모리 소비를 동시에 달성하세요.
'Unity' 카테고리의 다른 글
Unity Shader Graph 기본 사용법 (0) | 2024.12.23 |
---|---|
Unity 프로파일러를 이용한 성능 분석 및 최적화 (0) | 2024.12.23 |
Unity 오브젝트 풀링(Object Pooling) 기법 (0) | 2024.12.23 |
Unity 네트워크 기초 이론 (클라이언트-서버 구조) (0) | 2024.12.23 |
Unity 간단한 적 AI 제작 (0) | 2024.12.23 |