레벨 인스턴싱

레벨 인스턴싱 및 프로젝트에서 레벨 인스턴싱을 사용하는 방법을 소개합니다.

Choose your operating system:

Windows

macOS

Linux

레벨 인스턴싱(Level Instancing)은 월드 파티션이 아닌 월드를 월드 파티션 시스템으로 쉽게 이식할 수 있게 해주는 레벨 기반 워크플로입니다. 레벨 인스턴싱은 다음 기능을 사용하여 복잡한 스트리밍 전략을 생성하는 데 사용할 수 있습니다.

  • 특별하게 설계된 액터를 사용하여 트랜스폼으로 레벨 인스턴싱

  • 런타임에서 같은 레벨의 여러 인스턴스 스트리밍. 이전 버전의 언리얼 엔진에서는 지원되지 않았던 기능입니다.

  • 서브레벨 내에서 추가 서브레벨의 계층형 중첩

예를 들어, 월드 파티션을 사용하여 많은 수의 액터로 맵을 채울 수 있습니다. 액터를 특별하게 배열하고 재사용해야 하는 경우, 레벨 인스턴스는 기존 레벨 뷰를 대체하는 컨텍스트 내 편집 워크플로를 제공합니다.

월드 파티션을 사용하지 않고도 레벨 스트리밍을 사용할 수는 있지만, 월드 파티션 메인 월드 외부에서는 레벨 인스턴스의 스트리밍 관리나 스트리밍 전략이 자동으로 처리되지 않습니다.

레벨 인스턴스 생성하기

새로운 레벨 인스턴스는 선택한 액터로부터 생성되며 뷰포트아웃라이너 에서 생성할 수 있습니다.

이미지 대체 텍스트

액터를 선택한 다음, 해당 액터 중 하나를 우클릭하여 컨텍스트 메뉴를 불러오고 선택에서 생성(Create from selection) 을 선택합니다.

다음과 같은 세팅이 있는 대화 상자가 표시됩니다.

이미지 대체 텍스트

세팅

설명

타입(Type)

레벨 인스턴스 타입:

  • 레벨 인스턴스

  • 패킹된 레벨 인스턴스

  • 패킹된 레벨 인스턴스 블루프린트

외부 액터(External Actors)

외부 액터가 액터당 한 개의 파일 시스템을 사용할 수 있습니다. 자세한 정보는 액터당 한 개의 파일 문서를 참조하세요.

피벗 타입(Pivot Type)

레벨 인스턴스가 갖게 될 피벗 타입:

  • Center Min Z: 가장 낮은 Z 값의 레벨 인스턴스 중앙에 피벗이 위치합니다.

  • Center: Pivot: 레벨 인스턴스 중앙에 피벗이 위치합니다.

  • Actor: 피벗이 지정된 액터 중앙에 위치합니다.

피벗 액터(Pivot Actor)

액터가 피벗으로 선택된 경우, 이 드롭다운을 사용하여 레벨 인스턴스의 피벗 포인트가 될 액터를 선택합니다.

세팅을 선택하고 나면, 새 레벨 인스턴스를 저장하겠냐고 묻는 메시지가 표시됩니다.

이 프로세스는 이전에 선택한 액터를 대체하는 새 ALevelInstance 액터를 레벨에 생성합니다. 이 액터는 방금 생성된 레벨을 나타내며, 이 액터에 적용된 모든 트랜스폼이 레벨 인스턴스에 적용됩니다.

이미지 대체 텍스트

아웃라이너 에서 레벨 액터는 회색으로 표시되는데, 이는 현재 선택하거나 편집할 수 없기 때문입니다.

이미지 대체 텍스트

ALevelInstance 액터를 레벨로 드래그하고 디테일(Details) 패널에서 .umap 파일을 할당할 수도 있습니다.

일반 레벨 생성 템플릿과 비슷한 엔트리를 사용하여 언리얼 엔진 .ini 파일을 통해 레벨 인스턴스 템플릿을 제공할 수 있습니다. 프로젝트의 DefaultEditor.ini 파일에 다음을 추가하면 됩니다.

[/Script/LevelInstanceEditor.LevelInstanceEditorSettings]
+TemplateMapInfos=(ThumbnailTexture=Null,Map="/Game/Maps/Tools/TM-Template")

패킹된 레벨 인스턴스

패킹된 레벨 인스턴스는 레벨의 스태틱 메시를 최대한 적은 스태틱 메시 인스턴스로 그룹화하려고 시도하는 레벨 인스턴스 타입입니다.

다음과 같은 두 가지 패킹된 레벨 인스턴스 타입이 있습니다.

  • 패킹된 레벨 인스턴스 : 패킹 프로세스가 ALevelInstance 액터 위치를 중심으로 한 패킹된 레벨 인스턴스를 생성합니다.

  • 패킹된 레벨 인스턴스 블루프린트 : 패킹 프로세스가 블루프린트에서 참조할 수 있는 레벨 인스턴스를 생성합니다.

스태틱 메시가 아닌 액터와 컴포넌트는 패킹 프로세스에 포함되지 않으며, 소스 레벨에 별도로 남아 있습니다.

레벨 인스턴스를 패킹해도 레벨 작업 시 편집 워크플로가 변경되지 않습니다.

패킹된 레벨 인스턴스는 현재 실험단계 기능이며, 향후 버전의 언리얼 엔진에서는 변경되거나 제거될 수도 있습니다.

레벨 인스턴스 편집하기

레벨 인스턴스는 뷰포트나 디테일 패널의 컨텍스트에서 편집할 수 있습니다.

이미지 대체 텍스트

위에 보이는 것처럼, 편집 모드를 열려면 다음을 수행합니다.

  1. 뷰포트에서 레벨 인스턴스를 선택합니다.

  2. 우클릭하여 컨텍스트 메뉴를 엽니다.

  3. 메뉴의 레벨 인스턴스 섹션에서 편집(Edit) 옵션 위로 커서를 가져간 다음, 편집하려는 레벨을 선택합니다.

편집 모드는 디테일(Details) 패널에서도 열 수 있습니다.

이미지 대체 텍스트

편집하려는 레벨 인스턴스를 선택한 다음, 디테일(Details) 패널에서 편집 버튼을 클릭합니다.

런타임 시 레벨 스트리밍

임베디드 모드

임베디드 모드(Embedded Mode) 사용 시, 액터당 한 개의 파일(One File Per Actor, OFPA) 시스템 을 사용하는 레벨 인스턴스는 무시되고 해당 액터가 런타임에서 월드 파티션 그리드에 추가됩니다. 임베디드 모드는 디폴트 런타임 모드이며 권장되는 레벨 콘텐츠 스트리밍 메서드입니다. 또한, 이 모드는 레벨 인스턴스가 에디터 내에만 존재하도록 합니다.

임베디드 모드를 사용하면 런타임 시 OFPA를 사용하지 않는 일부 액터가 소실됩니다. 예를 들어, 임베디드 레벨 인스턴스의 AWorldSettings 오브젝트는 OFPA 액터가 아니므로 런타임 시 존재하지 않습니다.

사용자가 알아서 이러한 액터에 의존하지 않거나 필요시 레벨 스트리밍 모드를 사용해야 합니다.

레벨 스트리밍 모드

OFPA를 사용하지 않는 레벨 인스턴스는 월드 파티션 그리드에 임베드될 수 없으며, 런타임에서 표준 레벨 스트리밍을 대신 사용합니다. 즉, 소유한 월드 파티션 런타임 셀을 통해 ALevelInstance 액터가 로드될 때, 연결된 레벨이 로드됩니다.

이 레벨 스트리밍 메서드는 스트림에 더 많은 레벨을 추가하므로 런타임 비용이 추가됩니다. 퍼포먼스에 영향을 주기 때문에 이 스트리밍 모드를 사용하는 고밀도 레벨을 사용하는 것은 권장되지 않습니다.

월드 파티션: 데이터 레이어(World Partition: Data layers) 기능을 사용한 임베디드 모드는 이전에 동적으로 로드된 레벨로 수행할 수 있었던 작업을 비슷하게 처리할 수 있는 좋은 방법입니다.

데이터 레이어

레벨 인스턴스는 임베디드 모드나 레벨 스트리밍 모드를 사용할 때 월드 파티션: 데이터 레이어 기능을 지원합니다. 레벨 인스턴스에 포함된 액터는 ALevelInstance 액터로부터 데이터 레이어를 상속받습니다.