테스트 HLOD 세팅 값.

  • HLOD Level 0
    • Cluster generation settings
      • Desired Bound Radius : 10000.0
      • Desired Filling Percentage : 50.0
      • Min Number Of Actors to Build : 2
    • Mesh generation settings
      • Transition Screen Size : 0.5
  • HLOD Level 1
    • Cluster generation settings
      • Desired Bound Radius : 25000.0
      • Desired Filling Percentage : 37.5
      • Min Number Of Actors to Build : 2
    • Mesh generation settings
      • Transition Screen Size : 0.3
  • HLOD Level 2
    • Cluster generation settings
      • Desired Bound Radius : 52500.0
      • Desired Filling Percentage : 28.125
      • Min Number Of Actors to Build : 2
    • Mesh generation settings
      • Transition Screen Size : 0.225
  • HLOD Level 3
    • Cluster generation settings
      • Desired Bound Radius : 131250.0
      • Desired Filling Percentage : 21.09375
      • Min Number Of Actors to Build : 2
    • Mesh generation settings
      • Transition Screen Size : 0.16875

[UE4] ImposterBaker + HLOD 적용

Imposter Baker

3D오브젝트를 평면, 반원, 구의 형태로 캡쳐 하여 스프라이트 형식의 텍스쳐를 생성 하여 기존의 단순한 2D 기반의 빌보드의 형태 ( 트레디셔널 방식 ) 에서 부터 3D 처럼 생긴 빌보드 ( 옥타헤드럴 방식 ) 의 기능을 제공.

기존의 빌보드는 단순히 랜더링하는 오브젝트를 바라보는 수준이었지만, 임포스터베이커는 진화한 형태의 빌보드라 할 수 있다.

HLOD  – Hierarchical Level of Detail

HLOD는 월드에 배치 되어있는 오브젝트를 (보통은 카메라의) 거리에 따라 디테일을 틀리게 설정해주는 기법. 멀리있을때는 낮은 디테일의 리소스로 가까이 있어서 자세히 봐야 할때는 높은 디테일의 리소스 ( 메시, 텍스쳐, 그림자, 라이트 등) 로 변경.

거리별 mesh actor 들을 하나로 묶어서 드로우 콜을 줄여주는 등의 기능을 간단한 설정으로 최적화를 할수 있도록 도와주는 기능이다.

장점

이 두가지를 섞어서 사용하면 매우 많은 드로우콜과 메시들의 트라이앵글수를 감소 시킬 수 있으며, 더불어 메시 액터들의 LOD 로우폴리로 설정한 메시들 보다 (훨씬) 더 나은 디테일을 가져 갈 수도 있다.

자세한 내용은 아래의 유튜브 링크를 통해 확인.

프로젝트 테스트하면서 확인 된 이슈들

언리얼엔진 4.19 에서는 임포스터 베이커는 적용이 되지만, 임포스터 베이커를 적용시킨 액터를 HLOD 와 같이 사용 하는것은 안된다.

  • Actor 의 HLOD 항목중에 “Use MaxLOD as Imposter” 항목이 엔진에 적용이 되어 있지 않기 때문에, 임포스터가 적용된 액터들을 HLOD 의 프록시 메시로 생성 시, 임포스터가 적용된 오브젝트가 보이는것이 아니고 떨렁 매시 한조각만 보이게 되는것을 확인 할 수 있다.

언리얼엔진 4.20  사용시 임포스터베이커를 사용시 블루프린트의 노드를 수정해야한다.

  • “BP_Generate_ImposterSprites” 블루프린트를 열어보면, Construction Script 안의 Scene Capture Setup 항목 에서SceneCaptureComponent2D 의 StaticMeshActor 변수를 초기화 부분을 보면, 기전에는 그냥 변수를 끌어와서 거기다가 배열을 생성해서 넣게 되어 있는데, 이 부분이 엔진 버전업이 되면서, Array에서 제공하는 SetElem 함수로 액터를 넣게 변경이 되었다.
  • 특정 조건에서 “Use MaxLOD as Imposter” 항목이 체크 되었을때 0을 나누기 했다는 에러 메세지와 함께 에디터가 종료되는 증상이 있어서 확인 중.

테스트 중인 영상과 사용방법에 대한 이슈

배경 어셋들을 임포스터화 시킨다음에 HLOD 로 묶어서 사용 하는 것으로 생각 하고 있었지만, 그게 아니고 HLOD로 만들어진 클러스터의 오브젝트 들에 대한 것들을 임포스터 화 해서 사용하는 것 같다. 현재 아래의 영상은 HLOD로 클러스터로 묶어서 나온 액터들을 임포스터 화 해서 빌드 한후 드로우 콜과 트라이앵글 수를 체크해 보았다. 만약 이런 방식이라면 관리 와 수정등등이 매우 복잡해서 쓰기가 꺼려질것 같은데, 좀더 체크 해 보아야 할 듯 하다.

  • 드로우콜 수
  • 트라이앵글 수

다음목표

    1. 캐릭터와 에니메이션에 관련된 최적화에 대한 고민
    2. 그외의 최적화에 관련된 고민

유튜브링크 : 옥타헤드럴 임포스터 & HLOD 섹션 부터 시작 – 포트나이트 모바일 아트 최적화

임포스터 및 HLOD 설정 가이드

  • 사용엔진버전 : 언리얼 4.20.2 버전
  • 사용플러그인 : 임포스터 베이커