언어:
페이지 정보
태그:
엔진 버전:
언리얼 엔진

레벨 스트리밍 개요

언리얼 엔진

레벨 스트리밍 기능은, 메모리에 맵을 로드/언로드하거나 그 표시여부(visibility)를 토글시키는 작업 모두 플레이 도중 할 수 있도록 해 주는 기능입니다. 월드를 작은 덩어리로 잘개 쪼개, 언제고 관련이 있는 부분만 리소스를 차지하여 렌더되도록 할 수 있는 것입니다. 제대로만 해 주면 매우 커다란 심리스 게임을 만들 수 있으며, 여기서는 플레이어가 난장이 세상같은 크기의 월드에서 플레이하는 것과 같은 느낌을 줄 수 있습니다.

퍼시스턴트 레벨

다수의 레벨을 끊김 없이 로드되도독 만들기 위한 첫 단계는 퍼시스턴트 레벨을 만드는 것입니다. 이는 레벨의 스트림 인/아웃 여부를 관장하는 데 주로 사용되는 마스터 레벨로 생각해 볼 수 있습니다.

스트리밍 레벨

스트리밍 레벨은 레벨 을 통해 관리됩니다. 퍼시스턴트 레벨에 겹칠 수도 있고, 약간 빗겨 배치하는 방식으로 거대한 월드를 만들 수도 있습니다. 각각의 스트리밍 레벨은 스트리밍 유형을 Always Loaded (항상 로드됨) 또는 Blueprint (블루프린트) 로 설정할 수 있습니다. 이 설정을 레벨 창에서 서브레벨에 우클릭하여 껐다켰다 할 수 있습니다.

스트리밍 레벨을 Always Loaded (항상 로드됨)으로 설정하면, 퍼시스턴트 레벨과 같이 로드됩니다. 보이는 시점도 퍼시스턴트 레벨과 마찬가지입니다. 연결된 스트리밍 볼륨 뿐 아니라, 블루프린트 또는 C++ 에서 전송된 로드 / 언로드 요청도 무시합니다. 이러한 유형의 서브레벨은 보통 퍼시스턴트 레벨에 있는 콘텐츠를 다수의 레이어 에 나누어, 여러 명의 아티스트가 서로의 작업을 방해하지 않고 병렬 작업할 수 있도록 하는 데 쓰입니다. 이러한 작업방식 관련 상세 정보는, 서브레벨 공동작업 문서를 참고하세요. 게임에서 Always Loaded (항상 로드됨) 서브레벨은 게임에서 퍼시스턴트 레벨을 변경하지 않는 한 절대 스트림 아웃 되지 않습니다.

퍼시스턴트 레벨만

레벨 스트림 인 이후

동적인 스트리밍 방법

Blueprint (블루프린트) 스트리밍 유형으로 레벨을 스트리밍하면 레벨 스트리밍 볼륨, 블루프린트, C++ 코드로 스트리밍을 제어할 수 있습니다. 동적인 로드 / 언로드 제어가 가능한 것입니다.

레벨 스트리밍 볼륨

Level Streaming Volumes (레벨 스트리밍 볼륨)이 있으면 레벨 스트리밍 제어가 매우 쉬워집니다. 개념은 간단합니다: 어느 한 레벨에 연결된 레벨 스트리밍 볼륨 안에 시점이 있는지에 따라 그 스트리밍 레벨에 대한 로드/언로드 요청을 하는 것입니다.

구체적으로, 레벨 스트리밍을 활용할 수 있는 방법은 두 가지입니다:

  • 게임 에서, 레벨 스트리밍 볼륨은 플레이어의 시점이 볼륨 안에 있을 때 레벨을 로드하고, 볼륨 밖에 있을 때 레벨을 언로드하도록 만듭니다.

  • 에디터 에서, 레벨 스트리밍 볼륨은 원근 뷰포트 카메라의 위치에 따라 레벨을 자동으로 숨기고/해제하는 식으로 레벨 스트리밍을 미리보는 데 사용됩니다.

볼륨 기반 레벨 스트리밍은 사용하기 쉽고 별도의 스크립트가 필요치 않아, 레벨 스트리밍 제어에 이상적인 방식입니다. 게다가 볼륨 기반 레벨 스트리밍은 스크립트 방식 스트리밍보다 관리하기가 훨씬 쉽습니다: 로드 시스템에 필요한 부분이 바뀌면, 스트리밍 볼륨 크기를 조정하는 것만으로도 레벨 로드/언로드 작동방식을 변경할 수 있습니다.

스크립트 레벨 스트리밍

레벨 로드 / 언로드를 위의 잠긴 문 예제처럼 보다 복잡한 방식으로 구성하려면, 블루프린트나 C++ 로직을 사용하여 레벨 로드 / 언로드 구성을 하면 됩니다. 여기서 핵심이 되는 함수는 Load Stream LevelUnload Stream Level 이며, 그 뒤에 레벨을 이름으로 지정하면 됩니다.

Load Stream LevelUnload Stream Level 에 추가로, Get Streaming Level 함수로 보다 동적인 방식의 스트리밍도 가능합니다. 실제 레벨 스트리밍 오브젝트에 대한 접근 권한을 주는 것이므로, 그 상태를 변경 또는 질의할 수 있습니다. 이 함수와 Create Instance 를 같이 사용하면, 특정 서브레벨의 사본을 스트림 인 시킬 수도 있습니다. 그 사본에 트랜스폼을 적용하고 파라미터를 전송하는 식으로, 절차적 생성 방식의 월드를 만들 수 있습니다.