Draw Call은 CPU가 GPU에 렌더링 작업을 요청하는 과정으로, 오브젝트가 많아질수록 성능 저하를 유발할 수 있습니다. 언리얼 엔진에서는 LOD, HLOD, 액터 병합 등의 최적화 방법을 활용하여 Draw Call 수를 줄이고 성능을 개선할 수 있습니다.
Draw Call이란?
Draw Call은 CPU가 GPU에게 특정 오브젝트를 렌더링하라는 명령을 전달하는 작업을 의미합니다. 각 메시(Mesh)와 머티리얼(Material)이 존재할 때마다 각각의 드로우 콜이 발생하게 되며, 이 과정이 많아질수록 CPU 부하가 커지게 됩니다. 즉, 많은 메시나 복잡한 머티리얼을 사용하면 그만큼 성능 저하의 원인이 될 수 있습니다.
언리얼 엔진에서의 Draw Call 작동 방식
언리얼 엔진에서 각각의 메시와 머티리얼 조합마다 드로우 콜이 발생합니다. 예를 들어, 하나의 캐릭터에 여러 부위의 스켈레탈 메쉬와 서로 다른 머티리얼을 적용하게 되면 그만큼 많은 드로우 콜이 발생하여, CPU가 처리해야 할 일이 많아집니다. 이러한 드로우 콜은 특히 많은 오브젝트가 렌더링되는 장면에서 성능 저하를 유발할 수 있습니다.
Draw Call 측정 방법 - Stat 명령어 사용
언리얼 엔진에서는 Draw Call을 비롯한 다양한 성능 지표를 실시간으로 확인할 수 있는 기능을 제공합니다. 그 중 stat
명령어를 사용하여 드로우 콜을 측정할 수 있습니다.
언리얼 엔진의 콘솔을 열고 stat scenerendering
명령어를 입력합니다.
이를 통해 현재 프레임의 Draw Call 수, GPU 시간, 프레임 시간을 포함한 렌더링 관련 데이터를 실시간으로 확인할 수 있습니다.
Draw Call 줄이기 위한 방법들
Hierarchical Level of Detail (HLOD)
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/creating-and-using-lods-in-unreal-engine
https://dev.epicgames.com/documentation/ko-kr/uefn/streaming-and-hlods-in-unreal-editor-for-fortnite
https://dev.epicgames.com/documentation/ko-kr/uefn/streaming-and-hlods-in-unreal-editor-for-fortnite
HLOD는 에셋 중 가장 낮은 퀄리티의 레벨 오브 디테일(Level of Detail, LOD)에서 생성됩니다. 커스텀 에셋에 설정된 LOD가 없다면, HLOD는 최대 해상도 에셋으로부터 생성되어 엄청난 비용을 요구하게 됩니다. LOD0는 충실도가 가장 높은 에셋입니다. 이를 사용하려면 LOD부터 설정을 해야합니다.
이렇게 추가해두면 가까이 갔을때 메테리얼이 변하는 모습을 볼 수 있습니다.
Actor Merging 적용 방법:
이와 같이 Draw Call의 기본 개념과 언리얼 엔진에서 이를 줄이는 다양한 최적화 방법을 단계별로 적용하면, 성능을 크게 향상시킬 수 있습니다.