언리얼 엔진 5 가 출시되면서 게임 개발자들에게 월드 파티션(World Partition) 이라는 개념이 소개되었습니다.
월드 파티션은 제작자에게 복잡한 대규모 섬을 구축하는 방법을 제시하며, 동시에 메모리 비용 향상을 통해 다양한 플랫폼에서 부드러운 퍼포먼스를 보장합니다.
이러한 작업이 가능한 것은 월드 파티션에서 두 가지 컴포넌트, 바로 스트리밍(Streaming) 과 계층형 레벨 오브 디테일(Hierarchical Level of Detail, HLOD) 를 활용하기 때문입니다.
스트리밍
월드 파티션은 스트리밍 을 사용하여 플레이어 주변에 그리드 셀을 로드하거나, 스트리밍 소스를 메모리에 따라 로드합니다. 그러면 머신이 플레이어 캐릭터를 둘러싼 셀에 대해 기억해야 하는 데이터 양이 감소합니다.
섬의 가장 넓은 축이 1km를 초과하게 되면 스트리밍을 켜라는 팝업이 표시됩니다.
스트리밍 활성화(Enable Streaming) 를 체크하면 일부 예외를 제외하고 현재 메모리 사용량(Current Memory Usage) 플레이어의 현재 위치를 둘러싼 셀만 계산됩니다.
창(Window) > 월드 세팅(World Settings) 을 클릭하여 스트리밍 활성화(Enable Streaming) 가 활성화되어 있는지 확인하세요.
처음으로 박스를 체크하면 선택을 확인해야 합니다.
이제 프로젝트에 스트리밍이 활성화되어 있어야 합니다.
섬의 그리드를 시각화하려면 월드 세팅에서 프리뷰 그리드(Preview Grids) 를 체크합니다.
각 셀의 크기와 로딩 범위는 수정할 수 있지만, 디폴트 설정이 포트나이트 배틀로얄 크기의 섬에 최적화되어 있다는 점을 명심하세요.
자세한 내용은 언리얼 엔진 5 문서의 월드 파티션 페이지를 참고하세요.
HLOD
계층형 레벨 오브 디테일, 일명 HLOD 는 근처 액터의 최적화된 그루핑으로, 스트리밍 소스로부터 충분히 멀리 떨어질 경우 단일 스태틱 메시로 간소화되는 그룹입니다.
HLOD는 에셋 중 가장 낮은 퀄리티의 레벨 오브 디테일(Level of Detail, LOD)에서 생성됩니다. 커스텀 에셋에 설정된 LOD가 없다면, HLOD는 최대 해상도 에셋으로부터 생성되어 엄청난 비용을 요구하게 됩니다.
LOD0는 충실도가 가장 높은 에셋입니다. LOD1은 충실도가 비교적 낮은 메시입니다. LOD 숫자가 높아질수록 충실도는 점점 낮아집니다.
왼쪽 이미지는 완전한 디테일의 에셋을, 오른쪽 이미지는 그리드 셀에 의해 생성되는 HLOD 에셋을 보여줍니다.
HLOD를 빌드하면 프로젝트에 새 에셋이 추가되어 섬의 총 메모리 사용량이 증가합니다.
스트리밍 및 HLOD에 대해 내린 결정에 따라 메모리 사용량은 다음과 같은 방식으로 영향을 받습니다.
스트리밍 꺼짐 | 에셋이 메모리에서 언로드되지 않으며 HLOD를 사용하지 않습니다. | 메모리 사용량이 가장 높음 |
스트리밍 켜짐 및 HLOD 생성됨 | 먼 거리에 있어도 에셋이 나타나지만, 카메라가 멀리 이동할수록 디테일이 줄어듭니다. | 메모리 사용량이 보통임 |
스트리밍 켜짐 및 HLOD 생성되지 않음 | 카메라가 멀리 이동할수록 먼 거리에 있는 에셋은 사라집니다. | 메모리 사용량이 가장 낮음 |
HLOD 빌드
HLOD를 빌드하려면 자신의 프로젝트에 스트리밍 이 활성화되었는지 확인한 후, 툴바의 빌드(Build) 에서 HLOD 빌드(Build HLOD) 를 선택합니다.
머신 사양과 월드의 복잡도에 따라 HLOD 빌드에 어느 정도 시간이 걸릴 수 있습니다. 좋은 점은 이 프로세스를 다시 진행할 경우 월드에서 변경된 영역에 대해서만 HLOD를 빌드하기 때문에 시간이 비교적 덜 걸린다는 것입니다.
HLOD의 작동 방식에 대해 알아보려면 언리얼 엔진 5 문서의 월드 파티션 - 계층형 레벨 오브 디테일 페이지를 확인하세요.
HLOD 생성에서 에셋 제외
일부 에셋은 HLOD가 필요하지 않습니다. 제외할 수 있는 에셋 예시는 다음과 같습니다.
실내 사물 및 건물 에셋 | 멀리서 볼 수 없는 에셋은 HLOD가 필요 없습니다. 예를 들어 가구, 실내 벽, 내부 바닥 등이 있습니다. |
지하 에셋 | 지하에 있어서 플레이어의 시야에 절대 들어오지 않는 섬 부분입니다. 지하실, 동굴, 참호, 벙커 등이 여기에 해당됩니다. |
소형 액터 | 플레이어의 화면에서 큰 부분을 차지하지 않는 소형 액터는 HLOD가 필요 없습니다. 상자, 식물, 가로등 등이 여기에 해당됩니다. |
대형 액터 | 고층 건물이나 산 같은 대형 배경 액터에는 HLOD가 필요하지 않습니다. 여기서 HLOD를 배제하려면 디테일(Detail) 패널에서 공간적으로 로드되었는지 여부(Is Spatially Loaded) 에서 체크를 해제하여 항상 로드된 상태를 유지해야 합니다. |
HLOD가 필요 없는 에셋을 선택합니다. 에셋에 따라 디테일 패널에서 HLOD에 액터 포함(Include Actor in HLODs) 또는 HLOD에 컴포넌트 포함(Include Component in HLODs) 의 체크를 해제합니다.
경험에 의하면, 에셋의 HLOD 포함 여부를 결정할 때 에디터에서 에셋을 직접 축소해 보면서 중요하지 않은 에셋을 HLOD 생성으로부터 제외해도 괜찮을지 직접 확인하는 게 좋습니다.
로딩 범위 줄이기
HLOD의 퀄리티는 예상 드로 거리와 관계가 있습니다. 스트리밍을 사용할 때 HLOD가 표시되는 최단 거리는 월드 파티션 그리드에 환경설정한 로딩 범위입니다.
플레이어 화면에서 이미 작게 표시되어 있는 경우에만 HLOD를 로드하면 스토리를 적게 차지합니다.
로딩 범위를 조정하려면 다음을 따릅니다.
- 월드 파티션 구성(World Partition Setup) 탭을 선택합니다.
- 런타임 세팅(Runtime Settings) 을 펼친 다음 그리드(Grids) 를 펼칩니다.
-
로딩 범위를 좌클릭하고 숫자 값을 좌우로 드래그하거나 정확한 값을 입력하여 수정합니다.
로딩 영역을 사용하여 에디터 퍼포먼스 향상
UEFN에서 대규모 프로젝트에서 작업할 때 섬이 특정 크기에 도달하면 퍼포먼스 문제가 발생할 수 있습니다. 기본적으로는 섬 전체가 메모리에 로드됩니다. 하지만 섬의 여러 영역에서 작업할 때 영역을 로드 및 언로드 하면 프레임 속도와 뷰포트 응답성을 향상할 수 있습니다.
UEFN 에디터에서 크고 밀집도가 높은 섬에서 작업할 때 월드 파티션 미니맵을 사용하여 섬의 섹션을 로드 및 언로드 하면 로드 시간을 크게 줄일 수 있습니다.
수동으로 퍼블리싱하려면 다음 단계를 따릅니다.
-
레벨에서 스트리밍(Streaming) 을 활성화합니다.
-
메뉴 바에서 편집(Edit) > 에디터 개인설정...(Editor Preferences...) 을 선택합니다.
-
월드 파티션(World Partition) 섹션에서 '에디터에서 로딩 비활성화(Disable Loading in Editor)'의 체크를 해제합니다.
-
프로젝트를 리로드합니다. 프로젝트를 리로드하지 않으면 이 기능도 작동하지 않습니다.
-
월드 파티션 탭에서 언로드할 영역을 좌클릭하고 드래그합니다.
-
선택 영역을 우클릭하고 선택된 영역 언로드(Unload Selected Regions) 를 선택합니다.
-
영역을 리로드하려면 원하는 영역을 드래그하고 우클릭한 후 선택에서 영역 로드(Load Region From Selection) 를 선택합니다.
랜드스케이프 와 장치 는 로드 및 언로드에 영향을 받지 않습니다. 사용자 옵션(User Options) 에서 '공간적으로 로드되었는지 여부(Is Spatially Loaded)'가 체크 해제된 에셋도 마찬가지입니다.
UEFN의 데이터 레이어
데이터 레이어는 액터를 여러 레이어로 구성하는 UEFN의 시스템입니다. 이러한 레이어를 로드 및 언로드하여 월드를 구성하고, 복잡한 레벨을 관리하고, 독창적인 게임플레이 경험을 만들 수 있습니다. 무작위 레벨이 있는 게임을 상상해 보세요. 여러 레이어에 서로 다른 레벨 레이아웃을 설정하고 게임이 시작될 때 무작위로 하나를 선택하면 경험에 다양성과 흥미를 더할 수 있습니다. 데이터 레이어를 사용하면 여름에서 겨울로 전체 레벨을 변경하거나 전투 후 성 파괴를 추가하는 등 훨씬 더 큰 전환을 수행할 수 있습니다.
데이터 레이어 생성 및 관리에 대한 자세한 정보는 언리얼 엔진 문서 사이트를 참조하세요.
시네마틱 시퀀서를 사용하여 데이터 레이어 조작하기
UEFN의 시네마틱 시퀀스를 사용하여 런타임 및 이벤트에 대한 응답으로 데이터 레이어를 로드, 활성화, 언로드할 수 있습니다.
시퀀서(Sequencer) 탭에서 트랙(Track) 버튼을 클릭하고 데이터 레이어(Data Layer) 를 선택하여 기존 데이터 레이어를 시퀀서 트랙에 추가합니다.
트랙이 설정된 상태에서 데이터 레이어 트랙을 우클릭하고 섹션 편집(Edit Section) 을 선택합니다. 그런 다음 데이터 레이어 에셋(Data Layer Assets) 탭에서 엘리먼트 추가(Add Element) 를 클릭하고 시네마틱 시퀀서에 사용하려는 데이터 레이어를 선택합니다.
타임라인에서 데이터 레이어를 우클릭하면 해당 프로퍼티를 볼 수 있습니다. 여기에서 타임라인이 평가할 때 레이어가 어떤 상태가 되기를 원하는지 원하는 상태(Desired State) 를 선택할 수 있습니다. 프리롤 상태(Preroll State) 를 수정할 수도 있습니다. 프리롤 상태는 트랙이 시작되기 전에 레이어가 있는 상태이고, 포스트롤(Postroll) 상태는 트랙이 끝난 후의 상태입니다. 예를 들어 데이터 레이어를 활성화하려면 원하는 상태를 활성화(Activated) 로 설정하고 프리롤 상태를 로드됨(Loaded) 으로 설정하면 됩니다. 프리롤 상태를 로드됨으로 설정하고 프리롤 프레임 수를 늘리면 레이어가 활성화되기 전에 로드하는 데 더 많은 시간을 할애할 수 있어 퍼포먼스가 더 유연해질 수 있습니다.
플레이 헤드를 이동하면 타임라인에서 평가할 때 레이어가 어떤 상태가 될지 미리 볼 수 있습니다.
시네마틱 시퀀서 장치 사용에 대한 자세한 내용은 시네마틱 시퀀서 장치 페이지를 참고하세요.
에디터 미니맵 생성
에디터 세션에서 퀄리티가 높은 미니맵을 생성하는 선택적 단계도 있습니다. 이렇게 하면 작업하려는 레벨의 다양한 영역을 빠르게 찾을 수 있습니다.
-
메뉴 바에서 빌드(Build) > 월드 파티션 에디터 미니맵 빌드(Build World Partition Editor Minimap) 를 선택합니다.
-
그러면 빌드 상태(Build Status) 대화창이 표시됩니다. 이 단계는 섬의 복잡도에 따라 몇 분까지 걸릴 수 있으므로 잠시 기다립니다.
-
이제 미니맵과 뷰포트에 표시되는 것이 일치합니다. 영역은 여전히 같은 방식으로 로드 및 언로드할 수 있습니다.
문제 해결
Q: 빌드를 완료한 후 HLOD가 전혀 보이지 않습니다.
A: HLOD 액터는 에디터에서 기본적으로 로드되지 않습니다. 이 부분을 확인하려면 아웃라이너(Outliner) 를 사용하여 검색하고 핀(Pin) 하세요.
Q: 액터가 서로 멀리 떨어져 있는데 에셋이 HLOD를 생성하는 이유는 무엇인가요?
A: 액터가 부모 액터 아래 어태치/중첩되었는지 확인하세요. 액터를 클릭하고 어태치: 없음(Attach: none) 을 선택해 디태치하세요.
Q: 셀이 언로드될 때 중요 에셋 일부가 사라집니다.
A: UEFN에서 사용 가능한 특정 에셋은 HLOD에 액터 포함 이 기본적으로 체크되어 있지 않습니다. 이런 문제를 겪고 있다면 에셋의 프로퍼티를 확인해 보세요.
Q: 섬이 1km를 초과하지 않았는데 스트리밍 프롬프트가 트리거되는 이유는 무엇인가요?
A: 랜드스케이프의 가장 넓은 축이 1km를 초과하거나, 어떤 액터든 레벨 원점으로부터 1km 이상 떨어진 곳에 위치할 경우 스트리밍 프롬프트가 트리거될 수 있습니다.
Q: 대형 액터가 멀리서도 HLOD로 교체되지 않는 이유는 무엇인가요?
A: 구조물 계층구조 내 하나 또는 다수의 액터가 복사되어 멀리 이동하는 경우, 월드 파티션은 해당 액터를 항상 로드해야 하는 메시로 인식할 수 있습니다. 멀리 있는 액터를 계층구조에서 제거하여 이 문제를 해결하세요.