본문 바로가기
Shader

Batching

by Dev_Cat 2024. 12. 23.
728x90
반응형

* 프로젝트 설정에 맞춰 여러 방식을 직접 테스트하고 맞는걸 써야합니다.

이론을 습득해 지혜를 확장시켜보세요.

 

Batching 이란

- DrawCall을 소비해 그려진 Mesh를 다시 그릴 때 연산을 줄이기 위한 기법

 

Static Batching (정적 배칭)

- 움직이지 않는 오브젝트에 해당

- Mesh 크기에 상관없이 하나로 합쳐주고 이 과정에서 CPU 자원이 소모되지 않음

- 카메라 뷰에 걸리지 않는 오브젝트 역시 계산을 하기에 Culling 영역을 잘 계산해서 배치 필요

- Scene에 따라 오히려 정적 배칭을 끄는게 퍼포먼스에 더 좋을수도 있음

ex) 동일한 나무 Mesh를 이용해 숲 같은 배경을 Static Batching하면 Mesh가 너무 비대해져 메모리를 더 사용하게 될 수 있음.

 

Dynamic Batching (동적 배칭)

- 움직이는 오브젝트에 해당

- 작은 Mesh들 몇 개를 큰 Mesh 하나로 합쳐서 드로우콜을 줄임

- 큰 Mesh를 하나로 합치는 과정을 CPU에서 하는데 이 작업이 GPU한테 Draw Call을 요청하는것보다 비쌀 수 있음

 

GPU Instanching

- 동일 Mesh, 동일 Material 오브젝트들을 하나의 배열에 모아 GPU에 제공하는 방식

- Graphics.DrawXXXAPI를 통해 수동으로 전달하거나 지원 가능한 셰이더 Inspector를 통해 설정이 가능

- Mesh랑 Material이 모두 같을 때만 동작하며 Skinned Mesh Renderer를 미지원 한다.

- MaterialPorpertyBlock을 통해 Instance(or Object)별 외형 변화를 줄 수 있다.

 

MaterialPorpertyBlock을 이용한다는 의미는 Unity에서 Material을 하나 만들어 셰이더 바깥 cs 코드에서 색상이나 뭔가 값을 변화시킬 때 그냥 Material을 호출하면 이는 복사된 Material에 값을 적용시키는 방식으로 메모리가 추가로 소모됨

그럴때도 MaterialPorpertyBlock을 이용하는 방법도 있는데 보통은 최초 1회 오브젝트 생성시 캐싱해두고 사용함.

 

SRP Batcher

- Shader만 동일한거를 사용하면 무조건 배칭해주기에 범용적임

- Shader Variant에 대해 일정한 규칙을 고수할 경우에만 작동

- GPU Instancing의 인스턴스 별 외형 변화 지원 X

728x90
반응형

'Shader' 카테고리의 다른 글

pass (computer graphics)  (0) 2024.12.24
LOD (Level of Detail)  (0) 2024.12.24
DrawCall  (0) 2024.12.23