UDN
Search public documentation:

LevelStreamingVolumesKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 레벨 스트리밍 > 레벨 스트리밍 볼륨

레벨 스트리밍 볼륨


문서 변경내역: Dave Burke 작성.

개요


이 문서는 볼륨 기반의 레벨 스트리밍 사용 방법에 관한 개요를 담고 있습니다. 이 문서는 독자들이 이미 Level Streaming How-To 에서 설명된, 레벨 스트리밍의 기초에 익숙하다는 것을 전제로 씌여졌습니다.

레벨 스트리밍 볼륨은 아주 쉽게 레벨 스티리밍을 콘트롤할 수 있도록 해줍니다. 그 착상은 간단합니다: 관찰 위치가 레벨과 결합된 LevelStreamingVolume 볼륨의 내부에 있는지 아닌지에 따라 스트리밍 레벨에 대한 로드/언로드 요청이 보내지는 것입니다.

구체적으로, 레벨 스트리밍 볼륨은 두 가지 방법으로 사용됩니다:

  • 게임 에서는, 레벨 스트리밍 볼륨이 플레이어가 볼륨의 내부에 있을 때는 레벨이 로드되게 하고, 볼륨의 외부에 있을 때는 언로드되도록 합니다.

  • 에디터 에서 레벨 스트리밍 볼륨은 Perspective Viewport(투시 뷰포트)의 카메라 위치에 따라 레벨을 자동으로 감추거나 드러냄으로써, 레벨 스트리밍을 미리보기 하는데 사용됩니다.

볼륨 기반의 레벨 스트리밍은 사용이 간단하고 Kismet 스크립팅이 전혀 요구되지 않으므로, 레벨 스트리밍을 콘트롤하기에 이상적인 방법입니다. 게다가, 볼륨 기반의 레벨 스트리밍은 스크립트된 스트리밍보다 관리하기가 훨씬 쉽습니다: 시스템 로딩에 대한 요구가 바뀌는 경우에는, 간단히 스트리밍 볼륨의 크기를 조절함으로써 레벨의 로딩/언로딩 행태를 변경할 수 있습니다.

스트리밍 볼륨과 레벨 결합하기


볼륨 기반의 레벨 스트리밍은 다음과 같이 작용합니다: 각 스트리밍 레벨은 이와 결합된 LevelStreamingVolume 타입의 볼륨 세트를 가집니다. 각 프레임에서 엔진은 레벨을 하나하나 반복하면서 플레이어의 관찰 지점이 해당 레벨과 결합된 LevelStreamingVolume 의 내부에 있는지를 점검합니다. 관찰 지점이 적어도 하나의 LevelStreamingVolume 내부에 있으면, 그 레벨의 로딩을 시작하기 위한 요청이 이루어집니다. 관찰 지점이 모든 LevelStreamingVolume 의 외부에 있으면, 그 레벨은 언로드용으로 표시됩니다.

스트리밍 볼륨을 레벨과 결합하려면:

  1. LevelStreamingVolume을 Persistent Level (지속성 레벨)에 넣습니다 (다른 볼륨에 대해 하는 것과 마찬가지로 메인 에디터의 툴바에서 "Add Volume" 버튼을 사용);
  2. Level Browser에서 이 볼륨과 결합할 레벨(들)을 선택하고, 오른 클릭으로 Level Browser 의 컨텍스트 메뉴를 연 다음 "Add Streaming Volumes" 를 선택합니다.

이것이 전부입니다!

다음은 Level Browser 의 컨텍스트 메뉴에 나타나 있는, LevelStreamingVolume 이 하는 연산의 목록입니다:

%PUBUR%/Three/LevelStreamingVolumes/LevelBrowserMenu.jpg

  • Add Streaming Volumes: 기존의 결합을 모두 유지하면서 레벨(들)의 볼륨에 추가.

  • Set Streaming Volumes: 레벨(들)의 볼륨을 선택된 볼륨과 똑같게 설정. 기존의 결합은 모두 파괴함.

  • Clear Streaming Volumes: 선택된 레벨(들)에서 스트리밍 볼륨의 관계를 모두 지움.

  • Select Associated Streaming Volumes: 선택된 레벨(들)과 관련된 볼륨을 모두 선택.

스트리밍 볼륨들은 시야를 어지럽히기 쉽기 때문에, LevelStreamingVolume 은 Level Browser 에서 1) 눈에 보이고; 또 2) 선택된 레벨에서만 볼 수 있습니다. 따라서, 방금 그 볼륨과 결합시킨 레벨의 선택을 해제하면 에디터의 뷰포트에서 그 볼륨이 사라지는 것을 확인 할 수 있습니다. Level Browser 에서 그 레벨을 다시 선택하면 결합된 볼륨이 다시 나타납니다.

중요한 세부 사항들


  • 모든 LevelStreamingVolume 들은 반드시 지속성 레벨에 있어야 합니다. 다른 종류의 레벨에 있는 LevelStreamingVolume 들은 레벨 스트리밍에 사용될 수 없으며, 맵의 오류를 점검할 때 경고를 내보내게 됩니다.

  • "Kismet" 의 스트리밍 방법을 사용해서 세계에 추가된 레벨들만이 볼륨 기반의 레벨 스트리밍을 사용할 수 잇습니다.

  • 한 레벨이 그와 결합된 스트리밍 볼륨을 가지고 있을 경우에는, 다른 레벨 스트리밍 방법 (예: distance 스트리밍이나 kismet 스트리밍)은 그 레벨에서 올바로 작용하지 않게 됩니다.

  • 하나의 LevelStreamingVolume 은 여러 레벨에 영향을 미칠 수 있습니다. 마찬가지로 한 레벨이 여러 LevelStreamingVolume 들로부터 영향을 받을 수 있습니다.

  • 볼륨 기반의 스트리밍은 화면을 분할하는데도 이용됩니다. 로딩/언로딩 요청이 이루어지기에 앞서 모든 로컬 플레이어의 관찰 지점이 고려됩니다.

스트리밍 볼륨 설정의 테스트


볼륨 기반의 레벨 스트리밍을 대상 플랫폼의 게임에서 테스트하는 일은 매우 중요합니다. "Play in Editor" (PIE, 에디터에서 게임하기)에서의 스트리밍은 로드/언로드가 이루어질 지점 을 보여주지만, PIE에서의 스트리밍은 실제의, 게임에서의 로딩/언로딩을 나타내는 것이 아닙니다. 이는 PIE에서는 레벨들이 이미 메모리에 들어가 있으며, 따라서 레벨을 “로딩”한다는 것은 그저 이를 순간적으로 드러내는 것에 불과하기 때문입니다.

레벨을 대상 플랫폼의 독립형 게임에서 실행하는 것은 스트리밍의 설정이 바르게 되어 있는지 확인하는데 아주 중요합니다. 어떤 플랫폼에서는 레벨에서 스트림을 하는데 수 초가 걸린다는 점을 염두에 두십시요. LevelStreamingVolume의 크기를 적절하게 조절하여, 플레이어가 그 레벨에 이르렀을 때는 레벨이 로드되어 있도록 하십시요. 그 레벨과 결합되어 있는 LevelStreamingVolume의 크기를 조절함으로써 레벨이 로드되는 행태를 변경할 수 있습니다. 볼륨을 키우면 결합된 레벨이 더 빠르게 로드되고 더 천천히 언로드됩니다. 한편 볼륨을 줄이면 레벨이 천천히 로드되고 빠르게 언로드됩니다.

미리보기용 레벨 스트리밍 볼륨


%PUBUR%/Three/LevelStreamingVolumes/PrevisButton.jpg

Perspective Viewport의 툴바에 있는 "Level Streaming Volume Previs" 버튼을 유효화하면 볼륨 기반 레벨 스트리밍을 미리보기 할 수 있습니다. 이 모드가 유효화 되어 있으면 레벨들은 Perspective Viewport의 카메라 위치에 따라 드러나거나 감추어집니다. 이 감춤/드러냄은 Level Browser에서 볼 수 있는 레벨의 세트에 영향을 준다는 것을 명심하십시요.

LevelStreamingVolume은 오직 LevelStreamingVolume의 bEditorPreVisOnly 플래그 설정에 의해서만 에디터 previs 용으로 표시될 수 있습니다. 이렇게 하면, 게임에서의 스트리밍에 다른 스티리밍 방법을 사용하는 동안에도 동시에 에디터 previs 용의 볼륨 기반 레벨 스트리밍을 사용할 수 있습니다.

레벨 스트리밍 볼륨의 비용


각 프레임에서 UWorld::ProcessLevelStreamingVolume은 각 스트리밍 레벨을 반복하고, 각 레벨에 대해 그 레벨과 결합된 볼륨 내에 로컬 플레이어가 있는 경우에는 그 레벨을 로드하기 시작 합니다. 마찬가지로, 모든 로컬 플레이어들이 모든 볼륨의 외부에 있으면 언로드를 시작합니다.

UWorld::ProcessLevelStreamingVolume은 다음과 같은 방법으로 밀착성을 활용합니다: 각 레벨에서 가장 최근에 플레이어를 가진 볼륨이 캐시됩니다. 이 캐시된 볼륨이 가장 먼저 점검되며, 따라서 현재 플레이어가 있거나 플레이어가 다시 돌아온 레벨이 빨리 받아들여집니다.

볼륨은 어떤 모양이라도 괜찮지만, 분명히 그 수가 더 적을수록 좋습니다. 레벨 스트리밍 볼륨의 비용 상한선은 언로드된 레벨들과 결합되어 있는 레벨 스트리밍 볼륨 수의 합계에 가깝습니다 .

레벨 스트리밍의 성능을 모니터하는 “스트리밍” 통계 그룹에는 두 가지의 통계가 있습니다. "Streaming Volumes" 통계는 프레임당 플레이어의 관찰 지점에 대해 테스트된 LevelStreamingVolume의 수를 추적하며, "Volume Streaming Tick" 통계는 프레임당 UWorld::ProcessLevelStreamingVolume에서 소비된 시간의 합계를 추적합니다.

언로딩 요청에 이력 추가하기


LevelStreamingVolume의 경계를 이리저리 왔다갔다 하는 플레이어는 잘못된 로드/언로드 요청이 이루어지게 하는 원인이 됩니다. 이 문제를 해결하기 위해 언로딩 요청에 이력이 추가됩니다. 레벨이 로드되어야 할 경우에는 그것이 될수 있는대로 빨리 로드되어야 하기 때문에, 로딩 요청에는 이력이 없습니다.

언로딩 이력의 양은 LevelStreaming 객체의 MinTimeBetweenVolumeUnloadRequests 속성을 변경함으로써 조정할 수 있습니다. (LevelStreaming 속성은 Level Browser의 콘텍스트 메뉴에서 접근할 수 있습니다). 언로딩 이력의 기본값은 2.0 초로 설정되어 있습니다.

레벨 스트리밍 볼륨의 무효화


LevelStreamingVolume에는 bDisabled라는 속성이 있습니다. 이것을 TRUE로 설정하면, 그 볼륨은 게임에서나 에디터에서 모두 스트리밍 볼륨 코드에 의해 무시됩니다. bDisabled는 레벨로부터 결합을 풀지 않고 LevelStreamingVolume을 무효화하는데 사용됩니다. bDisabled는 또, Toggle Kismet 액션을 통해 게임에서 레벨의 스트리밍 콘트롤을 Kismet에서 볼륨 스트리밍으로, 또는 그 반대로 서로 바꾸는데 사용됩니다. Kismet과 볼륨 기반의 스트리밍 사이를 왔다갔다 하는 것은 위험하고 오류가 발생하기 쉬우며 이는 반드시 필요한 경우에만 사용되어야 한다는 점을 유의하십시요.

bDisabled 플래그가 유용하게 쓰이는 것을 보여주는 한 예로서, 스트리밍 볼륨에 의해 스티리밍이 콘트롤되는 레벨로 이끄는 문을 상상해 보십시요.

%PUBUR%/Three/LevelStreamingVolumes/bDisabledUsage.jpg

위 그림에서 플레이어는 왼쪽으로부터 접근하며, 스트림해 들어갈 레벨은 문의 오른쪽에 있습니다. 스트리밍 볼륨은 문을 지나 왼쪽으로 뻗습니다. 따라서 플레이어가 문에 도달해서 문을 열 수 있을 때까지는 레벨이 스트림해 들어올 것입니다. 그러나, 그 문은 기본적으로 잠그어져 있으며, 플레이어가 맵의 다른 부분에서 어떤 목표를 달성해야 열리게 될 것입니다. 그러므로 비록 스트리밍 볼륨이 문 너머까지 뻗어나간다 해도, 문의 자물쇠가 실제로 풀리지 않는 한 (“열 수 있도록”), 문 저편의 레벨이 스트림해 들어오는 것은 바람직하지 않습니다.

이를 성취하는 방법은 에디터에서 레벨 스트리밍 볼륨을 bDisabled로 표시한 다음, 목표에 도달했을 때 Kismet에서 Toggle 액션을 사용해서 이 객체의 bDisabled를 FALSE로 합니다. 이렇게 하면, LevelStreamingVolume이 "켜지고" 레벨은 플레이어가 문에 도착했을 때 스트림해 들어올 것입니다.