월드 컴포지션

원점 이동 기술 등 대규모 월드 관리를 위한 시스템입니다.

Choose your operating system:

Windows

macOS

Linux

월드 컴포지션(World Composition) 은 대규모 월드 관리를 간소화하기 위해 설계되었습니다. 그 목표 중 하나는 퍼시스턴트 레벨을 사용하여 스트리밍 정보를 저장하지 않도록 하는 것으로, 이 경우 레벨 디자이너 팀이 동시에 레벨 작업을 하려 할 때 병목 현상이 발생하기 때문입니다. 퍼시스턴트 레벨은 어떠한 스트리밍 정보도 저장하지 않습니다. 대신, 폴더를 스캔하여 발견된 모든 레벨을 스트리밍 레벨로 처리합니다. 각 스트리밍 레벨에는 패키지 헤더에 저장된 정보가 있으며, 월드 컴포지션은 메모리에 레벨을 로드하지 않고도 이 정보를 읽을 수 있습니다. 처음에는 퍼시스턴트 레벨을 제외한 모든 레벨이 월드 컴포지션에서 언로드됩니다. 월드의 어떤 부분이든 원할 때 수동으로 로드하거나 언로드할 수 있습니다.

월드 컴포지션은 거리 기반 레벨 스트리밍과 함께 사용될 때 월드 원점 이동 기능에 의존하므로, 엔진에 하드 코딩된 WORLD_MAX 상수 값에 국한되지 않는 월드를 만들 수 있습니다.

월드 컴포지션 활성화하기

월드를 관리하는 월드 컴포지션은 월드 세팅(World Settings) 에서 월드 컴포지션 활성화(Enable World Composition) 를 체크하여 활성화할 수 있습니다.

또한, 월드 세팅에서 월드 원점 리베이스 활성화(Enable World Origin Rebasing) 체크를 해제하여 월드 원점 이동을 비활성화할 수도 있습니다.

WorldBrowserSettings.png

레벨 계층구조

월드 컴포지션을 활성화한 다음에는 프로젝트의 모든 레벨이 레벨(Levels) 창에 표시됩니다. 이 창을 열려면, 창(Windows) 메뉴를 클릭한 다음, 레벨을 선택합니다.

레벨 창에 있는 항목은 월드의 계층구조를 나타냅니다.

LevelsWindow.png

이름이 파란색 텍스트로 된 레벨이 현재 레벨입니다. 현재 로드된 레벨의 이름은 흰색 텍스트로 표시되며, 언로드된 레벨 이름은 회색으로 표시됩니다.

월드 컴포지션에서 레벨을 로드하려면, 레벨 이름을 더블클릭 하면 됩니다. 드래그 앤 드롭을 사용하여 개별 레벨 간의 관계를 설정할 수 있습니다. 자손 레벨에는 부모 레벨에 대한 상대 위치가 저장되므로 부모 레벨의 위치를 변경하면 그에 따라 모든 자손 레벨의 위치가 다시 계산됩니다.

레벨 창에서 레벨 이름 오른쪽에 있는 버튼으로 레벨을 잠그고, 저장하고, 각 레벨의 레벨 블루프린트(Level Blueprint) 를 열 수 있습니다.

레벨 컴포지션

월드 컴포지션 활성화가 켜져 있으면, 레벨 창 상단에 월드 컴포지션을 여는 버튼이 있습니다.

WorldComposition.png

여기서 월드의 레이아웃을 볼 수 있습니다.

world_layout.png

레이어

기본적으로 모든 레벨은 미분류(Uncategorized) 레이어에 할당되어 있습니다. 레이어에는 스트리밍 거리에 대한 정보가 담겨 있으므로 특정 레이어에 할당된 레벨은 해당 스트리밍 거리를 상속받습니다. 스트리밍 거리가 비활성화된 레이어에 할당된 레벨은 거리 스트리밍에서 제외되며, 대신 블루프린트를 사용하여 제어할 수 있습니다.

기존 레이어 이름 옆에 있는 추가(+) 버튼을 클릭하여 새 레이어를 생성할 수 있습니다. 각 레벨은 한 번에 하나의 레이어에만 할당될 수 있습니다.

레이어는 삭제하거나 편집할 수 없으므로, 스트리밍 거리 세팅을 변경하고 싶다면 원하는 세팅으로 새 레이어를 생성하고 레벨을 그 레이어에 할당해야 합니다. 레벨이 할당되지 않은 레이어는 다음에 레벨을 열면 자동으로 삭제됩니다.

미니맵 위의 레이어 이름을 클릭하여 레이어별로 레벨을 필터링할 수 있습니다. Ctrl+마우스 클릭 을 사용하여 여러 레이어를 토글할 수 있습니다. 켜져 있는 레이어가 없으면 필터링이 수행되지 않습니다.

미니맵

퍼시스턴트 레벨을 제외한 각 레벨은 미니맵에 표시되는 월드에서의 위치와 이미지를 가지고 있습니다. 레벨의 이미지는 레벨의 콘텐츠가 변경될 때마다 업데이트됩니다. 이 맵을 통해 위에서 월드를 미리 보고 레벨을 드래그하여 위치를 정렬할 수 있습니다. 레벨을 드래그하면 레벨이 다른 레벨의 에지에 스냅됩니다. Ctrl 키를 누른 상태로 레벨을 이동하면 레벨 에디터(Level Editor)의 스내핑 세팅이 사용됩니다. 레벨 위치는 정수 좌표로 저장되므로 인접한 레벨 타일을 정확하게 맞추려면 레벨의 경계 크기가 정수여야 합니다.

랜드스케이프 액터를 기반으로 한 레벨은 베이스 랜드스케이프 컴포넌트 크기를 기반으로 스내핑됩니다. 이러한 스내핑은 다양한 레벨에서 랜드스케이프 액터 간의 원활한 편집을 위한 것입니다.

모든 랜드스케이프 액터는 에디터 뷰포트에서 변환이 비활성화되는데, 이는 랜드스케이프가 임의로 이동되는 일이나 다른 랜드스케이프 레벨과 정렬되는 기능을 잃지 않도록 하기 위한 것입니다.

월드 컴포지션에서 처음 레벨이 로드될 때, 새 레벨 바운드 액터가 자동으로 레벨에서 생성됩니다. 레벨 바운드 액터는 레벨 크기 계산에 사용됩니다.

기본적으로 레벨 바운드 액터는 레벨에서 찾은 모든 액터를 포함하도록 자동으로 크기를 조절합니다. 하지만, 스카이박스 같은 일부 액터에는 매우 큰 바운딩 박스가 있을 수 있으며, 이에 따라 월드 미니맵에서 레벨 타일이 지나치게 커질 수 있습니다. 레벨 바운드 계산에 포함하고 싶지 않은 이런 액터가 있다면, 자동 레벨 바운드 계산을 비활성화하고 레벨 바운드 액터에 대해 고정 크기를 설정할 수 있습니다.

transform.png

현재, 레벨 바운드 액터가 작동하려면 뷰포트에서 리얼타임(Realtime)을 활성화해야 합니다.

미니맵에는 안전한 편집 영역을 나타내는 노란색 사각형이 있습니다. 안전 편집 영역의 크기는 엔진의 WORLD_MAX 상수와 같습니다. 이 영역 밖에 있는 레벨은 자동으로 숨겨지며, 이는 해당 레벨 이미지에 반영됩니다. 월드 컴포지션은 작업 중인 레벨을 에디터 월드 원점에 가깝게 유지하려고 합니다. 이 기능을 '포커싱'이라고 하며, 안전한 편집 영역 밖에서 레벨 편집을 시작하면 현재 월드 원점이 새 위치로 이동할 수도 있습니다. 이동된 레벨은 저장될 때 여전히 액터의 원래 변형을 유지하므로 현재 이동된 레벨을 저장해도 액터의 절대 위치는 변경되지 않습니다.

UI 키

world_layout_UI.jpg

숫자

상태 표시줄

설명

1

레이어

레이어 이름을 클릭하여 해당 레이어로 필터링을 토글하거나, + 를 클릭하여 새 레이어를 생성합니다.

2

WORLD_MAX

WORLD_MAX 상수의 스케일을 나타내는 표시줄입니다.

3

월드 원점

현재 월드 원점의 위치입니다.

4

현재 레벨

현재 레벨의 이름입니다.

5

마우스 커서 위치

마우스 커서의 현재 월드 위치입니다.

6

범위 선택

월드 유닛의 범위 선택 박스 크기입니다.

7

월드 크기

모든 레벨 바운딩 박스의 합으로 계산된 월드의 크기입니다.

레벨 디테일

레벨 창에서 레벨의 디테일을 보려면, 레벨을 선택한 다음 툴바의 돋보기 아이콘을 클릭합니다. 그러면 레벨 디테일(Level Details) 창이 호출되고, 이 창에서 드롭다운 메뉴를 사용하여 이용할 수 있는 레벨의 정보 간 전환할 수도 있습니다.

level_details.png

타일 세팅

세팅

설명

Package Name

선택한 레벨의 패키지 이름입니다. 이 정보는 읽기 전용입니다.

Parent Package Name

부모 레벨의 패키지 이름입니다. 레벨에 지정된 부모가 있는 경우, 해당 레벨의 위치는 부모 레벨에 대해 상대적인 위치가 됩니다.

Position

정수 2D 벡터로 저장되는 월드 원점 0에서의 레벨 오프셋입니다. 레벨이 월드에 추가되면(표시되면) 레벨의 모든 액터는 이 값에 의해 이동되며 레벨이 월드에서 제거되면(숨겨지면) 다시 이동됩니다.

Absolute Position

레벨의 절대 위치입니다. 레벨에 부모가 없을 때의 위치 와 같습니다. 이 정보는 읽기 전용입니다.

Z Order

미니맵에서 레벨 타일의 Z 정렬 순서를 정의합니다. 이 세팅은 여러 개의 타일이 겹쳐 있고 특정 순서로 정렬하려 할 때 유용할 수 있습니다.

LOD 세팅

월드 컴포지션의 각 레벨은 최대 4개의 LOD 스트리밍 레벨을 가질 수 있습니다. LOD 스트리밍 레벨은 메시 LOD와 비슷합니다. 스트리밍 거리 세팅에 따라 스트리밍 레벨은 해당하는 LOD 레벨로 대체됩니다. LOD 레벨은 [패키지 이름]_LOD# 패턴을 사용하여 월드 컴포지션에 의해 자동으로 발견됩니다. 여기서 숫자는 1~4여야 합니다. LOD 레벨은 수동이나 자동 LOD 맵 생성기로 생성할 수 있습니다.

세팅

설명

Num LOD

선택한 레벨의 LOD 수입니다.

LOD[1..4]

Generate

레벨에 있는 스태틱 메시 액터를 하나의 단순화된 프록시 메시로 병합하기 위해 원래 레벨의 단순화된 버전을 생성합니다. 랜드스케이프 액터는 가장 높은 랜드스케이프 LOD를 사용하여 스태틱 메시로 변환됩니다. 일반적으로 랜드스케이프, 액터, 많은 스태틱 메시 액터가 있는 레벨은 2개의 단순화된 스태틱 메시 액터를 포함하는 LOD 레벨이 됩니다. 이 작업은 디스크에 있는 이전 LOD 레벨을 덮어씁니다.

Distance

원래 레벨 스트리밍 거리에 대한 상대 거리입니다. 예를 들어, 원래 레벨의 스트리밍 거리가 1,000이고 LOD1 레벨의 거리가 1,500이면, LOD1 레벨은 [1000..2500] 범위에 표시되고 원래 레벨은 [0..1000] 범위에 표시됩니다.

Details percentage

원본 메시를 줄일 때 유지할 디테일의 백분율입니다.

월드 원점 이동

월드 컴포지션 에디터에서는 임의의 양만큼 월드 원점 이동을 지원합니다. 월드 원점을 이동하면 월드에 등록된 모든 액터 에 오프셋 벡터가 추가됩니다. 각 액터에는 추가 작업을 하기 위해 자손 클래스에서 오버라이드될 수 있는 ApplyWorldOffset 함수가 있습니다. 새 AActor 파생 클래스를 생성하고 그 클래스에 절대 위치 값을 저장하는 경우, 월드 원점 변경에 따라 제대로 작동하고 그 안의 절대값을 이동하도록 ApplyWorldOffset 함수를 오버라이드해야 합니다. 렌더링 및 피직스 프리미티브는 게임 스레드의 액터와 병렬로 이동됩니다.

대규모 월드 및 멀티플레이어

현재 월드 원점 이동은 멀티플레이어 게임에서는 지원되지 않습니다. 필요에 따라 다음과 같은 두 가지 솔루션을 구현할 수 있습니다.

  1. 자체 서버 솔루션을 구현합니다. MMO 라이선시는 대부분 이 솔루션을 구현합니다.

  2. 클라이언트와 언리얼 데디케이티드 서버 간에 일부 레이어를 구현하여 클라이언트로부터 이동된 절대 위치를 변환하고 클라이언트가 있는 월드의 일부만 보유하는 올바른 데디케이티드 서버로 라우팅합니다.

하지만, 월드 원점 이동을 비활성화하면 데디케이티드 서버로 타일링된 월드를 실행할 수 있습니다. 데디케이티드 서버는 모든 거리 종속 레벨을 로드하고, 연결된 각 클라이언트는 스트리밍 거리 세팅을 충족하는 레벨만 로드하며 평소와 같이 작동합니다. 서버는 각 클라이언트에 대해 보이는 레벨 목록을 보유하고 이 목록으로 액터 리플리케이션을 필터링합니다.

랜드스케이프 레벨 생성

레벨 타일을 우클릭 하여 랜드스케이프 액터가 있는 컨텍스트 메뉴를 불러오면 랜드스케이프 프록시 액터가 있는 인접 레벨을 추가할 수 있는 옵션이 나타납니다. 이렇게 하려면 인접 레벨 랜드스케이프 크기가 소스 랜드스케이프 크기와 같아야 합니다.

타일링된 랜드스케이프 임포트

레벨 패널 툴바에 타일링된 랜드스케이프를 임포트할 수 있는 옵션이 있습니다. 타일링된 랜드스케이프는 타일링된 하이트맵으로부터 생성됩니다. 각 하이트맵 타일은 그 안에 랜드스케이프 액터가 있는 레벨을 나타냅니다. 타일링된 하이트맵/웨이트맵은 World Machine 같은 애플리케이션에서 익스포트할 수 있습니다. 인접 하이트맵 타일은 테두리 버텍스를 공유해야 합니다(World Machine의 '에지 버텍스 공유'). 그리고 각 타일 해상도는 이 페이지 랜드스케이프 생성의 권장 사항을 따라야 합니다.

tiled_heightmap_import.png

세팅

설명

하이트맵 타일 선택...(Select Heightmap Tiles...)

임포트할 여러 개의 하이트맵 타일을 선택할 수 있습니다.

타일 Y 좌표 뒤집기(Flip Tile Y Coordinate)

Y 좌표를 뒤집은 상태로 타일을 임포트할지 여부입니다. 이 옵션은 World Machine에서 생성된 타일을 임포트할 때 켜야 합니다.

타일 좌표 오프셋(Tile Coordinates Offset)

원점으로부터의 타일 오프셋입니다. 0으로 설정하면 x0_y0 좌표의 타일이 월드 원점에 생성됩니다.

환경설정 임포트(Import Configuration)

선택한 타일의 해상도에 따라 모든 가능한 랜드스케이프 환경설정을 생성합니다.

랜드스케이프 스케일(Landscape Scale)

타일링된 랜드스케이프 스케일 조절 양입니다.

머티리얼(Material)

사용할 머티리얼입니다. 머티리얼을 선택하면, 머티리얼에 있는 각 랜드스케이프 레이어에 대한 웨이트맵 타일을 할당하고 각 레이어 블렌딩 방식을 지정할 수 있습니다.

타일링된 랜드스케이프를 임포트한 경우, 미니맵의 우클릭 컨텍스트 메뉴를 사용하여 선택한 레벨에 대한 하이트맵과 웨이트맵을 리임포트할 수 있습니다.