월드 파티션 처리된 스태틱 내비게이션 메시

월드 파티션 처리된 스태틱 내비게이션 메시 사용법 개요입니다.

Choose your operating system:

Windows

macOS

Linux

이 문서에서는 언리얼 엔진의 월드 파티션(World Partition) 시스템으로 월드 파티션 처리된 내비게이션 메시(Navigation Mesh) 를 사용하는 방법을 간략히 알아봅니다.

월드 파티션(World Partition)은 대규모 월드를 관리하기에 완벽한 솔루션인 자동 데이터 관리 및 거리 기반 레벨 스트리밍 시스템입니다. 기존에 대규모 레벨을 서브레벨로 나누려면 그리드 셀로 나뉘는 단일 퍼시스턴트 레벨에 월드를 저장해야 했던 것과 달리, 자동 스트리밍 시스템인 월드 파티션은 스트리밍 소스와의 거리에 따라 셀을 로드, 언로드합니다.

시스템에 대한 추가 정보는 월드 파티션 문서를 참조하세요.

이 문서에서는 월드 파티션 처리된 스태틱 내비게이션 메시만 다룹니다.

1 - 필수 구성

  1. 게임(Games) 카테고리에 있는 템플릿으로 새 프로젝트를 생성합니다. 이 예시에서는 삼인칭(Third Person) 템플릿을 선택했습니다.

    새 프로젝트 생성

  2. 에디터에서 파일(File) > 새 레벨(New Level) 을 클릭합니다. Open World 맵 타입을 선택하고 생성(Create) 을 클릭합니다. 레벨을 저장합니다.

    새 오픈 월드 레벨 생성

    오픈 월드 디폴트 맵 타입은 대규모 오픈 월드 맵을 만들기 위한 출발점으로 사용할 수 있도록 설계되었으며, 다음 기능이 디폴트로 활성화되어 있습니다.

    • 월드 파티션(World Partition)

    • 액터당 한 개의 파일(One File Per Actor)

    • 데이터 레이어(Data Layers)

    • HLOD(Hierarchical Levels of Detail)

  3. 월드 세팅(World Settings) 창으로 이동하여 월드 파티션(World Partition) 섹션으로 내려갑니다.

    1. 런타임 세팅(Runtime Settings) > 그리드(Grids) > 인덱스

      [0](Index [0])
      을 펼칩니다.

    2. 로딩 범위(Loading Range) 값을 12800 으로 변경합니다. 값이 작으면 내비게이션 메시가 월드 파티션으로 로드될 때 시각화하기가 더 쉽습니다.

    새 오픈 월드 레벨 생성

섹션 결과

이 섹션에서는 새 프로젝트와 월드 파티션을 사용하도록 설정된 레벨을 생성했습니다. 다음 섹션에서는 내비게이션 메시가 월드 파티션과 함께 작동하도록 구성하겠습니다.

2 - 월드 파티션을 사용할 내비게이션 메시 구성

  1. 세팅(Setting) > 프로젝트 세팅(Project Settings) 을 클릭하여 프로젝트 세팅 창을 엽니다.

    세팅 > 프로젝트 세팅을 클릭해 프로젝트 세팅 창 열기

  2. 내비게이션 메시(Navigation Mesh) 카테고리를 클릭하고 런타임(Runtime) 섹션으로 내려갑니다. 런타임 생성(Runtime Generation) 드롭다운을 클릭하고 Static 을 선택합니다.

    런타임 생성 드롭다운을 클릭하고 Static 선택

  3. 더 큰 맵의 경우 고정 타일 풀 크기(Fixed Tile Pool Size) 체크박스를 활성화 하고 타일 풀 크기(Tile Pool Size) 를 설정하여 타일 풀이 사용할 메모리의 양을 제한할 수 있습니다. 풀 크기를 설정할 때는 타일을 충분히 포함하여 모든 월드 파티션 셀이 로드될 때 해당하는 내비메시 타일도 함께 로드되게 해야 합니다.

    고정 타일 풀 크기 체크박스 활성화 및 타일 풀 크기 설정

  4. 추가(+) > 볼륨(Volumes) > NavMeshBoundsVolume 을 클릭하여 내비게이션 메시(Navigation Mesh) 볼륨 액터를 레벨에 추가합니다.

    내비게이션 메시 볼륨 액터를 레벨에 추가

  5. 아웃라이너(Outliner) 창에서 NavMeshBoundsVolume 액터를 선택하고 디테일(Details) 패널로 이동합니다.

    1. 액터가 레벨 내의 플레이 가능 공간을 모두 덮도록 스케일(Scale)을 조절합니다.

    2. P 를 눌러 내비게이션이 빌드되는 것을 뷰포트에서 확인합니다.

    아웃라이너 창에서 NavMeshBoundsVolume 액터 선택

    P를 눌러 내비게이션이 빌드되는 것을 뷰포트에서 확인

  6. 아웃라이너(Outliner) 창에서 RecastNavMesh-Default 를 선택하고 디테일(Details) 패널로 이동합니다. 생성(Generation) 섹션으로 내려가 월드 파티션 여부(Is World Partitioned) 체크박스를 활성화 합니다.

    아웃라이너 창에서 RecastNavMesh-Default 액터 선택

    월드 파티션 여부 체크박스 활성화

섹션 결과

이 섹션에서는 내비게이션 메시 바운드 볼륨을 레벨에 추가했습니다. 월드 파티션과 함께 작동할 내비게이션 메시도 구성했습니다.

다음 섹션에서는 워크플로를 개선하기 위해 에디터를 환경설정하겠습니다.

3 - 에디터 환경설정

아주 큰 레벨에서 작업할 것이므로, 워크플로를 개선하기 위해 자동 내비게이션 메시 생성을 비활성화하는 것이 좋습니다.

그렇게 하려면 다음 단계를 따릅니다.

  1. 편집(Edit) > 에디터 개인설정(Editor Preferences) 을 클릭하여 에디터 개인설정(Editor Preferences) 창을 엽니다.

    편집 - 에디터 개인설정을 클릭하여 에디터 개인설정 창 열기

  2. 레벨 에디터(Level Editor) 섹션으로 내려가 기타(Miscellaneous) 카테고리를 클릭합니다. 편집(Editing) 카테고리에서 내비게이션 자동 업데이트(Update Navigation Automatically) 체크박스를 비활성화합니다.

    내비게이션 자동 업데이트 체크박스 비활성화

섹션 결과

이 섹션에서는 내비게이션 메시가 자동으로 업데이트되지 않도록 환경설정했습니다. 이렇게 하면 월드 파티션을 사용하여 대규모 월드를 작업할 때 일반적으로 워크플로가 개선됩니다.

다음 섹션에서는 레벨에 내비게이션 메시를 빌드하겠습니다.

4 - 내비게이션 메시 빌드

월드 파티션 처리된 맵으로 작업할 때 보통 일부 에셋은 로드되지만, 일부는 언로드됩니다. 그래서 전체 내비게이션 메시를 빌드하려면 다른 프로세스가 필요합니다.

레벨에 내비게이션 메시를 빌드하려면 다음 단계를 따릅니다.

  1. 명령줄에 다음 콘솔 명령을 입력하고 Enter 를 누릅니다. n.bNavmeshAllowPartitionedBuildingFromEditor 1

    n.bNavmeshAllowPartitionedBuildingFromEditor 1 명령 입력

  2. 빌드(Build) > 빌드 경로(Build Paths) 를 클릭하여 레벨에 내비게이션 메시를 빌드합니다.

    빌드 - 빌드 경로를 클릭하여 레벨에 내비게이션 메시 빌드

  3. 내비게이션 빌드 세팅(Build Navigation Settings) 창에서 확인(Ok) 을 클릭하여 내비게이션 메시를 빌드합니다. 다음과 같은 옵션도 사용할 수 있습니다.

    1. 상세(Verbose) - 더욱 자세한 빌드 프로세스 로그를 확인하려면 이 체크박스를 활성화합니다. 출력 로그는 프로젝트의 Saved > Logs 디렉터리에서 WPNavigationBuilderLog.txt 라는 이름으로 찾을 수 있습니다.

    2. 패키지 정리(Clean Packages) - 월드 파티션 처리된 내비메시 액터 패키지를 프로젝트에서 모두 제거하려면 활성화합니다. 이 옵션은 내비게이션을 빌드하지 않습니다.

    내비게이션 빌드 세팅 옵션

  4. 아웃라이너(Outliner) 창으로 이동하면 4개의 NavDataChunkActor 가 있습니다. 이 액터에는 월드 파티션으로 로드 및 언로드된 내비게이션 데이터가 있습니다. 생성되는 NavDataChunkActor의 수는 데이터 청크 그리드의 크기에 따라 달라집니다. 자세한 내용은 섹션 6을 참조하세요.

    아웃라이너 창으로 이동하면 4개의 NavDataChunkActor 있음

섹션 결과

이 섹션에서는 레벨에 내비게이션을 빌드하는 방법을 알아보았습니다. 또한 내비게이션 세팅 옵션을 살펴보고 레벨에서 NavDataChunkActor가 어떻게 생성되는지 알아보았습니다.

다음 섹션에서는 에디터 밖에서 내비게이션을 빌드하는 방법을 알아봅니다.

5 - 월드 파티션 내비게이션 데이터 빌더로 내비게이션 메시 빌드하기

월드 파티션 빌더 커맨드릿(WorldPartitionBuilderCommandlet)월드 파티션 내비게이션 데이터 빌더(WorldPartitionNavigationDataBuilder) 를 사용하여 에디터 밖에서 월드 파티션 처리된 스태틱 내비게이션 메시를 빌드할 수도 있습니다.

그 방법을 알아보려면 월드 파티션 문서의 월드 파티션 내비게이션 데이터 빌더(World Partition Navigation Data Builder) 섹션의 지시를 따르세요.

6 - 내비게이션 메시를 위한 추가 세팅

  1. 월드 세팅(World Settings) 창에서 내비게이션(Navigation) 섹션으로 내려가면 레벨에 대한 내비게이션 메시(Navigation Mesh) 세팅이 있습니다.

    옵션은 다음과 같습니다.

    세팅

    설명

    내비게이션 데이터 청크 그리드 크기(Navigation Data Chunk Grid Size)

    각 월드 파티션 셀에 로드되는 데이터 청크 액터의 크기를 정의합니다. 숫자가 적을수록 데이터가 더 상세해집니다.

    내비게이션 데이터 빌더 로딩 셀 크기(Navigation Data Builder Loading Cell Size)

    내비게이션 데이터를 메모리에 로드하는 데 사용되는 로딩 셀의 크기를 정의합니다.

    내비게이션 데이터 청크 그리드 크기25600 으로 설정합니다. 이렇게 낮은 값으로 설정하면 내비게이션 메시가 월드 파티션으로 로드 및 언로드되는 모습이 더 잘 표시됩니다. 이 값은 게임플레이 요구 사항, 로딩 범위, 필요한 세분화 정도에 따라 조정해야 합니다.

    내비게이션 데이터 청크 그리드 크기를 25600으로 설정

  2. 빌드(Build) > 빌드 경로(Build Paths) 를 클릭하여 레벨에 내비게이션 메시를 빌드합니다.

  3. 아웃라이너(Outliner) 창으로 이동하면 레벨에 NavDataChunkActor 가 더 많아진 것을 볼 수 있습니다. 청크 그리드 크기가 줄어들었기 때문에 예상된 결과입니다.

    레벨에 **NavDataChunkActor** 가 더 많아진 모습

섹션 결과

이 섹션에서는 내비게이션 데이터 청크 그리드 크기를 변경하는 방법과 이 변경이 레벨에서 생성되는 NavDataChunkActor의 수에 미치는 영향을 알아보았습니다.

다음 섹션에서는 플레이어가 레벨에서 이동할 때 내비게이션 메시가 로드 및 언로드되는 방식을 알아봅니다.

7 - 결과 보기

다음 단계를 따르면 내비게이션 메시가 월드 파티션 셀에서 로드 및 언로드되는 모습을 확인할 수 있습니다.

  1. 명령줄에 다음과 같은 내비게이션 메시 게임플레이 디버거 콘솔 명령을 입력하고 Enter 를 누릅니다.

    1. ai.debug.nav.RefreshInterval 0.3

    2. ai.debug.nav.DisplaySize 100

    이 명령들은 디스플레이 크기와 내비게이션 메시의 시각화가 업데이트되는 빈도를 조정합니다.

    ai.debug.nav.DisplaySize 100 명령 입력

  1. 플레이(Play) 를 눌러 게임을 시작합니다. 물결표(~) 를 눌러 명령줄을 열고 다음 월드 파티션 디버그 명령을 입력합니다.

    1. wp.Runtime.ToggleDrawRuntimeHash2D

    2. wp.Runtime.ShowRuntimeSpatialHashGridLevel 2

    이 명령은 플레이어 주변에 어떤 월드 파티션 셀이 로드되는지 표시합니다.

    게임플레이 도중 플레이어 주변에 어떤 월드 파티션 셀이 로드되는지 표시

  2. 작은따옴표(‘) 를 눌러 게임플레이 디버거(Gameplay Debugger) 를 활성화하고, 숫자 0 을 눌러 내비게이션(Navigation) 뷰로 전환합니다. 이제 플레이어 주변에 내비게이션 메시가 로드되는 것을 볼 수 있습니다.

    이제 플레이어 주변에 내비게이션 메시가 로드되는 것을 볼 수 있음

  3. 레벨에서 돌아다니면서 플레이어 주변에 각 월드 파티션 셀이 로드될 때 내비게이션 메시가 어떻게 로드되는지 살펴봅니다.

    레벨에서 돌아다니면서 플레이어 주변에 내비게이션 메시가 어떻게 로드되는지 확인

    플레이어 주변에 로드되는 내비게이션 메시의 상단 뷰

섹션 결과

이 섹션에서는 내비게이션 메시가 월드 파티션으로 로드 및 언로드되는 모습을 시각화하는 방법을 알아보았습니다.