Level streaming

스트리밍은 로드보다 수명 경계를 관리하는 일이다

Persistent Level은 공통 규칙을 유지하고, 서브 레벨이나 World Partition 셀은 플레이어 위치와 이벤트에 맞춰 들어왔다가 나간다. 핵심은 로드 완료 전 참조를 막고, 언로드 전에 상태와 연결을 정리하는 것이다.

Base 기준 레벨 게임 모드, 공통 액터, 전역 규칙은 계속 남긴다.
Load 로드 단위 서브 레벨, 셀, Data Layer를 상황별로 들고 난다.
Ready 검수 지점 보임, 참조, 메모리, 저장 상태를 분리해서 확인한다.

로드, 참조, 언로드 수명 주기

lifecycle map
01 진입 감지

거리, 볼륨, 퀘스트, Data Layer 상태로 필요한 구역을 결정한다.

02 로드 요청

LoadStreamLevel이나 World Partition 셀 로드가 시작된다.

03 완료 대기

레벨이 보이고 액터가 준비될 때까지 상호작용을 열지 않는다.

04 참조 갱신

스트리밍된 액터 접근 전 레벨 로드 상태와 유효성을 확인한다.

05 언로드 정리

멀어진 구역은 저장 상태를 남기고 참조를 끊은 뒤 메모리에서 내린다.

Manual Streaming 이벤트 타이밍이 중요할 때

던전 입구, 건물 내부, 컷신 구간처럼 언제 열릴지 직접 정해야 할 때 쓴다.

World Partition 넓은 월드를 자동으로 나눌 때

셀, Data Layer, HLOD를 함께 관리해 거리 기반 로드를 맡긴다.

Loop guard 반복 기준은 거리와 이벤트

월드를 숨기는 것이 아니라 필요한 공간만 끊김 없이 경험하게 한다.

운영 선택 매트릭스

streaming policy
로드 기준 수동 스트리밍은 볼륨, 퀘스트, 이벤트 타이밍으로 켠다. World Partition은 위치, 셀, Data Layer 상태로 자동 관리한다.
책임 위치 C++나 Blueprint가 요청과 완료 대기, 실패 처리를 명시한다. 엔진이 셀 로드를 맡고, C++는 상태 확인과 예외 제어에 집중한다.
협업 서브 레벨 단위로 구역을 나눠 작업 충돌을 줄인다. One File Per Actor와 Data Layer로 대규모 팀 작업을 분리한다.
검증 로드 완료 전 참조 금지, 언로드 전 저장 상태 정리를 본다. 셀 범위, HLOD, 시야 전환, Data Layer 상태를 함께 확인한다.

소유권과 참조 경계

reference boundary
A Persistent Level

공통 규칙, 게임 모드, 오래 살아야 하는 관리 액터를 둔다.

B Streamed Level

지역 액터와 환경 상태를 소유하고, 언로드와 함께 사라질 수 있다.

C Data Layer

퀘스트 단계, 시간대, 월드 상태별 액터 집합을 분리한다.

D C++ Guard

로드 여부, 액터 유효성, soft reference 해소 시점을 확인한다.

느린 참조 로드 전 액터 접근

레벨이 보이기 전에 actor pointer를 믿으면 null과 경합이 생긴다.

hard reference 묶여서 같이 로드

강한 참조가 많으면 분리한 구역이 함께 메모리에 올라온다.

state loss 언로드 전 저장 누락

문 열림, 적 처치, 퍼즐 진행은 지역 액터만 믿지 않는다.

visual seam 시야 안팎 전환

문, 코너, 엘리베이터처럼 플레이어가 변화를 덜 느끼는 곳에 둔다.

마무리 기준

스트리밍의 목표는 큰 월드를 숨기는 것이 아니라, 플레이어가 필요한 공간만 끊김 없이 경험하도록 책임을 나누는 것이다.