최적화하는 방법을 검색할때마다 항상 나오는 Batching에 대해 알아보자
Frame이란
게임에서의 1프레임은 화면이 한 번 그려지는 주기를 말한다. 그래서 흔히 말하는 FPS(Frane Per Second)는 초당 몇 번 화면을 갱신하는 가를 말한다. 예를 들어 60FPS라면 1초에 60번 화면을 그리는 것이다.
즉 매 프레임마다 Unity는 여러 작업을 반복 수행하며 게임을 진행한다는 뜻이다.
게임 루프 = 프레임 반복
Unity에서는 매 프레임마다 아래와 같은 사이클이 진행된다.
1. Awake() // 최초 생성 시 1번
2. OnEnable() // 활성화되자마자
3. Start() // 첫 프레임 전에 1번
4. Update() // 매 프레임
5. FixedUpdate() // 고정 간격마다
6. LateUpdate() // Update 이후
01 Awake
오브젝트 생성 되고 활성화될때 바로 호출, 오브젝트가 재생성되지 않는 한 한번만 호출된다. 보통 내부 변수 설정에 사용된다.
02 OnEnable
오브젝트/컴포넌트가 활성화 될때마다 호출된다. 비활성화 후 다시 켜져도 매번 호출된다. 그러므로 SetActive가 다시 true가 되면 다시 호출된다.
03 Start
첫 프레임 전에 한 번 호출된다. 오브젝트가 활성 상태여야 호출된다. 보통 타 컴포넌트나 오브젝트 접근에 자주 활용된다.
04 Update
매 프레임 마다 호출되므로 FPS에 따라 호출 빈도가 달라진다. 보통 입력, UI, 일반 로직에 사용된다
05 LateUpdate
Update에서 처리된 결과를 기준으로 동작해야할 경우에 사용된다.그래서 보통 카메라 위치 갱신이나 후처리 로직에 활용된다.
06 FixedUpdate
정해진 시간 간격(기본 0.02초마다)으로 호출되며 물리 연산(Rigidbody, Force등)에 사용된다. Update와 달리 프레임의 영향은 받지 않는다.
Frame과 Rendering의 관계
하나의 Frame = 입력받고, 게임 로직 실행하고, 렌더링까지 마치는 하나의 사이클이다. FPS가 60이면 1초에 60번 이 사이클이 돌아가는 것이다.
1. Awake() // 최초 생성 시 1번
2. OnEnable() // 활성화되자마자
3. Start() // 첫 프레임 전에 1번
4. Update() // 매 프레임
5. FixedUpdate() // 고정 간격마다
6. LateUpdate() // Update 이후
7. 렌더링(Redering) // GPU로 명령이 넘어간다.
렌더링이란?
CPU에서 계산한 결과를 GPU가 실제로 그리는 작업이다. 이때 오브젝트마다 Draw Call이 발생한다.
Draw Call이란?
간단히 말해서 "그려줘!"라고 GPU에게 명령하는 것이다. 하나의 오브젝트, Material마다 기본적으로 하나의 Draw Call이 발생한다.
만약 Draw Call이 많아진다면?
CPU에서 GPU로 보내는 렌더링 명령수가 많아져서 병목이 생기고 결과적으로 프레임 드랍(프레임이 늦게 그려져서 화면이 끊기는 현상), 발열, 배터리 소모 같은 성능저하가 발생한다.
Draw Call을 줄이는 방법
1. 같은 Material 재활용
2. 불필요한 Shader 옵션 줄이기
3. 움직이지 않는 오브젝트는 Static으로 설정
4. GPU Instancing 체크
5. SpriteAtlas로 2D 텍스쳐 묶기
Unity에서 Draw Call 확인 방법
01 Stats창 보기
Game 뷰 → Stats 버튼 → Draw Calls, Batched 확인 가능
02 Frame Debugger
각 오브젝트가 어떻게 렌더링되고 있는지, 배칭이 되었는지 확인 가
Window > Analysis > Frame Debugger
Batching 이란?
여러개의 Draw Call을 하나로 묶어주는 기술이다. 비슷한 오브젝트들끼리 묶어서 GPU에게 한 번에 처리해달라고 요청하는 것이다.
예를 들어 "돼지 100마리를 그냥 한 번에 그려줘!"라고 한다면 Draw Call을 한 번만 부르면 되는까 리소스가 제한된 환경에서는 좋은 최적화 기법이다. 하지만 돼지들의 Material이 다른 경우에는 사용할 수 없다.
Batching의 종류
01 Static Batching
움직이지 않는 오브젝트끼리 미리 병합하는 것이다. ex) 건물, 배경 오브젝트등
02 Dynamic Batching
움직이는 작은 오브젝트들을 실시간으로 묶는 것이다. ex) 총알, 코인 등
03 GPU Instancing
동일한 매쉬 + 머티리얼을 가진 오브젝트를 GPU가 복제 처리 ex) 돼지 100마리 같은 반복 오브젝트
'유니티 공부 > Unity' 카테고리의 다른 글
Unity - 점과 직선사이의 거리를 구해보자(벡터 투영 공식 활용) (0) | 2025.04.10 |
---|---|
Unity - Unity 개발자가 왜 C++을 알아야할까? (0) | 2025.04.08 |
Unity - 쉐이더 분홍색(핑크색) 오류 해결 방법 (1) | 2025.03.13 |
Unity - 에셋 추천 Trails FX(잔상 효과, 검 효과, 발자국 등) (0) | 2025.03.12 |
Unity - DOTween을 사용해서 움직임 및 변화를 쉽게 구현해보자 (0) | 2025.03.07 |
댓글