PART 2 - 강의 3/4

다중 그리드 설정

오브젝트 타입별 최적화된 스트리밍 거리 구성

01

다중 그리드 개념

왜 그리드를 분리해야 하는가

모든 액터에 동일한 로딩 거리를 적용하면 메모리 낭비게임플레이 문제가 발생합니다. 다중 그리드로 오브젝트 타입별 최적화가 가능합니다.

Close Grid

게임플레이 필수 오브젝트 (NPC, 상호작용 아이템). 작은 셀, 짧은 거리, 높은 우선순위.

Medium Grid

일반 환경 오브젝트. 중간 셀 크기, 중간 거리, 기본 우선순위.

Far Grid

원거리 배경 요소. 큰 셀, 긴 거리, 낮은 우선순위.

Foliage Grid

식생 전용. 별도 로딩 거리로 폴리지 최적화.

02

그리드 설정 방법

World Settings에서 다중 그리드 구성

World Settings 경로 World Settings > World Partition > Runtime Settings > Grids 각 그리드에 대해 설정: - Grid Name: 고유 이름 - Cell Size: 그리드 셀 크기 (cm) - Loading Range: 로딩 시작 거리 (cm) - Priority: 로딩 우선순위 (높을수록 먼저) - Debug Color: 시각화 색상
그리드 Cell Size Loading Range Priority 용도
CloseGrid 6400 (64m) 12800 (128m) 100 게임플레이 필수
MediumGrid 12800 (128m) 51200 (512m) 50 일반 환경
FarGrid 25600 (256m) 102400 (1km) 10 배경 요소
FoliageGrid 12800 (128m) 76800 (768m) 25 식생
03

액터별 그리드 할당

에디터와 C++에서 그리드 지정

에디터에서 설정

Editor 1. 액터 선택 2. Details 패널 > World Partition 카테고리 3. Runtime Grid 프로퍼티에 그리드 이름 입력 예: "FoliageGrid", "CloseGrid" 등

C++에서 기본값 설정

C++ // 특정 액터 타입에 기본 그리드 지정 UCLASS() class AMyImportantNPC : public ACharacter { GENERATED_BODY() public: AMyImportantNPC() { // CloseGrid에 배치되도록 기본값 설정 SetRuntimeGrid(TEXT("CloseGrid")); } }; UCLASS() class ABackgroundDecoration : public AActor { GENERATED_BODY() public: ABackgroundDecoration() { // FarGrid에 배치 SetRuntimeGrid(TEXT("FarGrid")); } };
블루프린트에서 설정

블루프린트 클래스 기본값에서 World Partition > Runtime Grid 프로퍼티를 설정하면 해당 블루프린트의 모든 인스턴스에 적용됩니다.

04

그리드 시각화 및 디버깅

런타임에서 그리드 상태 확인

Console Commands // 2D 그리드 시각화 wp.Runtime.ToggleDrawRuntimeHash2D // 3D 그리드 시각화 wp.Runtime.ToggleDrawRuntimeHash3D // 스트리밍 디버그 정보 wp.Runtime.ShowDebugStreaming 1 // 각 그리드에 설정한 Debug Color로 표시됨

2D 시각화

위에서 본 그리드 형태. 셀 경계와 로드 상태를 평면으로 표시합니다.

3D 시각화

월드 공간에 셀 박스를 표시. 로드/언로드 상태를 색상으로 구분합니다.

05

그리드 설계 가이드라인

효율적인 그리드 구성 전략

설계 원칙
  • 게임플레이 우선 - 상호작용 가능한 오브젝트는 항상 높은 우선순위
  • 시각적 연속성 - 갑자기 나타나면 어색한 오브젝트는 긴 로딩 거리
  • 메모리 예산 - 총 로드 셀 수가 메모리 한도를 넘지 않도록
  • 프레임 예산 - 한 프레임에 너무 많은 셀이 로드되지 않도록
흔한 실수

모든 것을 CloseGrid에 넣으면 메모리 폭발, 모든 것을 FarGrid에 넣으면 게임플레이 필수 오브젝트가 제때 로드되지 않습니다. 적절한 분류가 중요합니다.

SUMMARY

핵심 요약

  • 오브젝트 타입별로 다중 그리드를 구성하여 최적화
  • 게임플레이 필수 오브젝트는 높은 Priority짧은 Loading Range
  • 배경 요소는 낮은 Priority긴 Loading Range
  • 액터의 Runtime Grid 프로퍼티로 그리드 할당
  • wp.Runtime.ToggleDrawRuntimeHash로 디버깅
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: 오브젝트 타입별 그리드 분리

World Settings에서 RuntimePartition에 Landscape, Buildings, Foliage, Audio 각각의 그리드를 생성하고, CellSize와 LoadingRange를 타입별로 다르게 설정하세요. 액터의 RuntimeGrid 프로퍼티를 설정합니다.

실습 2: 그리드별 스트리밍 거리 최적화

Landscape(CellSize: 51200, Range: 50000), Building(CellSize: 25600, Range: 25000), Foliage(CellSize: 12800, Range: 15000)로 설정하고, 메모리 사용량과 시각적 품질의 균형을 확인합니다.

심화 과제

액터의 클래스/태그/크기를 기반으로 적절한 RuntimeGrid에 자동 할당하는 에디터 유틸리티를 구현하세요. FWorldPartitionActorDesc를 순회하며 규칙 기반으로 그리드를 배정합니다.