| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 기술면접
- 프로젝트 생성
- 스타일 지침
- 의존성 주입
- New Input System
- 이벤트 버스
- Render Mode
- github desktop
- 구글플레이콘솔
- Canvas Scaler
- Di
- C#
- 개발
- 콘솔 앱
- unity
- 데이터 형식
- 추상 팩토리 패턴
- 상태 패턴
- Dependency Injection
- 오브젝트 풀
- Abstract Factory Pattern
- Unity 기술면접
- Object Pool
- 게임 디자인 패턴
- 테이블 데이터
- event bus
- 유니티
- 구글 스프레드 시트
- MVP 패턴
- Visual Studio Installer
- Today
- Total
DevDino
[Unity 기술면접] Draw Call 관리 본문

"Draw Call은 무엇이며, Unity에서 이를 줄이기 위한 방법은 무엇인가요?"
Draw Call 관리
실습은 Unity 6.2 기준입니다.
Draw Call이란?
드로우콜(Draw Call)은 CPU가 GPU에게 "이 오브젝트를 화면에 그려라"하고 명령을 한 번 전달하는 호출 단위입니다.
오브젝트를 그리려면 해당 오브젝트의 메쉬(Mesh) 정보뿐만 아니라, 어떤 질감과 색상을 가졌는지 나타내는 재질(Material)과 텍스처(Texture) 정보가 필요합니다. 하지만 GPU는 구조상 한 번에 하나의 재질과 하나의 텍스처만 처리할 수 있습니다.
따라서 화면에 그릴 오브젝트들의 재질이나 텍스처가 서로 다르면, GPU는 설정을 매번 새로 바꿔야 합니다. 이 설정 변경 명령을 SetPass Call이라고 하며, 이 과정에서 Draw Call이 늘어나 CPU와 GPU 모두 심각한 성능 저하(오버헤드)를 유발하게 됩니다.
Draw Call이 많아지는 주요 원인
- 오브젝트마다 다른 재질(Material) 사용할 때
- 투명 쉐이더(Transparent)나 복잡한 UI 요소가 많을 때
- Sprite Atlas로 묶이지 않은 개별 텍스처를 사용할 때
Draw Call 줄이는 방법
Unity에서 Draw Call을 줄이는 가장 기본적이고 확실한 방법은 "하나로 묶어서 한 번에 넘겨주는 것(Batching)입니다.
1. Sprite Atlas 사용 (2D/UI)
Unity의 배칭 조건은 '동일한 재질 + 동일한 텍스처'입니다. 여러 개의 스프라이트를 하나의 큰 텍스처 맵으로 합쳐주는 Sprite Atlas를 활용하면 드로우콜을 획기적으로 줄일 수 있습니다.
실습 예시

파츠가 분리된 여러 스프라이트를 그대로 배치하면, 각 파츠마다 개별 텍스처를 인식하여 렌더링하기 때문에 Batch(Draw Call) 수가 46까지 증가합니다.
Sprite Atlas 적용 후
Create>2D>Sprite Atlas로 아틀라스를 생성하고 Objects for Packing에 분리된 파츠 스프라이트들을 넣어 패킹(Packing)합니다.

모든 파츠가 하나의 텍스처를 공유하게 되고 Batch 수가 46 → 13으로 크게 감소한 것을 확인할 수 있다.
주의점
아틀라스로 텍스처를 묶었더라도, 오브젝트들이 서로 다른 Material을 사용하면 배칭이 불가능하므로 반드시 재질을 통일해 주어야 합니다.
2. 최신 Unity(URP) 배칭 기술 활용
최신 URP(Universal Render Pipeline) 환경에서는 프로젝트 특성에 맞춰 아래 기법들을 적극적으로 활용해야 합니다.
- Static Batching(정적 배칭): 움직이지 않는 배경 오브젝트들을 하나의 거대한 메쉬로 병합하여 Draw Call을 줄입니다.
Inspector 창 우측 상단의 Static 체크박스를 켜는 것만으로 간단히 적용됩니다.
- SRP Batcher(셰이더 기반 최적화): 최신 Unity 환경의 핵심 기능입니다. 재질(Material)이 다르더라도 '동일한 Shader(셰이더)'를 사용한다면, GPU의 데이터 바인딩 속도를 극한으로 끌어올려 무거운 연산인 SetPass Call 오버헤드를 획기적으로 줄여줍니다.(URP Asset 설정에서 활성화 가능)
- GPU Instancing: 완전히 동일한 메쉬와 재질을 가진 오브젝트가 화면에 수십, 수백 개 존재할 때(예: 배경의 풀/나무, 총알, 떼지어 오는 몬스터 등) 단 한 번의 Draw Call로 묶어 그리는 기술입니다. 재질의 인스펙터 창 하단에서 Enable GPU Instancing을 체크하여 적용합니다.
참고
과거에는 움직이는 오브젝트를 묶기 위해 Dynamic Batching을 자주 썼지만, 최근 URP 환경에서는 이를 묶기 위한 CPU 연산 비용이 오히려 더 커 성능을 떨어뜨릴 수 있습니다. 따라서 최신 버전에서는 Dynamic Batching 대신 SRP Batcher와 GPU Instancing을 우선적으로 활용하는 추세입니다.
3. Draw Call 확인 방법
개발 도중 성능 저하가 의심된다면 Unity가 제공하는 아래 툴을 통해 수시로 원인을 파악해야 합니다.
- Stats 창: Game 뷰 상단의 Stats 버튼을 누르면 실시간으로 확인할 수 있습니다. 여기서 Batches 수치가 드로우콜 횟수를 의미하며, SetPass Calls 수치도 함께 낮게 유지되는지 확인해야 합니다.
- Profiler(프로파일러): Window > Analysis > Profiler를 통해 CPU/GPU 병목 구간을 타임라인 형태로 정밀하게 분석할 수 있습니다.
- Frame Debugger(프레임 디버거): Window > Analysis > Frame Debugger를 켜면, 실시간으로 화면의 오브젝트들이 어떤 순서로(어떤 Draw Call을 통해) 그려지는지 한 단계씩 캡처하여 보여줍니다. 배칭이 왜 깨졌는지 원인을 직접 눈으로 확인할 수 있는 가장 강력한 디버깅 툴입니다.
UI Canvas 구조 최적화와 CPU 오버헤드
UI를 구성하는 Canvas 역시 Draw Call과 밀접한 연관이 있지만, 더 중요한 렌더링 동작 원리가 숨어 있습니다.
UI Canvas 내의 요소가 단 하나라도 위치, 크기, 텍스트 등이 변경되면, Canvas는 UI를 다시 그리기 위해 픽셀들을 재조합하는 정점 데이터 계산(Canvas Rebuild) 과정을 거칩니다. 이는 단순히 Draw Call이 늘어나는 문제보다, CPU 쪽에 순간적인 렉(스파이크)을 유발하는 주 원인이 됩니다.
최적화 팁
움직이지 않는 정적 UI(배경 패널, 타이틀 텍스트 등)와 자주 바뀌는 동적 UI(체력 바, 타이머, 골드 텍스트 등)를 별도의 서브 캔버스로 분리해야 합니다. 이렇게 분리하면 동적 UI가 갱신될 때 정적 UI까지 헛되이 재계산되는 막대한 CPU 연산 낭비를 막을 수 있습니다.
요약
- Draw Call은 CPU가 GPU에게 내리는 렌더링 명령 단위이며, 많아질수록 하드웨어에 부담을 준다.
- 2D 및 UI 환경에서는 Sprite Atlas를 통해 텍스처를 묶고 재질을 통일하는 것이 필수이다.
- URP 환경에서는 Static Batching, SRP Batcher, GPU Instancing을 상황에 맞게 켜주는 것이 최적화의 핵심이다.
- UI 성능 저하는 Draw Call 외에도 Canvas Rebuild로 인한 CPU 부담이 크므로, 정적/동적 Canvas 분리 구조를 설계해야 한다.
'Unity > 기술면접' 카테고리의 다른 글
| [Unity 기술면접] UGUI vs UI Toolkit (0) | 2025.12.24 |
|---|---|
| [Unity 기술면접] 메서드 Override와 Overload (0) | 2025.12.22 |
| [Unity 기술면접] Prefab과 Scene 관리 (0) | 2025.12.17 |
| [Unity 기술면접] GameObject와 Component의 관계 (0) | 2025.12.15 |
| [Unity 기술면접] 객체지향 프로그래밍의 4대 원칙 (0) | 2025.12.11 |