레벨 스트리밍 볼륨(Level Streaming Volume) 은 레벨 스트리밍 프로세스를 지원하는 데 사용됩니다. 레벨을 캡슐화하는 간단한 방법을 제공할 뿐만 아니라, 플레이어가 볼륨에 들어오거나 나가는 시점에 따라 메모리에서 스트리밍 인 또는 스트리밍 아웃하는 시점을 제어할 수도 있습니다.
아래 그림과 같이 디테일(Details) 패널에서 프로퍼티를 조정하여 레벨 스트리밍 볼륨의 레벨 스트리밍 처리 방식을 조정할 수 있습니다.
프로퍼티 | 설명 |
---|---|
스트리밍 레벨(Streaming Levels) | 볼륨의 영향을 받는 레벨을 표시합니다. |
에디터 사전 시각화 전용(Editor Pre Vis Only) | 스트리밍 볼륨을 에디터 스트리밍 레벨의 시각화에만 사용할지를 결정합니다. |
비활성화됨(Disabled) | True인 경우, 스트리밍 볼륨 코드가 이 스트리밍 볼륨을 무시합니다. 또한, 레벨과의 연결을 끊지 않으면서 레벨 스트리밍 볼륨을 비활성화하거나 레벨 스트리밍 컨트롤을 블루프린트와 볼륨 스트리밍 간에 토글하는 용도로도 사용됩니다. |
스트리밍 사용(Streaming Usage) | 볼륨의 용도를 결정합니다(예: 로딩, 로딩과 비저빌리티, 비저빌리티(로드 시 차단) 중 어느 것을 제어할지 결정). |
스트리밍 볼륨을 레벨과 연결하기
볼륨 기반 레벨 스트리밍은 다음과 같은 방식으로 작동합니다. 각 스트리밍 레벨은 한 세트의 레벨 스트리밍 볼륨과 연결될 수 있습니다. 매 프레임마다 엔진은 각 레벨을 반복작업하고 플레이어의 뷰포인트가 해당 레벨과 연관된 레벨 스트리밍 볼륨 안에 있는지 확인합니다. 플레이어의 뷰포인트가 최소 하나의 레벨 스트리밍 볼륨 안에 있는 경우, 해당 레벨의 로딩을 시작하도록 요청합니다. 뷰포인트가 모든 레벨 스트리밍 볼륨의 밖에 있는 경우, 레벨에는 언로딩이 예약됩니다.
중요 정보
-
모든 레벨 스트리밍 볼륨은 반드시 퍼시스턴트 레벨 안에 있어야 합니다. 다른 레벨 안에 배치된 레벨 스트리밍 볼륨은 레벨 스트리밍에 사용할 수 없으며, 맵의 오류 확인 시 경고를 보냅니다.
-
어떤 레벨에 그와 연관된 스트리밍 볼륨이 있는 경우, 해당 레벨을 스트리밍하는 다른 방법들은 정상 작동하지 않습니다.
-
하나의 레벨 스트리밍 볼륨이 여러 레벨에 영향을 줄 수 있습니다. 마찬가지로, 여러 레벨 스트리밍 볼륨이 하나의 레벨에 영향을 줄 수 있습니다.
-
볼륨 기반 스트리밍은 분할 화면에서도 작동합니다. 로딩/언로딩을 요청하기 전에 모든 로컬 플레이어의 뷰포인트를 고려합니다.
스트리밍 볼륨 설정 테스트하기
볼륨 기반 레벨 스트리밍을 타깃 플랫폼의 게임에서 테스트해보는 것은 매우 중요합니다. 에디터에서 플레이(Play in Editor, PIE) 모드에서 스트리밍하면 로딩/언로딩이 발생하는 위치를 보여줍니다. 하지만 에디터에서 플레이(PIE) 스트리밍이 실제 게임 속 로딩/언로딩을 제대로 반영하지는 않습니다. 왜냐하면 PIE 모드에서는 레벨이 이미 메모리에 있으므로 레벨을 '로딩'하는 것은 단지 숨겼던 레벨을 즉시 보여주는 동작일 뿐이기 때문입니다.
스트리밍 설정이 제대로 작동하는지 확인할 때 타깃 플랫폼의 독립형 게임으로 레벨을 실행하는 것은 매우 중요합니다. 플랫폼에 따라 레벨에 스트리밍을 받는 작업은 몇 초 정도 걸릴 수 있습니다. 플레이어가 도달할 수 있을 만한 시간에 레벨이 로드되도록 레벨 스트리밍 볼륨의 크기를 적당히 조절해야 합니다. 레벨 로딩 동작은 레벨과 연관된 레벨 스트리밍 볼륨 크기를 조정하여 수정할 수 있습니다. 볼륨을 키우면 연관된 레벨이 빨리 로드되었다가 늦게 언로드되며, 볼륨을 줄이면 늦게 로드되었다가 빨리 언로드됩니다.
사전 시각화용 레벨 스트리밍 볼륨
레벨 스트리밍 볼륨에 에디터 사전 시각화 전용 플래그만 설정하면 레벨 스트리밍 볼륨을 에디터 사전 시각화 전용으로 예약할 수 있습니다. 이 방법으로 볼륨 기반 레벨 스트리밍을 에디터 사전 시각화용으로 사용하면서 동시에 다른 스트리밍 방법을 사용하여 게임 안으로 스트리밍을 받을 수도 있습니다.
레벨 스트리밍 볼륨 비용
각 프레임에서 UWorld::ProcessLevelStreamingVolumes
가 각 스트리밍 레벨을 반복작업하며, 각 레벨에서 로컬 플레이어가 해당 레벨과 연관된 볼륨 안에 있으면
레벨을 로드하기 시작합니다. 마찬가지로 모든 로컬 플레이어가 모든 볼륨의 밖에 있으면 레벨을 언로딩하기 시작합니다.
UWorld::ProcessLevelStreamingVolumes
는 다음과 같은 일관성 있는 방식으로 활용합니다. 각 레벨마다 가장 최근에 플레이어를 포함했던 볼륨을 캐시합니다. 이렇게 캐시된 볼륨부터 먼저 확인함으로써
플레이어가 현재 있거나 돌아온 레벨이 재빨리 허용되게 만듭니다.
볼륨의 모양은 무엇이든 괜찮지만 숫자는 당연히 적을수록 좋습니다. 레벨 스트리밍 볼륨의 비용 상한선은 언로드된 레벨과 연관된 레벨 스트리밍 볼륨 수의 합계로 근사치를 계산할 수 있습니다.
두 통계는 레벨 스트리밍 퍼포먼스 모니터링을 위해 '스트리밍(Streaming)' 통계 그룹 아래에 있습니다. '스트리밍 볼륨(Streaming Volumes)' 통계는 프레임당 플레이어 뷰포인트와 비교하여 테스트한 레벨 스트리밍 볼륨 수를 추적하며,
볼륨 스트리밍 틱(Volume Streaming Tick)
통계는 프레임당 UWorld::ProcessLevelStreamingVolumes
에서 소모한 시간을 추적합니다.
언로딩 요청에 이력 현상 추가하기
플레이어가 레벨 스트리밍 볼륨의 경계를 넘나들면 불필요한 로드 및 언로드가 요청될 수 있습니다. 이 문제를 해결하기 위해 이력 현상을 언로딩 요청에 추가했습니다. 로딩 요청에는 이력 현상이 발생하지 않습니다. 그 이유는 레벨을 로딩해야 할 때는 언제나 최대한 빨리 로딩하기 때문입니다.
언로딩 이력 현상의 양은 레벨 창에 있는 스트리밍 레벨의 볼륨 언로드 요청 간 최소 시간(Min Time Between Volume Unload Requests) 프로퍼티를 변경하여 조정할 수 있습니다. 기본 언로딩 이력 현상은 2.0초입니다.
레벨 스트리밍 볼륨 비활성화하기
레벨 스트리밍 볼륨에는 bDisabled 라는 프로퍼티가 있습니다. 이 프로퍼티를 활성화하면, 게임과 에디터 양쪽에서 스트리밍 볼륨 코드가 해당 볼륨을 무시합니다. bDisabled 는 레벨과의 연결을 끊지 않으면서 레벨 스트리밍 볼륨을 비활성화하는 데 사용합니다.
bDisabled 플래그가 유용한 경우의 예로는 스트리밍 볼륨으로 스트리밍을 제어하는 레벨로 이끄는 문을 상상해볼 수 있습니다. 이 스트리밍 볼륨은 문 너머로 확장되므로 플레이어가 문에 도착하여 문을 열 때쯤에 레벨이 스트리밍됩니다. 하지만 문은 처음에는 잠겨 있습니다. 플레이어가 해당 레벨의 다른 지역에서 목표를 달성해야 잠긴 문이 풀립니다. 따라서 비록 스트리밍 볼륨이 문 너머로 확장된 상태지만 그 문의 잠금이 풀려 열 수 있는 상태가 되기 전까지는 문의 반대편 레벨을 스트리밍으로 받지 않아야 합니다.
블루프린트와 C++ 중 어느 것이든 사용해서 레벨 스트리밍 볼륨 의 비활성 상태를 토글할 수 있습니다.