본문 바로가기
Study/Unity

[Unity] 유니티 최적화(Unity Batching)

by 스테디코디스트 2023. 11. 3.
반응형

1. Draw Call(드로우 콜)

- CPU : 디지털 콘텐츠를 구성하고 있는 게임 오브젝트, 데이터 등을 읽어들이는 역할

- GPU : CPU에게 받아온 데이터를 토대로해서 컨텐츠를 그리는 역할

- Draw Call : CPU가 GPU한테 자신이 읽어들인 데이터를 그리리고 내리는 명령

- Command Buffer : 드로우 콜에 따라오는 데이터들, 다양한 정보들의 버퍼들이 포함되어 있음.

- SetPass Call : Command Buffer의 그래픽 계열 쪽(메테리얼, 쉐이더 등)을 묶어놓은 그룹 SetPass를 전달하는 것을 의미

- Batch : Draw Call + SetPass Call 을 통해 GPU로 넘기는 과정, 많으면 많을수록 부하가 줄음.

- 최적화 : Batch를 줄이는 것.

 

2. Batch 컴포넌트

1) Sprite Renderer  2) Mesh Renderer  3) Line Renderer  4) Trail Renderer  5) Particle System

 

3. Batch를 줄일 수 있는 기법

1) Atlas

- 여러개의 텍스쳐를 하나로 합침

- Slice를 이용하여 잘라서 사용 가능

 

2) 다이나믹 배칭(Dynamic Batching)

- CPU가 동일한 재질을 사용하고 있는 메쉬들의 Vertex에 대한 정보를 모아서 Vertex Buffer에 담아 재활용함.

- 정점 속성을 900개 이상 가지거나 225개 이상의 정점을 포함하는 메쉬에는 적용 불가

 

<다이나믹 배칭 세팅>

- Preferences>Core Render Pipeline>Additional Properties>Visibility> All Visible로 변경

- Project Settings>Quality>Render Pipeline Asset 더블 클릭>Render Pipeline Asset 설정으로 들어가 마우스 우클릭>Show Additional Properties를 이용해 숨겨진 속성들을 펼침>Dynamic Batching 클릭

 

3) 정적 배칭(Static Batching)

- 여러 메쉬들의 정점을 하나로 통합하여 배치가 올라감 -> 메모리가 많이 필요

- 트랜스포밍 불가(이동,회전 등)

 

<정적 배칭 세팅>

- Project Setting>Player>Other Settings>Static Batching 활성화(보통 활성화 되어있음)

- 인스펙터 창> 상단의 Static 우측을 클릭해 펼침>Batching Static으로 설정

 

4) SRP 배칭

- 배치수는 줄지 않고 SetPass Call만 줄어들음.

- 다른 메테리얼을 사용해도 됨

- 단, 메테리얼이 달라도 하나의 공통된 쉐이더를 사용해야 함.

- SetPass Call을 아끼면서 한 쉐이더의 여러 메테리얼의 바리에이션을 사용할 수 있다는 장점이 있음.

- 쉐이더가 SRP 배칭과 호환되지 않으면 사용 불가 -> 쉐이더 속성창에 SRP Batcher가 cmopatible로 되어있는지 확인

 

<SRP 배칭 세팅>

Project Setting>Quality>Render Pipeline Asset 더블 클릭>SRP Bathcer 활성화

 

5) GPU 인스턴싱(GPU Instancing)

- 하나의 메테리얼을 가지고 극도로 배치 수를 줄일 수 있음

- 같은 오브젝트가 너무 많으면 페이징 처리가 되어 배치수가 조금 늘어날 수 있음.

 

<GPU 인스턴싱 세팅>

- 앞서 얘기한 Render Pipeline Asset 속성에서 SRP Batcher를 비활성화 시킴

- 사용할 Material 속성>Advanced Options>Enable GPU Instancing 활성화

 


 

본문은 하단의 Unity Korea의 영상을 참고하여 포스팅하였습니다.