[UE5] 언리얼 엔진 Draw Call 최적화 - LOD 및 HLOD 활용

ChangJin·2024년 10월 25일
0

Unreal Engine5

목록 보기
106/114
post-thumbnail

Draw Call은 CPU가 GPU에 렌더링 작업을 요청하는 과정으로, 오브젝트가 많아질수록 성능 저하를 유발할 수 있습니다. 언리얼 엔진에서는 LOD, HLOD, 액터 병합 등의 최적화 방법을 활용하여 Draw Call 수를 줄이고 성능을 개선할 수 있습니다.

  • 들어가기에 앞서.
    사실 나나이트를 사용하면 전체 장면의 깊이를 그릴 때 드로 콜 1회를 사용하고 머터리얼 연산은 별도의 지연된 패스에서 수행합니다. 그리고 뷰 단위로 삼각형 레스터라이제이션을 합니다. GPU 기반으로 렌더링을 하게끔 파이프라인을 모두 바꾼게 나나이트라서 사실 나나이트를 켜고 나나이트 설정값을 바꾸는게 최적화에 더 좋을 수도 있습니다. 가장 정확한 방법은 각 메시들의 나나이트 설정값과 텍스쳐 크기등을 적절한 퀄리티를 유지하면서 설정값을 찾아내어 문서화하는 것입니다.

Draw Call이란?

Draw Call은 CPU가 GPU에게 특정 오브젝트를 렌더링하라는 명령을 전달하는 작업을 의미합니다. 각 메시(Mesh)와 머티리얼(Material)이 존재할 때마다 각각의 드로우 콜이 발생하게 되며, 이 과정이 많아질수록 CPU 부하가 커지게 됩니다. 즉, 많은 메시나 복잡한 머티리얼을 사용하면 그만큼 성능 저하의 원인이 될 수 있습니다.

언리얼 엔진에서의 Draw Call 작동 방식

언리얼 엔진에서 각각의 메시와 머티리얼 조합마다 드로우 콜이 발생합니다. 예를 들어, 하나의 캐릭터에 여러 부위의 스켈레탈 메쉬와 서로 다른 머티리얼을 적용하게 되면 그만큼 많은 드로우 콜이 발생하여, CPU가 처리해야 할 일이 많아집니다. 이러한 드로우 콜은 특히 많은 오브젝트가 렌더링되는 장면에서 성능 저하를 유발할 수 있습니다.

Draw Call 측정 방법 - Stat 명령어 사용

언리얼 엔진에서는 Draw Call을 비롯한 다양한 성능 지표를 실시간으로 확인할 수 있는 기능을 제공합니다. 그 중 stat 명령어를 사용하여 드로우 콜을 측정할 수 있습니다.

  1. 언리얼 엔진의 콘솔을 열고 stat scenerendering 명령어를 입력합니다.

  2. 이를 통해 현재 프레임의 Draw Call 수, GPU 시간, 프레임 시간을 포함한 렌더링 관련 데이터를 실시간으로 확인할 수 있습니다.

Draw Call 줄이기 위한 방법들

  1. Hierarchical Level of Detail (HLOD)

    1. https://dev.epicgames.com/documentation/ko-kr/unreal-engine/creating-and-using-lods-in-unreal-engine

    2. https://dev.epicgames.com/documentation/ko-kr/uefn/streaming-and-hlods-in-unreal-editor-for-fortnite

    3. https://techartnomad.tistory.com/146

    4. 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부터 설정을 해야합니다.

      • LOD 설정방법.

이렇게 추가해두면 가까이 갔을때 메테리얼이 변하는 모습을 볼 수 있습니다.

  • HLOD는 멀리 있는 오브젝트를 간단하게 렌더링할 수 있도록 최적화하는 시스템입니다. 멀리 있는 오브젝트들을 하나로 묶어 처리하면 드로우 콜 수를 줄일 수 있습니다.
  1. 액터 병합 (Actor Merging)
    • 여러 개의 액터를 하나의 메시로 병합하여 렌더링할 수 있습니다. 언리얼 엔진의 Actor Merging 기능을 통해 여러 오브젝트를 하나로 통합하면, 각각의 오브젝트에 대해 발생하는 드로우 콜을 줄일 수 있습니다. 병합 시 머티리얼도 최대한 통일하여 병합된 액터에서 드로우 콜을 최소화하는 것이 중요합니다.

Actor Merging 적용 방법:

  1. 병합할 액터들을 선택합니다.
  2. 'Actor Merge' 기능을 사용하여 선택된 액터들을 하나의 메시로 병합합니다.
  3. 병합된 메시에 대해 하나의 머티리얼을 사용하여 드로우 콜 수를 줄입니다.

이와 같이 Draw Call의 기본 개념과 언리얼 엔진에서 이를 줄이는 다양한 최적화 방법을 단계별로 적용하면, 성능을 크게 향상시킬 수 있습니다.

profile
게임 프로그래머

0개의 댓글