Unity 메모리 관리 및 배칭(Batching)

2024. 12. 23. 21:32Unity

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 BatchingDynamic 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. 메모리 관리와 배칭의 통합 활용

효율적인 메모리 관리와 배칭은 게임의 성능을 극대화합니다.

  1. 메모리 사용량을 줄여 GC 호출을 최소화.
  2. 배칭을 통해 Draw Call 수를 줄여 렌더링 성능 향상.
  3. Profiler와 Frame Debugger를 사용해 최적화 상태를 지속적으로 점검.

7. 요약

  • 메모리 관리는 게임이 부드럽게 실행되도록 보장하며, Profiler를 사용해 문제를 추적하세요.
  • 배칭 기법(Static, Dynamic, GPU Instancing)을 사용해 Draw Call을 줄이세요.
  • 두 기술을 통합적으로 활용해 높은 퍼포먼스와 낮은 메모리 소비를 동시에 달성하세요.