DrawCall 이란?
-그려야할 데이터를 가지고 있는 CPU가 GPU에게 그려달라는 요청을 하는것
SetPass Call
- Matarial,Shader 함께 묶어 놓은 그룹을 SetPass라 하며 그걸 CPU가 GPU에게 넘기는것을 Batch라고함

Tip
- 최대한 Batch수를 줄여서 최적화를 할수있다.
- Frame Debuger를 통해 DrawCall을 확인할수있다.
최적화 방법들
1. 동적 배칭(Dynamic Batching)
- 동적으로 움직이는 오브젝트들끼리 Batching 하는 기능
- 동일한 머테리얼을 사용하고 특정 조건들을 만족하는 다이나믹 오브젝트들은 자동으로 배칭이 이루어짐
- Sprite Render는 기본적으로 Batching 대상이며 Sprite Atlas로 편리하게 Batching 가능하다.
- 정점 속성을 900개 이상을 가지거나 225개 이상의 정점을 포함하는 메시에는 적용 불가능함
- 다이나믹 오브젝트는 매 프레임 씬에서 Vertex들을 모아서 합쳐주는 과정을 거치고 다이나믹 배칭에 쓰이는
Vertex buffer와 Index buffer에 담으면 GPU는 이를 가져가서 렌더링 한다 (매 프레임 마다 오버헤드 발생)
2. 정적 배칭(Static Batching)
- 정적인 오브젝트를 대상으로 Batching하는 기능 런타임에서 버텍스 연산을 하지않아서 효율적
- 메시의 폴리곤 수에 상관 없이 같은 머테리얼을 사용하는 오브젝트들을 하나의 메시로 묶는다.
- 다이나믹 배칭보다 효율적 (매프레임마다 버텍스 연산을 수행하지 않음)
- 단 합쳐진 메시를 생성하기 떄문에 추가적인 메모리가 필요함
- 합쳐진 메시를 GPU가 그대로 화면에 그리기 때문에 오브젝트 별로 드로우콜을 거치지 않고 한번에 드로우콜 처리
3. GPU인스턴싱
- GPU 메모리 버퍼에 메쉬 정보를 저장하여 추가 Draw Call 없이 렌더링하는 기법
- 적은 수의 드로우 콜을 사용하여 동일한 메시의 여러 복제본을 한번에 그리거나 렌더링이 가능하다.
- ex)씬에서 반복적으로 나타나는 건물,나무,풀등 오브젝트를 그릴 때 유용함
- GPU Instancing기능을 사용하기 위해선 쉐이더에서 해당 기능을 지원해야함(저장하는 정보는 MVP 행렬 정보이기 때문)
- 단 메모리 버퍼는 유한 하기때문에 모든 동일 오브젝트를 저장할수 없다.
'프로그래밍 > 유니티' 카테고리의 다른 글
| 텍스쳐(Texture) POT 와 NPOT (0) | 2023.12.24 |
|---|---|
| 유니티 스크립트(Script) 기본 메시지 이벤트 함수 (0) | 2023.12.09 |
| 유니티 게임 오브젝트(GameObject)와 컴포넌트(Component) 기본 (0) | 2023.12.09 |

