Draw Call 최적화
GPU 명령 호출을 최소화하여 렌더링 효율을 높입니다
Draw Call이란?
GPU 명령의 기본 단위
Draw Call은 지정된 셰이더를 사용하여 메시(삼각형 배치)를 화면에 그리라는 요청입니다. 각 Draw Call은 CPU에서 GPU로 명령을 전달하는 오버헤드가 있습니다.
플랫폼별 목표 Draw Call
# 현재 Draw Call 수 확인
stat SceneRendering
# 출력 예시
Mesh draw calls: 1247
Primitives drawn: 2.4M
Instancing 활용
동일 메시를 한 번의 Draw Call로
GPU Instancing은 동일한 메시를 여러 위치에 그릴 때 단일 Draw Call로 처리합니다.
= 100 Draw Calls
= 1 Draw Call! ⚡
// 일반 Static Mesh - 100개 = 100 Draw Calls
for (int32 i = 0; i < 100; ++i)
{
UStaticMeshComponent* Mesh = CreateComponent<UStaticMeshComponent>();
Mesh->SetStaticMesh(TreeMesh);
}
// Instanced Static Mesh - 100개 = 1 Draw Call!
UInstancedStaticMeshComponent* ISM = CreateComponent<UInstancedStaticMeshComponent>();
ISM->SetStaticMesh(TreeMesh);
for (int32 i = 0; i < 100; ++i)
{
ISM->AddInstance(FTransform(Locations[i]));
}
HISM (Hierarchical ISM)
// HISM - 대규모 분산 인스턴스에 최적화
// 클러스터 단위 컬링으로 멀리 있는 인스턴스 그룹 제외
UHierarchicalInstancedStaticMeshComponent* HISM =
CreateComponent<UHierarchicalInstancedStaticMeshComponent>();
HISM->SetStaticMesh(GrassMesh);
// Foliage 도구는 자동으로 HISM 사용
UE5는 동일 메시+머티리얼 조합을 자동으로 인스턴싱합니다. 별도 설정 없이도 일부 최적화가 적용됩니다.
메시 병합 및 HLOD
여러 메시를 하나로
메시 병합 전략
DCC 도구에서 병합
Maya, 3DSMax, Blender에서 오브젝트 결합 후 임포트. 가장 효과적
엔진 내장 도구
Actor > Merge Actors로 여러 스태틱 메시를 단일 메시로 병합
HLOD 시스템
원거리 오브젝트를 프록시 메시로 자동 교체. World Partition 연동
HLOD 레이어 타입
| 타입 | 설명 | 사용 사례 |
|---|---|---|
| Instancing | 인스턴싱으로 묶음 | 반복 오브젝트 (나무, 바위) |
| Merged Mesh | 메시 병합 | 중거리 건물 |
| Simplified Mesh | 단순화된 메시 | 원거리 건물 |
| Approximated Mesh | 근사 메시 | 매우 먼 거리 |
가시성 컬링
보이지 않는 건 그리지 않는다
📐 Frustum Culling
카메라 시야 밖 오브젝트 제외
(자동 적용)
🧱 Occlusion Culling
다른 오브젝트에 가려진 오브젝트 제외
📏 Distance Culling
일정 거리 이상 오브젝트 제외
// Static Mesh Component에서
MeshComponent->SetCullDistance(5000.0f); // 50m 이상에서 컬링
// 에디터에서: Details > LOD > Desired Max Draw Distance
Nanite는 클러스터 기반 렌더링으로 Draw Call 문제를 근본적으로 해결합니다. Nanite 지원 메시는 Draw Call 최적화 걱정 없이 사용할 수 있습니다.
핵심 요약
- Draw Call 목표: PC < 2000, 콘솔 < 1500, 모바일 < 700
- stat SceneRendering으로 현재 Draw Call 확인
- ISM/HISM: 동일 메시를 인스턴싱으로 단일 Draw Call
- HLOD: 원거리 오브젝트를 프록시 메시로 교체
- Distance Culling: 먼 거리 오브젝트 렌더링 제외
다음 강의에서는 Shader Complexity 분석과 머티리얼 최적화를 다룹니다.
도전 과제
배운 내용을 직접 실습해보세요
stat RHI로 현재 씬의 Draw Call 수를 확인하세요. Instanced Static Mesh Component를 사용하여 동일 메시 100개의 Draw Call을 1개로 줄이고, 프레임 시간 개선을 측정합니다.
Actor > Merge Actors 도구를 사용하여 동일 머티리얼의 여러 Static Mesh를 하나로 병합하세요. 병합 전후의 Draw Call 수와 GPU 시간을 비교합니다.
World Partition HLOD를 설정하여 원거리 오브젝트의 Draw Call을 자동으로 병합하세요. HLOD Layer를 구성하고, 거리별 LOD 전환 지점을 최적화하여 원거리 렌더링 비용을 50% 이상 감소시킵니다.