새소식

개발/UE4

[UE4] Level Streaming cvar 변수 나열 및 분석

  • -

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를 찾아야 한다.
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.