* 프로젝트 설정에 맞춰 여러 방식을 직접 테스트하고 맞는걸 써야합니다.
이론을 습득해 지혜를 확장시켜보세요.
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
'Shader' 카테고리의 다른 글
pass (computer graphics) (0) | 2024.12.24 |
---|---|
LOD (Level of Detail) (0) | 2024.12.24 |
DrawCall (0) | 2024.12.23 |