월드 파티션(World Partition)은 대규모 월드를 관리하기 위한 자동 데이터 관리 및 거리 기반 레벨 스트리밍 시스템이다.
기존에는 셀로 나눠진 Persistant Level에 월드를 저장하고, 커다란 레벨을 서브 레벨로 나눴어야 했는데
월드 파티션은 스트리밍 소스와 셀의 거리에 따라 로드, 언로드 하는 자동 스트리밍 시스템이다.
월드 파티션을 알기 위해선 이전의 레벨 스트리밍에 대한 정보를 알아야 한다.
레벨 스트리밍 (Level Streaming) 은 게임이 실행되는 동안 전체 맵을 한 번에 로드하는 것이 아닌, 필요한 부분만 동적으로
로드 / 언로드 하는 기술이다.
이 기술을 사용하면 큰 월드에서도 성능을 최적화 하고, 메모리 사용량을 줄일 수 있다.
예를 들어, 오픈 월드 게임에서는 플레이어가 볼 수 있는 위치 빼고는 맵을 로드해둘 필요가 없으니 볼 수 있는 위치만 로드한다.
기존의 언리얼 엔진4에서는 서브 레벨 기반 스트리밍을 사용했다.
Persistent Level (기본 레벨) 이 존재하고, 여러 개의 서브 레벨이 존재하여 이를 동적으로 로드/언로드 하는 방식이다.
우리가 필요한 월드 영역을 하나의 레벨로 만들어 분리하고 필요할 때만 로드 / 언로드 하는 것이다.
월드 파티션의 핵심 개념은 다음과 같다.
1. 자동 그리드 기반 레벨 스트리밍
월드를 자동으로 그리드 (Cell) 단위로 나누어서 관리한다.
플레이어의 위치나 설정된 로직에 따라서 필요한 영역만 동적으로 로드 / 언로드 된다.
2. HLOD
멀리 있는 월드 부분을 최적화하여 표시한다. ( 이것도 서브 레벨 스트리밍에서 사용할 수 있으나, 설정이 좀 더 필요하다. )
3. Data Layer
월드에서 특정 오브젝트들을 Layer로 묵을 수 있다.
게임 플레이 상황에 맞춰 특정 오브젝트들을 다르게 로드 / 언로드 할 수 있다.
4. 스트리밍 소스 (Streaming Source)
플레이어의 위치뿐만 아니라, 카메라 또는 특정 객체를 기준으로 월드 스트리밍을 제어할 수 있다.
기본적으로는 플레이어의 위치를 기준으로 잡히고 있는데, 추가하고 싶다면 UWorldPartitionSubsystem 에 등록해야 한다.
월드 파티션을 사용하려면 특정 세팅을 먼저 해주어야 한다.
Project를 생성할 때, 프로젝트 템플릿들에는 지금 월드 파티션 템플릿이 기본적으로 포함되어 있다.
설정을 키려면 World Settings 로 가서 Enable Streaming을 켜주어야 한다.
이 기능은 월드 파티션 템플릿이 들어가있는 경우에만 나타난다.
즉, 프로젝트 템플릿인 Blank, First Person, Third Person, Top Down, Vehicle Advanced 에서만 나타난다.
우리의 기존 프로젝트가 월드 파티션 템플릿을 포함하게 하기 위해선 다음과 같이 하면 된다.
1. Tools -> Convert Level 을 사용하여 월드 파티션 변환을 사용하기
2. Commandlet 을 사용하여 월드 파티션 변환 하기
UnrealEditor.exe QAGame -run=WorldPartitionConvertCommandlet Playground.umap -AllowCommandletRendering |
그리드 세팅
World Settings의 World Partition Setup을 선택하여 월드 파티션의 런타임 세팅을 할 수 있습니다.
여기선 그리드에 대한 다양한 데이터 설정과 HLOD Data layer 등을 설정할 수 있는데.
Cell Size인 25600 이 궁금할 수도 있습니다.
언리얼에서는 단위가 cm 이므로 25600cm 이고, 이는 한 셀의 크기가 256미터 임을 알 수 있습니다.
위의 Preview Grids 를 클릭하면, 에디터 뷰포트 내에서 그리드가 어떻게 나누어져있는지를 볼 수 있습니다.
다른 옵션들의 정보는 다음과 같습니다.
로딩 범위가 이해가 안될 수도 있는데, 우리의 스트리밍 액터가 그리드로부터 768미터 떨어지기 시작하면, 정보가 사라지고, 로딩되기 시작합니다.
우리의 PlayerController에도 World Partition에 대한 정보가 있습니다.
이는 WorldPartitionStreamingSourceComponent를 포함하고 있는것인데, 현재의 모든 템플릿에는 기본적으로 포함되어 있습니다
여기서의 Runtime Grid 이름은 우리가 World Settings - World Partition에서 설정한 Grid 이름입니다.
위의 예시로 들자면 MainGrid가 되겠군요.
우리가 월드 파티션을 사용할 때는 World Partition Editor 를 사용합니다.
Window - World Partition Editor 를 클릭합니다.
이 곳에서 다음과 같은 처리를 할 수 있습니다.
특정 그리드들을 드래그 한 후, 우클릭하면 Selection이 나타나게 됩니다.
특정 그리드들을 로드 하거나, 언로드 하거나
카메라등을 이동시킬 수 있습니다.
Level Instance 나 Virtrual Texture .. 같은 내용은 여기서 다루지 않습니다.
'UnrealEngine > 기능' 카테고리의 다른 글
[Unreal Engine 5] Gameplay Ability System - 2 (0) | 2024.03.17 |
---|---|
[Unreal Engine 5] Gameplay Ability System - 1 (0) | 2024.03.15 |
[Unreal Engine 5] Singleton (0) | 2023.10.02 |
[Unreal Engine 5] Asset Manager (0) | 2023.10.01 |
[Unreal Engine 5] Widget ( UI, 체력바 ) (0) | 2023.09.26 |