CPU tells, Draw!
- CPU가 현재 프레임에서 무엇을 어떻게 그려야 하는지 결정해 Draw Call 생성
- Draw Call : CPU가 GPU에 보내는 렌더링 명령 단위
- 무엇을 = Mesh, 어떻게 = Material
- 현재 설정된 Render State (= GPU State) 와 리소스를 사용하여 렌더링 요청
- Render State에 포함된 정보
- vertex / index buffers
- shader programs (vertex / pixel)
- all shader inputs (Material, texture, light ..)
Render State의 변경
- CPU의 명령을 GPU의 명령으로 번역하는 비용은 비싸다
- CPU → Command Buffer (Queue) → GPU
- Draw Call이 많아지면 CPU Bottleneck 발생
Draw Call의 발생
- 일반적으로 하나의 Mesh를 렌더링하면 하나의 Draw Call 발생
- Mesh #1 + Material #1 = Draw call #1
- Mesh #N + Material #1 = Draw call #N
- Mesh #1 + Material #N = Draw call N
- Material 변경으로 Render State 변경 증가
- Multi Pass By Shader
- Shader가 여러 Pass를 가지면 하나의 Mesh가 여러 Draw Call을 발생시킬 수 있다
Draw Call 줄이기
- 렌더링되는 오브젝트 줄이기
- View Frustum Culling : 카메라 시야 밖의 오브젝트 제외
- Near Clipping Plane과 Far Clipping Plane 거리 줄이기
- Occulusion Culling : 오브젝트에 가려진 오브젝트 제외
- LOD (Level Of Detail)
- 오브젝트 렌더링 횟수 줄이기
- Real-Time 대신 Baked 라이트 사용
- 그림자 품질 설정
- Reflection Probes 사용 최소화
- Atlas
- 여러 Texture를 하나로 합쳐 같은 Material 사용 처리
- Material #N → 1
- Batching
- 여러 Renderer를 적은 Draw Call 또는 적은 CPU 렌더링 비용으로 처리
- Mesh #N → 1
- GPU Instancing