Draw call은 그래픽스 렌더링에서 CPU가 GPU에게 그려야 할 오브젝트의 지시를 보내는 과정을 의미합니다. 많은 draw call은 성능 저하를 초래할 수 있으므로 이를 줄이는 것이 중요합니다. 아래는 draw call을 줄이기 위한 몇 가지 방법입니다:
1. 인스턴싱 (Instancing)
- 정의: 동일한 메쉬를 여러 번 그릴 때, 각각의 개별 draw call 대신 하나의 draw call로 모든 인스턴스를 그리는 기술입니다.
- 사용법: 언리얼 엔진에서는 Static Mesh Instancing이나 Hierarchical Instanced Static Mesh (HISM)를 사용하여 인스턴스를 생성합니다. 이를 통해 동일한 오브젝트를 반복적으로 사용하는 씬에서 draw call을 크게 줄일 수 있습니다.
2. 배치 렌더링 (Batch Rendering)
- 정의: 비슷한 특성을 가진 오브젝트를 그룹화하여 한 번의 draw call로 렌더링하는 방식입니다.
- 사용법: 비슷한 머티리얼이나 텍스처를 사용하는 오브젝트를 함께 배치하여, 그룹화된 오브젝트를 한 번에 그리는 방식으로 draw call을 줄입니다. 언리얼 엔진에서 Merge Actors 기능을 사용하여 이 작업을 수행할 수 있습니다.
3. LOD (Level of Detail) 활용
- 정의: 멀리 있는 오브젝트에 대해 저해상도 모델을 사용하여 렌더링 성능을 개선하는 기술입니다.
- 사용법: LOD를 설정하여 가까운 거리에서는 고해상도 모델을 사용하고, 멀리 있는 경우에는 저해상도 모델을 사용함으로써 draw call 수를 줄일 수 있습니다.
4. 머티리얼 최적화
- 정의: 머티리얼의 복잡성을 줄여서 GPU의 부하를 경감시키는 방법입니다.
- 사용법: 머티리얼에서 사용하는 텍스처 수를 줄이거나, 복잡한 셰이더 노드를 단순화하여 draw call을 줄일 수 있습니다. 머티리얼의 오버드헤드를 최소화하는 것이 중요합니다.
5. 오브젝트 통합 (Object Merging)
- 정의: 여러 개의 정적 메쉬를 하나의 메쉬로 합치는 과정입니다.
- 사용법: 씬에서 사용되는 정적 메쉬를 병합하여 하나의 메쉬로 만들어 draw call 수를 줄일 수 있습니다. 이를 위해 언리얼 엔진의 Merge Actors 기능을 사용할 수 있습니다.
6. 비동기식 로딩 및 언로드
- 정의: 필요하지 않은 오브젝트를 메모리에서 언로드하고, 필요한 경우에만 로드하는 방식입니다.
- 사용법: 동적으로 필요한 오브젝트만 로드하여 draw call을 줄이는 방법입니다. 예를 들어, 플레이어가 접근하지 않는 지역의 오브젝트는 로드하지 않는 방식으로 최적화할 수 있습니다.
7. 정적 조명 활용
- 정의: 정적 조명과 그림자를 미리 계산하여 저장하는 방법입니다.
- 사용법: 정적 조명을 사용하여 동적 조명으로 인한 추가적인 draw call을 줄일 수 있습니다. 이는 정적 오브젝트에 대한 성능을 크게 향상시킬 수 있습니다.
8. 투명 오브젝트 최적화
- 정의: 투명 오브젝트는 일반적으로 더 많은 draw call을 요구합니다.
- 사용법: 투명 오브젝트의 수를 줄이고, 가능한 경우 정적 또는 불투명으로 변경하여 draw call을 줄입니다.