TECHARTNOMAD | TECHARTFLOWIO.COM

UNREAL ENGINE

World Partition-> Runtime Partition

jplee 2025. 2. 17. 18:04

UE5의 새로운 레벨 분할 기술은 런타임에서 그 장점이 두드러집니다.

레벨의 정적 오브젝트들은 레벨 시작 시 단 한 번만 계산되어 메모리에 저장되므로, 이전의 Bake 방식과 비교해도 게임 실행 중 성능 부담이 발생하지 않습니다.

또한 에디터(Editor)에서 오브젝트와 스트리밍 레벨 간의 관계(진입/이탈)를 일일이 처리할 필요가 없어져 오픈 월드 씬 편집이 한결 수월해졌습니다.

관련 설정

World Partition Setup

Runtime Hash Class

  • WorldPartitionRuntimeHashSet와 WorldPartitionRuntimeSpatialHash는 언리얼 엔진의 World Partition 시스템에서 사용되는 두 가지 런타임 해싱 전략입니다. 각각의 차이점을 살펴보겠습니다.

1. WorldPartitionRuntimeHashSet

  • 특징:
    • 명시적으로 지정된 특정 액터 집합을 로드하는 방식입니다.
    • 사전에 정의된 액터 그룹만 로드됩니다.
    • 공간적 위치와 관계없이 필요한 액터 집합을 로드합니다.
  • 사용 사례:
    • 특정 퀘스트 관련 액터들의 로딩이 필요할 때
    • 공간 위치보다 논리적 그룹 단위의 로딩이 필요할 때

2. WorldPartitionRuntimeSpatialHash

  • 특징:
    • 공간 분할을 기반으로 하는 로딩 방식입니다.
    • 월드를 그리드 형태로 나누어 플레이어 주변 영역만 로드합니다.
    • 거대한 오픈월드에 적합합니다.
  • 사용 사례:
    • 플레이어 이동에 따라 주변 환경을 동적으로 로드할 때
    • 공간 기반 자동 스트리밍이 필요한 경우

정리

항목 WorldPartitionRuntimeHashSet WorldPartitionRuntimeSpatialHash
기반 논리적 그룹 기반 공간(월드 위치) 기반
로딩 방식 특정 액터 집합 로드 플레이어 위치에 따른 공간 기반 로드
용도 퀘스트, 특정 이벤트 등 오픈월드, 큰 월드 최적화
유연성 수작업 설정 필요 자동화 로딩 최적화

Runtime Settings

월드 세팅에서 그리드의 전역 설정을 편집할 수 있으며, 레벨별로 다양한 그리드 방안을 구성할 수 있습니다. 각 방안에서 설정 가능한 항목은 다음과 같습니다:

  • Grid Name: 이름
  • Cell Size: 셀 크기
  • Loading Range: 로딩 범위(XY 수평면 기준)
  • Block on Slow Streaming: 로딩 속도 저하 시 해당 그리드 레이어의 로딩 차단 여부
  • Priority: 로딩 우선순위

아래에서는 에디터의 로딩 설정을 구성할 수 있습니다:

  • Preview Grids: 그리드 네트워크 미리보기
  • World Partition Editor Cell Size: 에디터의 그리드 크기 (에디터의 분할 로딩에만 적용되며 런타임 그리드 설정에는 영향을 주지 않음)

Runtime Grid는 메모리 최적화에 중점을 두어, 클라이언트가 최소한의 리소스만 메모리에 로드하도록 합니다. 이는 장면 순회와 가시성 검사와 같은 CPU 계산량도 절약합니다.

Grid는 적절한 GridSize와 Loading Range 설정을 통해 다음 목표를 달성합니다:

  • 화면 표시에 필요한 최소한의 콘텐츠만 로드
  • 부드러운 로드/언로드 과정 보장
  • 로드/언로드로 인한 화면 깜빡임 방지

주요 Grid 분류 예시:

Landscape Grid  Building Grid Prop Grid Small Prop Grid
큰 GridSize(Proxy 일치), 높은 우선순위, 로드 보장 중간 GridSize, 높은 우선순위, 로드 보장 작은 GridSize, 중간 우선순위, 로드 보장 매우 작은 GridSize, 낮은 우선순위, 성능 보장을 위한 차단 가능

Grid 분류는 많다고 좋은 것이 아닙니다. 런타임 계산이 필요하므로, 과도하게 복잡한 분할은 실행 중 성능 부하를 초래할 수 있습니다.

Runtime Partition Class

  • URuntimePartitionLHGrid와 URuntimePartitionLevelStreaming은 언리얼 엔진의 월드 파티션 시스템과 관련된 클래스입니다. 두 클래스는 런타임 파티션과 스트리밍 기능을 담당하지만, 서로 다른 역할과 목적을 가지고 있습니다.

1. URuntimePartitionLHGrid (Large Height Grid)

  • 설명: URuntimePartitionLHGrid는 월드 파티션 시스템의 그리드 기반 파티션 시스템입니다. 주로 **넓은 지형(large heightfields)**이나 광대한 월드를 다룰 때 사용됩니다.
  • 특징:
    • 고정 그리드 시스템(Fixed Grid System)을 기반으로 동작합니다.
    • 높이 차이가 있는 입체적 월드의 스트리밍 최적화를 위해 설계되었습니다.
    • 주로 대규모 야외 맵이나 열린 세계(Open World) 프로젝트에 사용됩니다.
    • 셀(Cell) 단위로 구역을 나누어 필요한 구역만 로드합니다.

2. URuntimePartitionLevelStreaming

  • 설명: URuntimePartitionLevelStreaming은 **레벨 스트리밍(Level Streaming)**을 담당하는 클래스입니다. 특정 레벨을 동적으로 로드하고 언로드하는 핵심 기능을 수행합니다.
  • 특징:
    • 특정 영역이나 오브젝트를 플레이어와의 거리와 가시성에 따라 로드/언로드합니다.
    • 월드 파티션 시스템과 통합되어 필요한 부분만 정밀하게 스트리밍합니다.
    • 월드 구성 시 서브레벨(sub-level)을 효율적으로 관리합니다.

비교

항목 URuntimePartitionLHGrid URuntimePartitionLevelStreaming

주요 역할 그리드 기반 월드 파티션 스트리밍된 레벨 로드/언로드 관리
사용 목적 대규모 야외 월드, 입체적 높이변화 있는 지형 서브레벨 스트리밍 및 월드 파티션 세부 로드 관리
기반 시스템 고정 그리드 시스템 스트리밍 레벨 시스템
주요 기능 넓은 지역을 셀로 나눠 필요한 영역만 로드 특정 레벨(구역)을 필요 시 스트리밍
관련 환경 Open World, Heightfield 기반 월드 월드 파티션 스트리밍 전반

정리:

  • LHGrid: "넓고 복잡한 지형을 그리드 기반으로 효율적으로 스트리밍하는 시스템"
  • LevelStreaming: "플레이어의 위치나 상황에 맞게 서브레벨을 스트리밍하는 기본 시스템"

두 시스템은 개념적으로 연결되어 있지만,

URuntimePartitionLHGrid는 파티션 전략(Grid 기반 시스템)을 담당하고, URuntimePartitionLevelStreaming은 실제 스트리밍 제어(로드/언로드)를 수행합니다.

 

월드 파티션 디버그 명령

명령 설명
wp.Editor.DumpActorDescs 액터 디스크립터 목록을 CSV 파일로 내보냅니다.
wp.Editor.DumpClassDescs 클래스 디스크립터 목록을 CSV 파일로 내보냅니다.
wp.Editor.DumpStreamingGenerationLog 스트리밍 생성 로그를 내보냅니다.
wp.Editor.HLOD.DumpStats 다양한 HLOD 통계를 CSV 형식의 파일로 작성합니다.
wp.Editor.ToggleShowEditorProfiling 에디터 프로파일링 통계 표시를 전환합니다.
wp.Runtime.DebugFilterByCellName 전체 또는 부분 셀 이름으로 월드 파티션 스트리밍의 디버그 표시를 필터링합니다. 인수 [셀 이름]
wp.Runtime.DebugFilterByDataLayer 데이터 레이어로 월드 파티션 스트리밍의 디버그 표시를 필터링합니다. 인수 [데이터레이어 레이블]
wp.Runtime.DebugFilterByRuntimeHashGridName 그리드 이름으로 월드 파티션 스트리밍의 디버그 표시를 필터링합니다. 인수 [그리드 이름]
wp.Runtime.DebugFilterByStreamingStatus 스트리밍 상태로 월드 파티션 스트리밍의 디버그 표시를 필터링합니다. 인수 [스트리밍 상태]
wp.Runtime.DrawWorldPartitionIndex 디버그 표시를 위한 원하는 파티션된 월드의 인덱스를 설정합니다. 모든 등록된 파티션된 월드를 표시하려면 0 미만으로 설정하세요.
wp.Runtime.DumpDataLayers 데이터 레이어를 로그에 출력합니다.
wp.Runtime.DumpStreamingSources 활성 스트리밍 소스를 로그에 출력합니다.
wp.Runtime.DumpWorldPartitions 활성 월드 파티션을 로그에 출력합니다.
wp.Runtime.HLOD 월드 파티션 HLOD의 로딩 및 렌더링을 전환합니다.
wp.Runtime.OverrideRuntimeSpatialHashLoadingRange 런타임 로딩 범위를 설정합니다. 인수-grid=[인덱스] -range=[오버라이드_로딩_범위]
wp.Runtime.SetDataLayerRuntimeState 런타임 데이터레이어 상태를 설정합니다. 인수[상태 = Unloaded, Loaded, Activated] [데이터레이어명]
wp.Runtime.SetLogWorldPartitionVerbosity 월드 파티션 로그 상세도를 변경합니다.
wp.Runtime.ToggleDataLayerActivation 데이터레이어의 활성 상태를 전환합니다. 인수 [데이터레이어명]
wp.Runtime.ToggleDrawDataLayers 활성 데이터 레이어의 디버그 표시를 전환합니다.
wp.Runtime.ToggleDrawDataLayersLoadTime 활성 데이터 레이어의 로드 시간 디버그 표시를 전환합니다.
wp.Runtime.ToggleDrawLegends 월드 파티션 범례의 디버그 표시를 전환합니다.
wp.Runtime.ToggleDrawRuntimeCellsDetails 월드 파티션 런타임 스트리밍 셀의 디버그 표시를 전환합니다.
wp.Runtime.ToggleDrawRuntimeHash2D 월드 파티션 런타임 해시의 2D 디버그 표시를 전환합니다.
wp.Runtime.ToggleDrawRuntimeHash3D 월드 파티션 런타임 해시의 3D 디버그 표시를 전환합니다.
wp.Runtime.ToggleDrawStreamingPerfs 월드 파티션 스트리밍 성능의 디버그 표시를 전환합니다.
wp.Runtime.ToggleDrawStreamingSources 월드 파티션 스트리밍 소스의 디버그 표시를 전환합니다.