본문 바로가기

Unity 최적화

[유니티] 유니티 드로우콜, 배칭(Unity Object Polling)

드로우콜 (Draw Call)

렌더 상태 정보가 변경될 때 상태 정보를 보내거나(Render State Changes) CPU가 GPU에게 렌더링 작업을 수행하도록 명령을 하는것(DP Call)이다. 매시1개, 머테리얼 1개당 각각 1개의 드로우콜이 발생한다.

GPU가 다른 일을 하고있다면 커맨드 버퍼 (Command Buffer)에 명령들을 쌓아두고 순서대로 GPU에서 작업을 진행하도록 한다. 

 

SetPass Call

쉐이더로 인한 렌더 상태 변경만을 의미한다.

쉐이더 내의 Pass 변경, 쉐이더(마테리얼) 자체의 변경, 쉐이더 내 파라미터들의 변경에 해당된다.

 

배치 (Batch)

SetPass와 DP Call이 합쳐진 작업들을 일컬어 부른다.

 

배칭 (Batching)

여러개의 Batch를 하나로 묶는 최적화 기법으로 아래와 같은 종류들이 있다.

 

- 정적 배칭 (Static Batching)

런타임에 움직이지 않는 메시들에 대해서만 가능하다.

여러 개의 메시를 하나의 메시로 통합한다.

메시를 통합한 만큼, 하나의 배치로 그려줄 수 있다.

인스펙터에서 Batching Static 플래그를 설정하면 된다.

Static Batching이 되더라도 컬링 연산은 원래의 메시 기준으로 이루어진다는 장점이 있다.

 

- 동적 배칭(Dynamic Batching)

유니티에 의해 내부적으로 자동으로 수행된다.

플레이어 설정에서 Dynamic Batching만 켜주면 된다.

실제로는 제약이 너무 많으므로 Dynamic Batching에 의한 최적화를 기대하기는 힘들다.

예를 들어, 스킨 메시에 대해서는 적용되지 않으며 버텍스 300개 이상의 메시에 대해서도 적용되지 않는다.

 

- GPU Instancing

동일 메시, 동일 마테리얼인 경우에만 가능하다.

쉐이더에서 인스턴싱 사용 여부를 명시해주어야 한다.

쉐이더에서 Instancing Buffer 영역을 선언하여 인스턴싱을 적용할 쉐이더 파라미터를 설정할 수 있다.

마테리얼에서 Enable GPU Instancing에 체크하여 인스턴싱을 적용할 수 있다.

배칭이 적용됨에도 불구하고 Material Property Block을 통해서 마테리얼마다 파라미터를 변경할 수 있다는 장점이 있다.

 

- SRP Batcher

유니티의 Scriptable Render Pipeline에서만 동작한다.

동일 쉐이더, 다른 마테리얼에 대해서도 적용된다.

쉐이더 배리언트에 대해 특정한 규칙을 만족하는 경우에만 적용될 수 있다.

 

 

'Unity 최적화' 카테고리의 다른 글

텍스쳐 포맷  (0) 2022.07.26
[유니티] 유니티 오브젝트 풀링(Unity Object Polling)  (0) 2022.02.28