본문 바로가기
게임 개발 일지/내일배움캠프 TIL

[Unity] 배치 (Batch)

by 빛하_ 2024. 2. 27.

배치(Batch)와 배칭 (Batching)

1) 배치(Batch) : SetPass Call 과 DP Call 을 합친 개념이다.

* 드로우콜과의 차이점 :

  드로우콜은 (렌더 상태 변경 명령 + DP Call)을 포함한 개념으로, 배치가 드로우콜보다 좁은 의미이다.

 

2) 배칭(Batching)이란 여러 개의 Batch를 하나로 묶는 최적화 기법이다. (드로우콜을 묶어서 처리하기 위함)

기본적으로 드로우 콜을 발생시킬 수 있는 이미지, 텍스쳐, 메테리얼, 쉐이더를 하나로 묶어서 처리한다.

 

배치의 특징

  • 배치는 SetPass Call + DP Call 개념이다.
  • Render State Changes(렌더 상태 변경)가 아니라 SetPass를 포함하므로, 드로우콜보다 좁은 의미를 가진다.
  • Batch가 적다고 해서 항상 Draw Call이 적은 것은 아니다. 왜냐하면 Batch는 메시 상태 변경을 포함하지 않으므로, 배칭 처리가 되었더라도 메시가 다양하면 실제로 드로우콜은 훨씬 많을 수 있기 때문이다. 
  • Batch는 메시의 변경을 포함하지 않는다. 메시가 달라도 매터리얼이 같으면 하나의 Batch로 통합할 수 있다.

 

배칭의 종류

1. 정적 배칭 (Static Batching)

  • 런타임에 움직이지 않는 메시들에 대해서만 가능하다.
  • 여러 개의 메시를 하나의 메시로 통합한다. 통합 가능한 메시는 하나의 배치로 그려줄 수 있다.
  • 인스펙터에서 Batching Static 플래그를 설정하면 된다.
  • Static Batching이 되더라도 컬링 연산은 원래의 메시 기준으로 이루어진다는 장점이 있다.
  • StaticBatchingUtility.Combine()을 이용해서 스크립트에서 사용할 수 있다.
  • 스태틱 배칭은 오브젝트들을 합쳐서 내부적으로 하나의 메시로 만들어주기 때문에 1개의 메시만 사용하더라도 해당 메시로 여러개의 오브젝트를 만들면 오브젝트들을 합친만큼 추가 메모리가 필요하게 된다. 따라서 메모리 성능을 고려해 상황에 맞게 설계하는 것이 중요하다.
  • 주로 게임의 배경(풍경, 사물 등)에 사용한다.

 

2. 다이내믹 배칭 (Dynamic Batching)

    • 움직이는 오브젝트들에 대해서 실시간으로 처리한다.
    • 유니티에 의해 내부적으로 자동으로 수행된다.
    • 플레이어 설정에서 Dynamic Batching 을 활성화해 사용한다.
    • 사용하기 위한 제약이 많아 Dynamic Batching에 의한 최적화는 효율성이 낮다.
    • 예를 들어, Skinned Mesh는 사용이 불가능하며 vertex 300개 이상의 메시에 대해서도 적용되지 않는다.
    • 다이나믹 오브젝트는 매 프레임마다 씬에서 vertex들을 모아서 합친다. 이를 다이나믹 배칭에 사용되는 Vertex buffer와 Index buffer에 담으면 GPU는 이를 가져가서 렌더링한다. 이러한 과정 때문에 다이나믹 배칭은 매 프레임마다 오버헤드가 발생한다.

3. SRP Batcher

 

  • 유니티의 Scriptable Render Pipeline에서만 동작한다.
  • 동일 쉐이더, 다른 마테리얼에 대해서도 적용된다.
  • 쉐이더 배리언트에 대해 특정한 규칙을 만족하는 경우에만 적용될 수 있다.

<규칙>

  1. 오브젝트가 한 메시 안에 있어야 하며 파티클이나 스킨드 메시가 아니어야 한다.
  2. SRP Batcher와 호환 가능한 셰이더를 사용해야 한다. HDRP 및 LWRP의 모든 릿(Lit)과 언릿(Unlit) 셰이더는 이 요구사항을 충족한다.

 

공부자료 : https://blog.unity.com/kr/engine-platform/srp-batcher-speed-up-your-rendering

 

 

댓글