참고서적 : 유니티 그래픽스 최적화 스타트업
최적화를 하다보면
드로우콜(draw call), 배치(batch), 셋 패스 콜(set pass call) 등의 용어를 접하게 된다.
드로우콜(draw call)
- 오브젝트가 실제 화면에 렌더링 되려면 CPU가 가지고 있는 정보들이 GPU에 전달 되어야한다.
- 이러한 정보들을 전달한 뒤, CPU가 GPU에 렌더링하라고 명령을 보내는 것을 드로우 콜이라 한다.
- 오브젝트의 메시 정보
- 텍스쳐 정보
- 쉐이더 정보
- 위치, 스케일 등 트랜스폼 정보
- 기타 등등..
렌더링 과정
- Storage(HDD, SSD)에 담긴 데이터를 CPU가 읽어 들이고, 파싱하여 GPU에 해당 정보들을 복사한다.
- 매 프레임 메모리에 불러오는 과정을 거친다면 과부하가 심해지니, 로딩 시점에 메모리에 데이터를 올려두고 적절한 시점에 메모리를 해제한다.
- 그려야하는 오브젝트의 정보들을 담고있는 Render State 테이블을 토대로 GPU는 메시를 그린다.
- 이러한 렌더 상태명령들을 보낸 후, CPU는 마지막으로 GPU에게 메시를 그리라는 명령을 보낸다. (DP Call)
- 이제 다른 오브젝트를 그리기 위해 렌더 상태 정보를 업데이트 해야한다.
DP Call
- '그리라는 명령을 하는 것' 만을 의미한다.
- 렌더 상태 변경 명령 + DP Call 까지 포함한 모두를 드로우 콜이라고 한다.
드로우 콜 발생 조건
- 메시가 1개, 머테리얼이 1개라면 드로우콜이 1개이다. (Batch 1)
- (배칭없이) 같은 머테리얼을 공유하는 메시가 10개라면 10개의 드로우콜이 발생한다.
(하지만, 다른 머테리얼을 사용하는 경우와 성능에 미치는 영향은 다르다!)
- 메시 한개에 멀티 머테리얼을 사용한경우, 머테리얼 갯수만큼 드로우콜이 발생한다.
배치(Batch)
- Batch는 DP Call과 상태 변경들을 합친 넓은 의미의 드로우콜이다.
SetPass
- 드로우 콜이 일어날 때 상태 변경 발생 여부, 쉐이더로 인한 렌더링 패스 수.
- 쉐이더 혹은 쉐이더의 파라미터들이 변경이 일어날 경우 SetPass카운터가 증가한다.
- 같은 쉐이더를 사용할 경우 Batch는 여러번 일어날 때 SetPass는 한번만 일어날 수 있다.
- Batch가 동일하게 10번 발생하더라도 SetPass가 1번 일어난 경우와 10번 일어난 경우는 필요한 성능이 다르다.
- 때문에 드로우콜은 하나의 지표일 뿐이지 성능에 비례한 절대적인 수치는 아니다.
- 서로 다른 메시들이 동일한 머테리얼을 사용하는 경우 -> batch 10 / SetPass 1
배칭(Batching)
- 동일한 머테리얼 인스턴스를 사용하는 메시들을 묶어서 한번에 그린다면, 드로우콜을 통합할 수 있다.
스태틱 배칭(Static Batching)
- CPU에서 지오메트리 정보를 연산해서 로딩 타임에서 별도의 메시로 합친다.
- 오브젝트를 합쳐서 내부적으로는 하나의 거대한 오브젝트로 저장하기 때문에, 여러개의 메시를 합친만큼 추가 메모리가 필요하다.
- 스태틱 배칭 상태에서도 원래의 오브젝트를 기준으로 컬링이 일어난다.
다이나믹 배칭(Dynamic Batching)
- CPU에서 지오메트리 정보를 연산해서 런타임에서 별도의 메시로 합친다.
- 런타임에서 매 프레임마다 버텍스 연산을 수행하기 때문에 오버헤드가 발생한다.
- 특정 정점 갯수이하(현재는 300개) 제한 조건이 있다.
- SkinnedMesh는 불가능하다.
GPU 인스턴싱(GPU Instancing)
- 동일한 메시의 복사본을 만들어서 드로우콜을 줄인다.
- 다이나믹 배칭과 스태틱 배칭에 비해 런타임 오버헤드가 적다.
- 별도의 메시를 생성하지않음.
- 원본 메시의 버텍스 갯수 제한은 없으나 SkinnedMesh는 불가능하다.
- OpenGL ES 3.0 이상이나 Vulkan, Metal에서만 가능하다.
'🛡️ 기술 면접용 질문들 > 유니티 관련' 카테고리의 다른 글
쿼터니언 (Quaternion) (0) | 2023.03.17 |
---|---|
유니티 라이프 사이클(이벤트 함수의 실행 순서) (0) | 2021.04.22 |
코루틴(Coroutine) vs Invoke (0) | 2021.04.16 |