[CS] Draw Call이란? 드로우콜의 명령 과정
Draw Call(드로우 콜)이란? DP Call (Draw Primitive Call)?
CPU가 GPU에게 오브젝트를 화면에 그리라고 명령하는 것을 말합니다.
드로우콜의 명령 과정
1. 데이터는 HDD나 SSD같은 데이터 저장 장치에 저장되고 CPU에도 CPU 메모리가 있고, GPU에도 GPU 메모리가 존재한다. (모바일에서는 물리적으로 나눠지지 않고 논리적으로 나눠 사용한다)
2. 어떠한 Mesh를 그리기 위해선 GPU 메모리에 Mesh 관련 정보가 있어야 하는데, 먼저 저장장치에 있는 데이터를 복사하여 CPU 메모리에 데이터를 올리게 된다.
3. GPU는 CPU 메모리에 접근할 수 없기 때문에 GPU 메모리에 CPU 메모리 데이터를 다시 복사하게 된다.
4. GPU는 그려야 하는 Mesh의 상태 정보를 담는 렌더 상태 테이블을 가지고 있는데, 여기엔 버텍스, 메시, 쉐이더의 상태 정보가 담겨져 있다.
5. 이러한 상태 정보를 CPU는 GPU에게 전달하고, GPU는 렌더 상태 정보를 저장한 뒤, CPU가 GPU에게 Mesh를 그리라는 명령을 전달한다. 이것이 DP Call 이다.
6. CPU는 GPU에게 바로 명령을 하지 않고 Command 버퍼라는 곳에 명령 버퍼를 저장한다. GPU는 할 일을 처리한 후에 FIFO 구조로 Command 버퍼에서 명령을 순차적으로 가져와 수행한다.
드로우콜의 구성
1개의 드로우콜에는 Batches와 Set Pass Call 2가지 정보가 들어있습니다.
Batches에는 메쉬와 Transform의 정보를 의미하고, Set Pass Call에는 머티리얼 및 쉐이더 정보를 의미합니다.
Set Pass Call은 드로우 콜로 인한 상태 변경 횟수를 의미하는데, 쉐이더로 인한 렌더링 패스 횟수를 말합니다. 만약, 드로우 콜에 의한 병목현상이 발생한다면, Set Pass Call 수를 줄이는게 가장 효율적입니다.
배칭(Batching)이란?
어떤 것들을 한번에 묶어서 처리한다는 의미로, 드로우콜을 최적화하는 핵심 원리인, 오브젝트 혹은 머티리얼을 한번에 묶어서 처리하는 것을 말합니다. 즉, 드로우콜을 줄이는 작업을 의미합니다.
텍스처/스프라이트 - 아틀라스
이미지 또는 텍스처를 하나로 묶어 처리하여 드로우콜을 줄입니다.
정적 배칭과 동적 배칭이 있는데, 정적 배칭은 움직이지 않는 오브젝트들에 대해서 사용하는 배치 기법으로, Static으로 되어 있는 오브젝트들의 메쉬를 하나로 묶어서 작업하는 것입니다. 동적 배칭은 Moveable 오브젝트들에 대해서 실시간으로 처리하며 Sknnied Mesh나 정점이 많은 메시에는 사용할 수 없습니다.
드로우콜을 줄여야 하는 이유
즉 최적화 해야 하는 이유는, GPU가 오브젝트를 화면에 그리는데 시간이 필요한데, 한 프레임에 그려야 할 횟수가 많으면 게임의 FPS가 낮아지고, 모바일 기기에서는 GPU 부하로 인한 발열 이슈가 생길 수 있기 때문입니다.
https://darkcatgame.tistory.com/139
URP 드로우콜 최적화 이론 정리
Draw Call(드로우콜)이란? GPU에게 오브젝트를 화면에 그리라고 명령하는 것 입니다. 드로우콜을 줄여야(최적화)해야하는 이유? GPU가 오브젝트를 화면에 그리는데 시간이 필요한데, 한 프레임에 그
darkcatgame.tistory.com
드로우 콜(Draw call)과 배칭(Batching) 간단 정리
드로우 콜(Draw call)과 배칭(Batching)을 이해한다. 드로우 콜 드로우 콜이란 CPU가 GPU에게 오브젝트를 그리라고 명령하는 것을 의미한다. CPU가 GPU에게 오브젝트를 그리라고 명령하는 과정 Data는 Data
jeonhw.tistory.com