Streaming Asset Cvar
World.cpp 파일의 AddToWorld 에서 사용되는 command variable를 설명한다.
- s.UseBackgroundLevelStreaming
- 만약 UseBackgroundLevelStreaming가 true라면 load 중 block이 되지 않는다.
- s.GLevelStreamingComponentsRegistrationGranularity
- 커맨드 이름 : s.LevelStreamingComponentsRegistrationGranularity
- Timelimit이 지나지 않고 로드해야 할 Streaming Asset이 남아있다면
- 이 정수 값만큼씩 한 프레임마다 로드한다.
- s.LevelStreamingActorsUpdateTimeLimit
- Timelimit은 AddToWorld의 한 스탭마다 확인되며, 한 스탭은 아래와 같다.
- Applying level transform to level actors (FLevelUtils::ApplyLevelTransform)
- Applying world offset to level (ULevel::ApplyWorldOffset)
- Updating level components (ULevel::IncrementalUpdateComponents)
- Initializing level actors (ULevel::InitializeNetworkActors)
- Routing various initialization functions (ULevel::RouteActorInitialize())
- Sorting actor list (ULevel::SortActorList)
- 만약 너무 작은 Timelimit을 가지면, 월드가 로드 되기 전 플레이어가 접근해 나락으로 떨어지거나 하는 버그가 나올 수 있다.
- 만약 너무 큰 Timelimit을 가지면 잦은 문제를 일으킬 수 있다.
- s.PriorityLevelStreamingActorsUpdateExtraTime
- LevelStreamingActorsUpdateTimeLimit과 거의 같지만, 우선순위를 가진 컨텐츠를 로드할 때 사용한다.
- s.LevelStreamingComponentsUnregistrationGranularity
- GLevelStreamingComponentsRegistrationGranularity 와 흡사하지만, 이것은 World에서 Level을 제거할 때 사용된다.
- 'RevmoeFromWorld'의 2번째 파라미터 'bAllowIncrementalRemoval'가 true여야만 timesliced하게 등록해제 과정이 진행된다.
- s.GLevelStreamingForceGCAfterLevelStreamedOut
- 커맨드 이름 : s.ForceGCAfterLevelStreamedOut
- 강제적인 gc 는 게임의 잦은 문제를 일으킨다.
- GLevelStreamingForceGCAfterLevelStreamedOut은 두 곳에서 사용된다.
- 'UpdateLevelStreaming' 을 보면, GLevelStreamingForceGCAfterLevelStreamedOut 가 0이 아닌 경우 다음 틱에 GC를 강제한다.
- s.GLevelStreamingContinuouslyIncrementalGCWhileLevelsPendingPurge
- 커맨드 이름 : s.ContinuouslyIncrementalGCWhileLevelsPendingPurge
- 'LevelStreaming.cpp' 내 'UPdateStreamingState' 함수에서 사용된다.
- 'GLevelStreamingForceGCAfterLevelStreamedOut'는 Force하게 GC를 하는 반면 이 변수를 이용하면 Soft하게 GC를 수행해 최적화를 이룰 수 있다. 하지만 항상 옳은 것은 아니니 Profile을 수행하며 더 좋은 Tradeoff를 찾아야 한다.