월드 컴포지션 사용 안내서

원점 시프트 기술을 포함한 대규모 월드 관리 시스템입니다.

Windows
MacOS
Linux

World Composition (월드 컴포지션)은 대규모 월드의 관리를 단순히 하기 위해 디자인된 툴입니다. 그 목표 중 하나는 퍼시스턴트 레벨을 사용하여 스트리밍 정보를 저장하지 않도록 함으로써, 다수의 레벨 디자이너 팀이 동시에 레벨 작업을 하고자 할 때 발생하는 병목현상을 해결하기 위해서입니다. 퍼시스턴트 레벨에는 스트리밍 정보가 저장되지 않는 대신, 폴더를 검색하여 발견된 레벨을 스트리밍 레벨로 간주합니다. 각 스트리밍 레벨에는 패키지 헤더에 정보가 저장되어, 월드 컴포지션은 레벨을 메모리에 로드하지 않고도 정보를 읽을 수 있습니다. 기본적으로 퍼시스턴트 레벨을 제외한 모든 레벨은 월드 컴포지션에 언로드된 상태입니다. 언제든지 월드의 어느 부분이든 수정으로 로드 또는 언로드할 수 있습니다.

월드 컴포지션은 거리 기반 레벨 스트리밍에 사용되는 월드 원점 시프트 기능에 의존하는데, 이를 통해 엔진에 하드코딩된 상수값인 WORLD_MAX 에 구애받지 않는 거대한 월드를 만들 수 있습니다.

월드 컴포지션 활성화

월드 컴포지션 관리 월드는 월드 세팅 에서 Enable World Composition 옵션을 켜는 것으로 활성화시킬 수 있습니다.

월드 세팅Enable World Origin Rebasing 옵션을 끄는 것으로 월드 원점 시프트 기능을 끌 수도 있습니다.

WorldBrowserSettings.png

레벨 계층구조

월드 컴포지션을 활성화시키고 나면, 프로젝트에 있는 모든 레벨이 레벨 창에 보일 것입니다. 이 창을 열려면, 메뉴에서 레벨 을 선택합니다.

레벨 창의 항목이 월드 계층구조를 나타냅니다.

LevelsWindow.png

이름이 파랑색 글씨로 표시된 레벨이 현재 레벨입니다. 현재 로드되어 있는 레벨은 흰 글씨로 표시되는 반면, 언로드된 레벨은 회색으로 탈색된 이름으로 표시됩니다.

월드 컴포지션에 레벨을 로드하려면, 그냥 이름을 더블클릭 하면 됩니다. 드래그 앤 드롭으로 각 레벨 사이의 관계를 설정할 수 있습니다. 자손 레벨은 부모 레벨을 기준으로 위치를 저장하므로, 부모 레벨의 위치를 변경하면 모든 자손 레벨도 그에 따라 위치를 재계산합니다.

레벨 창에서 레벨 고정 및 저장 뿐만 아니라, 레벨 이름 오른편의 버튼으로 각 레벨에 대한 레벨 블루프린트 를 열 수도 있습니다.

레벨 컴포지션

Enable World Composition 옵션이 켜지면, 레벨 창 상단에 월드 컴포지션 을 여는 버튼이 생깁니다.

WorldComposition.png

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

world_layout.png

레이어

기본적으로 모든 레벨은 Uncategorized 레이어에 할당되어 있습니다. 레이어는 스트리밍 거리에 대한 정보를 저장하여, 특정 레이어에 할당된 레벨은 그 스트리밍 거리를 상속받습니다. 스트리밍 거리가 꺼진 레이어에 할당된 레벨은 거리 스트리밍에서 배제되지만, 대신 블루프린트를 통해 제어 가능합니다.

기존 레이어 이름 오른편에 있는 + 버튼을 클릭하여 새 레이어를 만들 수 있습니다. 각 레벨은 한 번에 한 레이어에만 할당 가능합니다.

레이어는 삭제 또는 편집할 수 없으므로, 스트리밍 거리 세팅을 변경하고자 하는 경우, 원하는 세팅으로 레이어를 새로 만든 다음 거기에 레벨을 할당하세요. 할당된 레벨이 없는 레이어는 다음 번 레벨을 열 때 자동 삭제됩니다.

미니맵 위의 레이어 이름을 클릭하면 레벨에 레이어 필터를 적용할 수 있습니다. Ctrl+클릭 으로 다수의 레이어 토글이 가능합니다. 켜진 레이어가 없는 경우, 필터가 적용되지 않습니다.

미니맵

퍼시스턴트 레벨을 제외한 각 레벨에는 미니맵에 표시되는 이미지와 월드 내 위치가 있습니다. 레벨 이미지는 레벨의 콘텐츠에 변화가 있을 때마다 업데이트됩니다. 이 맵을 통해 월드를 위에서 미리보면서 레벨을 잡아 끌어 위치를 조정할 수 있습니다. 레벨을 끌면, 다른 레벨의 가장자리에 붙습니다. Ctrl 키를 누르고 있으면 레벨 에디터의 스냅 세팅을 사용하여 레벨이 이동됩니다. 참고로 레벨 위치는 정수 좌표값으로 저장되므로, 인접한 레벨 타일이 정확히 일치되도록 하려면 레벨의 바운드 값을 정수로 해야 합니다.

랜드스케이프 액터를 기반으로 하는 레벨에는 기본 랜드스케이프 컴포넌트 크기에 따른 스냅 세팅이 있습니다. 이는 다른 레벨의 랜드스케이프 액터 사이의 매끄러운 편집이 가능하도록 하기 위함입니다.

모든 랜드스케이프 액터에는 트랜스폼이 꺼져 있는데, 랜드스케이프를 임의로 이동시켜 다른 랜드스케이프 레벨과의 정렬이 틀어지지 않도록 하기 위해서입니다.

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

기본적으로 레벨 바운드 액터는 레벨에서 찾은 모든 액터를 포함하도록 크기를 자동 조절합니다. 그러나 스카이 박스같은 일부 액터는 바운딩 박스가 매우 커서 월드 미니맵에 과도하게 큰 레벨 타일이 생길 수 있습니다. 이러한 액터가 있어 레벨 바운드 계산에 포함시키고 싶지 않은 경우, 자동 레벨 바운드 계산을 끄고 레벨 바운드 액터에 고정된 크기를 설정하면 됩니다.

transform.png

현재 레벨 바운드 액터의 정상 작동을 위해서는 뷰포트에 실시간 기능이 켜져있어야 합니다.

미니맵의 노랑 사각형은 안전 편집 영역을 나타냅니다. 안전 편집 영역의 크기는 엔진의 WORLD_MAX 상수와 같습니다. 이 영역 밖의 레벨은 자동으로 숨겨지며, 그 레벨 이미지는 이것을 반영합니다. 월드 컴포지션 은 작업중인 레벨을 에디터 월드 원점에 가깝게 유지하려고 합니다. 이 기능을 포커싱 이라고 하며, 안전 편집 영역 밖에서 레벨 편집을 시작하면 현재 월드 원점이 새 위치로 시프트될 수 있습니다. 시프트된 레벨은 여전히 그 액터가 저장되었을 당시의 원래 트랜스폼 정보를 보존하고 있기에, 현재 시프트된 레벨을 저장해도 액터의 절대 위치는 바뀌지 않습니다.

UI 키

world_layout_UI.jpg

번호

상태 바

설명

1

레이어

레이어 이름에 클릭하면 그 레이어 필터를 토글하며, + 를 클릭하면 새 레이어를 만듭니다.

2

WORLD_MAX

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

3

월드 원점

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

4

현재 레벨

현재 레벨의 이름입니다.

5

마우스 커서 위치

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

6

범위 선택

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

7

월드 크기

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

레벨 디테일

레벨 창의 아무 레벨에 대한 디테일을 확인하려면, 선택한 다음 툴바에 있는 확대경 아이콘을 클릭하면 됩니다. 그러면 레벨 디테일 창이 떠, 드롭다운 메뉴로 정보를 확인할 수 있는 레벨을 전환할 수도 있습니다.

level_details.png

타일 세팅

세팅

설명

Package Name

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

Parent Package Name

부모 패키지 이름 - 부모 레벨의 패키지 이름으로, 레벨에 부모가 지정된 경우 위치는 그 부모 레벨을 기준으로 합니다.

Position

위치 - 제로 월드 원점에서의 레벨 오프셋입니다. 정수 2D 벡터로 저장됩니다. 레벨의 모든 액터는 레벨이 월드에 추가될 (보일) 때 이 값 만큼 시프트시키며, 월드에서 제거될 (숨길) 때 그만큼 역으로 시프트시킵니다.

Absolute Position

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

Z Order

Z 순서 - 미니맵 레벨 타일의 Z 소팅 순서를 정의합니다. 겹치는 레벨이 여럿 있는 경우, 특정한 순서로 배치하고자 할 때 좋습니다.

LOD 세팅

월드를 이루는 각 레벨은 최대 4 개의 LOD 스트리밍 레벨을 가질 수 있습니다. LOD 스트리밍 레벨은 메시 LOD 와 비슷한 개념입니다. 스트리밍 거리 세팅에 따라서 스트리밍 레벨은 그에 해당하는 LOD 레벨로 대체됩니다. LOD 레벨은 월드 컴포지션이 [Package name]_LOD# 패턴을 사용하여 자동으로 발견하며, 여기서 # 은 1 에서 4 까지입니다. LOD 레벨은 수동으로 또는 Simplygon 이 필요한 자동 LOD 맵 생성기로 생성 가능합니다.

언리얼 엔진 4 에는 Simplygon 이 통합되어 있지만, 사용하려면 Simplygon 라이선스가 필요합니다.

세팅

설명

Num LOD

LOD 수 - 선택된 레벨의 LOD 레벨 갯수입니다.

LOD[1..4]

Generate

생성 - 원본 레벨의 단순화된 버전을 생성합니다. 레벨에서 발견된 스태틱 메시 액터를 하나의 단순화된 프록시 메시로 병합하는 데는 Simplygon ProxyLOD 기능을 사용합니다. 랜드스케이프 액터는 최고 랜드스케이프 LOD 를 사용하여 스태틱 메시로 변환됩니다. 일반적으로 랜드스케이프 액터와 스태틱 메시 액터가 다수 있는 경우, 두 개의 단순화된 스태틱 메시 액터가 나옵니다. 이 작업은 디스크에 있는 기존 LOD 레벨을 덮어씁니다.

Distance

거리 - 원본 레벨 스트리밍 거리를 기준으로 한 거리입니다. 예를 들어 원본 레벨의 스트리밍 거리가 1000 이고, LOD1 레벨의 거리가 1500 인 경우, LOD1 레벨이 보이는 범위는 [1000..2500] 이고, 원본이 보이는 범위는 [0..1000] 입니다.

Details percentage

디테일 백분율 - 원본 메시 감소시 보존을 디테일 백분율입니다.

월드 원점 시프트

월드 컴포지션 에디터는 월드 원점을 임의의 양만큼 시프트하는 기능을 지원합니다. 월드 원점을 시프트하면 월드에 등록된 모든 액터에 오프셋 벡터를 추가하는 결과가 납니다. 각 액터에는 ApplyWorldOffset (월드 오프셋 적용) 함수가 있어, 자손 클래스에서 추가적인 작업을 위해 덮어쓸 수 있습니다. AActor 파생 클래스를 새로 생성하여 그 안에 절대 위치값을 저장한 경우, 월드 원점 이동과 함께 정상 작동하게 만들려면 ApplyWorldOffset 함수를 덮어써서 그 안에 절대값으로 시프트해야 합니다. 렌더링과 피직스 프리미티브는 게임 스레드에서 액터에 평행으로 시프트됩니다.

거대 월드와 멀티플레이어

현재 월드 원점 시프트는 멀티플레이어 게임에 지원되지 않습니다. 필요에 따라 구현할 수 있는 솔루션 두 가지는 이렇습니다:

  1. 별도의 서버 솔루션 구현. 대부분의 MMO 라이선시에서 직접 하고 있습니다.

  2. 클라이언트와 언리얼 데디케이티드 서버 사이에 약간의 레이어를 구현, 클라이언트에서 시프트된 절대 위치에 트랜스폼을 적용하여, 클라이언트의 실제 위치를 유일하게 저장하고 있는 올바른 데디케이티드 서버로 경유시켜 주는 것입니다.

하지만 월드 원점, 시프팅을 끈 경우, 데디케이티드 서버에서는 타일형 월드를 실행할 수 있습니다. 데디케이티드 서버는 거리 독립적 레벨을 전부 로드하여, 연결된 각 클라이언트는 스트리밍 거리 세팅을 만족하는 레벨만 로드하도록 평소처럼 작동할 것입니다. 서버는 각 클라이언트에서 보이는 레벨 목록을 저장하고, 이 목록에 따라 액터 리플리케이션을 필터링합니다.

랜드스케이프 레벨 만들기

랜드스케이프 액터가 들어있는 레벨 타일에 우클릭 하여 컨텍스트 메뉴를 띄우면, 랜드스케이프 프록시 액터가 포함된 인접 레벨을 추가하는 옵션이 나타납니다. 그러기 위해서는 인접 레벨의 랜드스케이프가 소스 랜드스케이프 크기와 같도록 해야 합니다.

타일형 랜드스케이프 임포트

레벨 패널 툴바에서 타일형 랜드스케이프를 임포트하는 옵션을 찾을 수 있습니다. 타일형 랜드스케이프는 타일형 하이트맵에서 생성되며, 각 하이트맵 타일은 그 안에 랜드스케이프 액터가 들어있는 레벨을 나타냅니다. 타일형 하이트맵/웨이트맵은 World Machine 같은 어플리케이션에서 익스포트 가능합니다. 인접한 하이트맵 타일은 경계 버텍스를 공유해야 합니다 (World Machine 의 "Share edge vertices"). 그리고 각 타일 해상도는 랜드스케이프 만들기 페이지의 추천 사항을 따라야 합니다..

tiled_heightmap_import.png

세팅

설명

Select Heightmap Tiles...

하이트맵 타일 선택... - 임포트하려는 다수의 하이트맵 타일을 선택할 수 있습니다.

Flip Tile Y Coordinate

타일 Y 좌표 반전 - 타일의 Y 좌표를 반전시켜 임포트할지 입니다. World Machine 에서 만든 타일 임포트시 켜야 하는 옵션입니다.

Tile Coordinates Offset

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

Import Configuration

임포트 환경설정 - 선택된 타일 해상도에 따라 가능한 랜드스케이프 환경설정을 전부 생성합니다.

Landscape Scale

랜드스케이프 스케일 - 타일형 랜드스케이프에 적용할 스케일입니다.

Material

머티리얼 - 사용할 머티리얼입니다. 머티리얼이 선택되면, 머티리얼에서 찾은 각 랜드스케이프 레이어에 웨이트맵 타일을 할당하고 각 레이어 블렌딩 방식을 설정하는 것이 가능할 것입니다.

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

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼