반응형

이전에 유니티 엔진에서 드로우콜 최적화 이론 정리 포스팅을 하면서 Batching(배칭)에 대해 설명했습니다.

https://darkcatgame.tistory.com/139

 

URP 드로우콜 최적화 이론 정리

Draw Call(드로우콜)이란? GPU에게 오브젝트를 화면에 그리라고 명령하는 것 입니다. 드로우콜을 줄여야(최적화)해야하는 이유? GPU가 오브젝트를 화면에 그리는데 시간이 필요한데, 한 프레임에 그

darkcatgame.tistory.com

Batching(배칭)은 한번에 묶어서 처리한다는 의미인데 해당 포스팅에서 렌더 순서가 꼬이면 배칭이 깨지는 이슈가 있었습니다.

해당 사례와 같이 이번 포스팅은 배칭이 깨지는 이슈 몇 가지 더 정리하겠습니다.

 

 

 

1. 렌더 순서가 꼬이면 배칭이 깨진다.

첫 번째는 이전 포스팅에서 설명한 주제와 같습니다.

Static Batching, Dynamic Batching, GPU Instancing, SRP Batcher 등 이 배칭 기능들이 제대로 동작하기 위해서는 배칭되는 오브젝트끼리 렌더링 순서가 묶일 수 있어야합니다.

 

 

UI나 Sprite와 같이 2D 오브젝트도 마찬가지로 렌더순서가 꼬이면 배칭이 동작하지 않습니다.

위 2가지 2D 이미지 Atlas샘플을 준비했습니다.

 

2가지 아틀라스 이미지가 렌더 순서가 묶이게 되면 배칭이 동작하지만, 중간에 다른 아틀라스 이미지가 끼어들면 배칭이 깨지게 됩니다.

 

하지만 UGUI기준으로, 렌더링 순서가 맞지 않아도 다른 아틀라스 이미지와 겹치지 않는다면 배칭이 동작합니다.

 

결론적으로 UGUI를 사용한다면 렌더 순서와 이미지가 겹치는 여부를 고려해서 아틀라스 설계를 해야 최적화에 도움을 줄 수 있습니다.

(UI 폰트도 동일함)

 

 

 

2. Static Batching되는 오브젝트끼리 버텍스 데이터 구조가 같아야 한다.

다음 이슈는 Static Batching에서만 발생하는 이슈입니다.

(Dynamic Batching, GPU Instancing, SRP Batcher는 해당 안됨)

위 예시는 4종류의 메쉬와 1종의 Material을 사용하는 Static 오브젝트입니다.

하지만 기둥 오브젝트만 Static Batching에 묶이지 않는 이슈가 있습니다.

 

핵심 원인은 메쉬의 버텍스 데이터 구조가 일치하지 않아서 그렇습니다.

위 예시는 기둥 메쉬는 UV1이 없지만 나머지 메쉬는 UV1가 있습니다.

 

그래서 기둥 메쉬에도 UV1 채널을 추가하면 Static Batching이 잘 동작하여 이슈가 해결됩니다.

 

해당 이슈를 요약하면 Static Batching이 묶일려면 대상 오브젝트들의 버텍스 데이터 구조가 동일해야합니다.

UV채널 뿐만 아니라 Normal, Tangent도 포함됩니다.

 

 

 

3. Reflection Probe가 Static Batching을 깨지게 한다.

위 예시는 Static Batching 오브젝트 일부에 Reflection Probe를 배치한 상태입니다.

(SRP Batcher는 비활성화 상태)

 

위 상황에서 Static Batching이 깨지게 되고, Frame Debugger에 위와 같은 경고 메세지를 확인할 수 있습니다.

배칭에 묶이는 오브젝트끼리 적용된 Reflection Probe가 동일하지 않아서 생긴 이슈입니다.

 

https://www.youtube.com/watch?v=UsyvT36vqpU&t=1645s

이슈의 핵심 원인은 Reflection Probe로 인해, Set Pass Call 정보가 변화되는 것 입니다.

(해당 쉐이더에서 Reflection Probe 데이터를 사용하지 않아도 동일)

 

따라서 Set Pass Call 정보를 배칭하는 SRP Batcher를 활성화한다면 앞서 소개한 이슈는 바로 해결됩니다.

 

 

 

최종 정리

  1. 엔진의 배칭 기능이 제대로 동작하기 위해서 렌더링 순서를 고려해야한다.
  2. 버텍스 데이터 구조가 다른 메쉬끼리 Static Batching으로 합쳐지지 않는다.
  3. Reflection Probe가 Static Batching에 영향을 주지만 SRP Batcher로 해결 가능하다.

 

 

지금까지 제가 유니티 엔진 사용하면서 겪은 배칭 이슈를 정리했습니다.

혹시 다른 이슈를 겪어보거나 아시는 분 있으시면 덧글로 알려주시면 반영하겠습니다.

 

 

 

반응형

WRITTEN BY
CatDarkGame
Technical Artist dhwlgn12@gmail.com

,