20240228_드로우콜(Draw Call)

2024. 2. 29. 01:12IT/TIL

오늘의 TIL은 유니티에서 사용되는 용어인 드로우콜(Draw Call)에 관한 내용이다.

 

드로우콜(Draw Call)

드로우콜이란 현재 프레임에서 화면에 표시되는 오브젝트를 정하고

그 오브젝트를 그리라고 명령하는데 이 명령을 드로우콜이라고 한다.

이 드로우콜에는 오브젝트 뿐만 아니라 이 오브젝트의 정보들(텍스쳐, 메테리얼 등)도 포함되어 있는데

이러한 정보들로 인해 드로우콜이 많아지면 리소스 소모가 커지게 된다.

 

따라서 이 드로우콜을 줄이는 것이 최적화를 하는 방법으로 사용되는데,

크게 두 가지 방법으로 드로우콜을 줄일 수 있다.

 

1. 드로우콜 전체의 수를 줄인다.

2. 동일한 정보를 가지는 드로우콜을 그룹화하여 드로우콜의 수를 줄인다.

 

 

드로우콜 배칭

드로우콜 배칭이란 동일한 메시를 결합하여 드로우콜을 줄이는 방법으로 정적 배칭, 동적 배칭의 두 가지 방법이 있다.

 

정적 배칭

정적 게임 오브젝트의 메시를 미리 결합한다. 유니티는 결합된 데이터를 GPU로 보내지만, 결합 상태인 각 메시를 개별적으로 렌더링한다. 유니티는 메시를 개별적으로 컬링할 수 있지만, 각 드로우콜은 데이터 상태가 전혀 변경되지 않았기 때문에 리소스를 더 적게 소모한다. 이는 런타임에 움직이지 않는 구조물 같은 오브젝트에 적합한 방식으로, CPU의 부담을 줄일 수 있지만, 메모리가 비교적 많이 사용되는 단점이 있다.

 

동적 배칭

CPU에서 메시 버텍스를 변환하고 동일한 설정을 공유하는 버텍스를 그룹화하여 하나의 드로우콜로 렌더링한다.

버텍스는 동일한 수와 타입의 속성을 저장할 경우 동일한 설정을 고유한다. 즉, 유니티 내부적으로 자동으로 수행되는 배칭으로 자동으로 배칭을 하는 경우와, 배칭하지 않는 경우 중에서 최적인 사항을 선택하여 자동으로 수행되게 된다.

 

 

오늘은 드로우콜 배칭에 대한 기술면접 질문에 답변하면서 드로우콜에 대한 정보를 모으면서 정리하는 시간을 가졌는데,

사용되는 용어나 내용들을 보면 한 번의 정리로는 모두 이해할 수 없어서 간략하게

드로우콜의 기본적인 개념과 질문으로 나왔던 배칭에 대한 정보를 정리했는데,

추후에 드로우콜에 대한 전반적인 개념을 다시 정리하는 시간을 가지려고 한다.