월드 파티션 - 계층형 레벨 오브 디테일

월드 파티션 월드에서 계층형 레벨 오브 디테일을 사용하는 방법입니다.

Choose your operating system:

Windows

macOS

Linux

월드 파티션(World Partition) 시스템은 그리드를 사용하여 런타임 시 월드를 다이내믹하게 로드되고 언로드될 수 있는 셀로 분리합니다. 하지만, 멀리 있는 산과 나무, 절벽 등 멀리 떨어져 있고 상호작용이 없는 액터를 계속 보이게 해야 할 때가 있습니다.

HLOD 꺼짐

HLOD 켜짐

HLOD 꺼짐. 로드된 셀의 콘텐츠만 표시됩니다

HLOD 켜짐. 언로드된 셀의 콘텐츠가 HLOD로 대체되었습니다.

월드 파티션 - 계층형 레벨 오브 디테일(World Partition - Hierarchical Level of Detail, HLOD) 시스템은 커스텀 HLOD 레이어를 사용하여 대량의 스태틱 메시 액터를 구성하고 단일 프록시 메시와 머티리얼을 생성합니다. 이 기법을 사용하여 언로드된 월드 파티션 그리드 셀을 시각화하고, 프레임당 드로 콜 수를 줄이고, 퍼포먼스를 향상할 수 있으며, 특히 대규모 오픈 월드와 함께 사용할 때 유용합니다.

랜드스케이프(Landscape)와 물(Water) 컴포넌트 같은 일부 월드 컴포넌트는 현재 HLOD 액터에서 지원되지 않습니다.

HLOD 레이어 생성

월드 파티션 HLOD는 HLOD 레이어 에셋으로 제어합니다. 이러한 특수 에셋에는 세팅이 포함되어 있으며, 프로젝트에서 여러 HLOD 레이어를 사용할 수 있습니다.

이미지 대체 텍스트

  1. HLOD 레이어 에셋을 생성하려면 콘텐츠 드로어(Content Drawer) 를 열고 + 추가(ADD) 를 클릭하여 메뉴를 엽니다. 기타(Miscellaneous) 메뉴로 이동하여 HLOD 레이어(HLOD Layer) 에셋을 선택합니다. (콘텐츠 드로어 에서 우클릭하면 같은 메뉴가 열림)

  2. 새 HLOD 레이어를 더블클릭하여 에셋 에디터에서 엽니다.

이미지 대체 텍스트

세팅

설명

레이어 타입(Layer Type)

다음 옵션 중에서 레이어 타입을 선택합니다.

  • Instancing

  • Merged Mesh

  • Simplified Mesh

메시 병합 세팅(Mesh Merge Settings)/프록시 세팅(Proxy Settings)

Merged Mesh 또는 Simplified Mesh 레이어 타입을 선택하면 추가 옵션이 표시됩니다.

항상 로드됨(Always Loaded)

이 레이어에 의해 생성된 HLOD 프록시 메시가 항상 로드되는지 여부를 결정합니다.

셀 크기(Cell Size)

이 레이어의 HLOD 액터를 포함하도록 생성된 런타임 그리드의 셀 크기를 설정합니다. HLOD 레이어를 항상 로드됨 으로 설정한 경우, 이 옵션은 사용할 수 없습니다.

로딩 범위(Loading Range)

런타임 그리드가 해당 셀을 스트리밍하는 거리를 설정합니다. HLOD 레이어를 항상 로드됨 으로 설정한 경우, 이 옵션은 사용할 수 없습니다.

부모 레이어(Parent Layer)

이 HLOD 레이어에 의해 생성된 에셋이 자동으로 지정된 HLOD 레이어에 할당되도록 합니다.

HLOD 머티리얼(HLODMaterial)

Merged Mesh 및 Simplified Mesh 레이어 타입에 대한 머티리얼을 구울 때 사용할 베이스 머티리얼을 설정합니다.

고급 세팅입니다. 대부분의 사용 사례에는 디폴트 머티리얼로 충분합니다.

레이어 타입 선택

HLOD 레이어를 사용하는 첫 단계는 레이어 타입을 선택하는 것입니다.

이미지 대체 텍스트

레이어 타입

설명

Instancing

이 레이어 타입의 스태틱 메시 에셋은 그 에셋에 대해 가장 낮은 레벨 오브 디테일(Level of Detail, LOD)을 사용하여 인스턴스드 스태틱 메시(Instanced Static Mesh, ISM) 컴포넌트로 대체됩니다. 이 레이어 타입은 트리와 폴리지 같은 임포스터 메시에 적합합니다.

Merged Mesh

이 레이어 타입의 스태틱 메시 에셋은 병합되어 하나의 프록시 메시를 생성합니다.

Simplified Mesh

이 레이어 타입의 스태틱 메시 에셋은 하나의 프록시 메시로 병합되고 메시 간소화가 수행됩니다.

메시 병합 세팅

이러한 세팅은 병합된 메시를 선택한 경우에만 사용할 수 있습니다.

이미지 대체 텍스트

세팅

설명

라이트맵 UV 생성(Generate Lightmap UV)

병합된 메시에 라이트맵 UV를 생성합니다. 이 새로운 UV 레이아웃은 타깃 라이트맵 UV 채널에 배치됩니다.

타깃 라이트맵 해상도(Target Lightmap Resolution)

생성된 스태틱 메시에서 라이트맵 UV 좌표를 생성하는 데 사용되는 라이트맵 해상도를 지정합니다. 이 세팅은 UV 아일랜드 간의 거리를 제어합니다. 해상도가 높을수록 각 UV 아일랜드 사이의 간격이 좁아집니다.

계산된 라이트맵 해상도(Computed Lightmap Resolution)

입력 메시 컴포넌트의 라이트맵 해상도를 더하여 라이트맵 해상도를 계산할지 여부를 결정합니다.

0에 피벗 포인트(Pivot Point at Zero)

병합된 메시의 피벗 포인트 위치가 월드 원점인지 아니면 첫 번째 병합된 컴포넌트인지를 결정합니다.

피직스 데이터 병합(Merge Physics Data)

메시 컴포넌트, 특히 콜리전 프리미티브의 피직스 데이터를 병합할지 여부를 결정합니다.

머티리얼 병합(Merge Materials)

소스 머티리얼을 하나의 플랫 머티리얼로 병합합니다. 이 세팅은 LOD 선택 타입(LODSelection Type) 에 의해 결정되는 단일 LOD 레벨을 병합할 때만 사용할 수 있습니다.

머티리얼 세팅(Material Settings)

머티리얼 병합 이 활성화되었을 때 생성되는 간소화된 머티리얼의 머티리얼 세팅을 포함합니다.

거터 크기(Gutter Size)

최상위 밉 레벨에 대해 구운 머티리얼의 서브차트에 공간을 추가합니다. 텍셀로 측정됩니다.

병합된 머티리얼 생성(Create Merged Materials)

모든 소스 컴포넌트 머티리얼과 새로운 UV 좌표 세트로부터 플랫 머티리얼을 생성합니다. 이렇게 생성된 머티리얼은 기본적으로 어느 섹션에도 적용되지 않습니다.

버텍스 데이터 메시로 굽기(Bake Vertex Data to Mesh)

버텍스 컬러와 노멀 같은 버텍스 데이터를 결과 프록시 메시에 굽습니다.

UV 출력(Output UVs)

지정된 UV 채널을 병합된 메시로 출력합니다. 소스 메시 컴포넌트에는 지정된 채널에 대해 유효한 UV가 포함되어야 합니다.

LOD 선택 타입(LODSelection Type)

병합된 스태틱 메시 생성에 사용할 LOD 선택 모드를 결정합니다.

  • Use all LOD levels : 액터 병합 시 사용할 수 있는 모든 LOD 레벨을 사용합니다.

  • Use specific LOD level : 액터 병합 시 선택한 LOD 레벨을 사용합니다.

  • Calculate correct LOD level : 주어진 화면 크기에 적절한 LOD 모델을 계산합니다.

  • Always use lowest detail LOD: 액터 병합 시 가장 낮은 디테일의 LOD를 사용합니다.

특정 LOD(Specific LOD)

소스 메시에서 익스포트할 LOD 레벨을 지정합니다.

머티리얼 굽기에 버텍스 데이터 사용(Use Vertex Data for Baking Material)

버텍스 컬러와 노멀 같은 버텍스 데이터를 구워진 머티리얼에 굽습니다. 머티리얼 병합 을 선택했을 때만 이용할 수 있습니다.

텍스처 비닝 사용(Use Texture Binning)

가변 출력 텍스처 크기를 최종 아틀라스 텍스처에서의 중요도에 따라 계산합니다. 머티리얼 병합 을 선택했을 때만 이용할 수 있습니다.

메시 라이트맵 UV 재사용(Reuse Mesh Lightmap UVs)

머티리얼을 구울 때 소스 메시의 라이트맵 UV를 재사용할지 여부를 결정합니다. false면, 엔진이 새로운 UV 세트를 생성합니다.

동등한 머티리얼 병합(Merge Equivalent Materials)

동등한 것으로 간주되는 머티리얼의 병합을 시도합니다. 월드 포지션이나 액터 포지션을 사용하여 출력 색을 결정하는 경우, 이 프로세스로 인해 병합된 메시에 아티팩트가 발생할 수 있습니다.

랜드스케이프 컬링 사용(Use Landscape Culling)

사용할 수 있는 랜드스케이프 지오메트리를 사용하여 보이지 않는 트라이앵글을 컬링합니다. 예를 들어, 가장 낮은 트라이앵글이 랜드스케이프의 표면보다 아래에 배치된 트리 메시가 있는 경우, 가려진 트라이앵글은 병합 시 제거됩니다.

임포스터 포함(Include Imposters)

소스 메시 컴포넌트에 속한 모든 임포스터 LOD를 포함합니다.

디스턴스 필드 허용(Allow Distance Field)

이 메시에 대한 디스턴스 필드를 계산할 수 있습니다. 병합된 메시가 원거리에서만 렌더링되는 경우 이 세팅을 비활성화하면 메모리가 절약됩니다.

나나이트가 활성화된 메시 생성(Generate Nanite Enabled Mesh)

생성된 메시에 나나이트를 활성화합니다.

프록시 세팅

이러한 세팅은 간소화된 메시를 선택한 경우에만 사용할 수 있습니다.

이미지 대체 텍스트

세팅

설명

화면 크기(Screen Size)

결과 프록시 메시 크기를 픽셀 단위로 결정합니다.

올바른 LOD 모델 계산(Calculate Correct LODModel)

지정된 화면 크기에 따라 어떤 LOD 모델이 충분한지 계산합니다. 각 입력 메시를 분석하고 각 LOD 트랜지션 크기에 따라 올바른 LOD를 선택하여 이러한 계산을 수행합니다.

공간 샘플링 거리 오버라이드(Override Spatial Sampling Distance)

프록시 LOD 병합을 위해 여러 소스 메시를 변환할 때 오버라이드합니다.

작은 샘플링을 사용하는 큰 지오메트리는 메모리 비용이 매우 높습니다.

머티리얼 세팅(Material Settings)

머티리얼 단순화 세팅을 포함합니다.

병합 거리(Merge Distance)

메시가 서로 합쳐지게 될 거리입니다. 먼 지오메트리의 문과 창문 등의 간격을 좁힐 수 있습니다.

리졸브되지 않은 지오메트리 컬러(Unresolved Geometry Color)

병합 거리에 의해 간격이 좁혀진 문과 창문 등의 병합된 지오메트리를 소스 지오메트리와 연결할 수 없을 때 표시되는 베이스 컬러를 지정합니다.

전송 거리 오버라이드(Transfer Distance Override)

간소화된 지오메트리의 텍스처 값을 찾을 때 사용하는 검색 거리를 오버라이드합니다. 0이 아닌 병합 거리 세팅이 오목한 구석에 새 지오메트리를 생성할 때 사용됩니다.

하드 에지 각도(Hard Edge Angle)

하드 에지를 도입할 면 사이의 각도입니다. 이 옵션을 사용하면 버텍스 수가 늘어나며, UV 이음새가 추가될 수 있습니다. 노멀 맵을 사용하지 않을 경우에만 사용하는 것이 좋습니다.

노멀 계산 메서드(Normal Calculation Method)

간소화된 지오메트리의 노멀 계산에 사용되는 메서드를 제어합니다.

  • Angle Weighted : 주변 면의 각도를 사용하여 노멀에 가중치를 적용합니다.

  • Area Weighted : 주변 면의 영역을 사용하여 노멀에 가중치를 적용합니다.

  • Equal Weighted: 주변 면의 노멀 평균을 사용하여 노멀에 가중치를 적용합니다.

라이트맵 해상도(Lightmap Resolution)

새로 생성된 라이트맵의 해상도를 설정합니다.

라이트맵 해상도 계산(Compute Lightmap Resolution)

병합 프로세스에 포함된 각 메시의 치수를 더하여 라이트맵 해상도를 계산합니다.

볼륨 컬링 활성화(Enable Volume Culling)

볼륨 컬링에서 지오메트리를 제외할 수 있습니다.

디스턴스 필드 허용(Allow Distance Field)

이 메시에 대한 디스턴스 필드를 계산할 수 있습니다. 병합된 메시가 원거리에서만 렌더링되는 경우 이 세팅을 비활성화하면 메모리가 절약됩니다.

메시 라이트맵 UV 재사용(Reuse Mesh Lightmap UVs)

머티리얼을 구울 때 소스 메시의 라이트맵 UV를 재사용할지 여부를 결정합니다. false면, 엔진이 새로운 UV 세트를 생성합니다.

베이킹을 위한 동일한 메시 그룹화(Group Identical Meshes for Baking)

동일한 메시 또는 메시 인스턴스를 한 번만 굽습니다. 구운 텍스처의 퀄리티가 개선되고 굽는 시간이 줄어듭니다. 이 경우 병합된 메시와 소스 메시 비주얼이 서로 다를 수 있습니다.

콜리전 생성(Create Collision)

병합된 메시에 대한 콜리전을 생성합니다.

버텍스 컬러 허용(Allow Vertex Colors)

병합된 메시에 버텍스 컬러를 저장할 수 있습니다.

라이트맵 UV 생성(Generate Lightmap UVs)

병합된 메시에 대한 라이트맵 UV를 생성합니다.

나나이트가 활성화된 메시 생성(Generate Nanite Enabled Mesh)

생성된 메시에 나나이트를 활성화합니다.

HLOD 레이어 사용

HLOD 프록시 메시를 생성하려면, 액터가 HLOD 레이어에 추가되어야 하며 액터에 HLOD를 생성하도록 지시해야 합니다. 이러한 작업이 완료되면, 커맨드릿이 실행되어 프록시 지오메트리를 생성합니다.

현재는 커맨드릿으로만 HLOD 프록시 지오메트리를 생성할 수 있습니다.

액터 추가하기

액터는 현재 다음과 같은 방법으로 HLOD 레이어에 추가됩니다.

  1. 액터의 디테일(Details) 패널에 있는 HLOD 프로퍼티

    이미지 대체 텍스트

  2. 데이터 레이어의 디폴트 HLOD 레이어 프로퍼티

    이미지 대체 텍스트

  3. 월드 세팅의 디폴트 HLOD 레이어 프로퍼티

    이미지 대체 텍스트

WorldPartitionConvertCommandlet을 사용할 때도 HLOD 레이어 옵션을 사용할 수 있습니다. 변환 ini 파일을 사용하여 HLOD 레이어 프로퍼티를 지정할 수 있습니다.

[/Script/UnrealEd.WorldPartitionConvertCommandlet]
EditorHashClass=Class'/Script/Engine.WorldPartitionEditorSpatialHash'
RuntimeHashClass=Class'/Script/Engine.WorldPartitionRuntimeSpatialHash'
HLODLayerAssetsPath="/Game/WorldPartition/HLODLayers"
DefaultHLODLayerName="HLODLayer_Default"
HLODLayersForActorClasses=(ActorClass=/Game/Blueprint/Base_Tree.Base_Tree_C,HLODLayer="HLODLayer_Tree")

[HLODLayer_Default HLODLayer]
LayerType=MeshMerge
MeshMergeSettings=(TargetLightMapResolution=256,OutputUVs[0]=OutputChannel, ...)
HLODMaterial=/Engine/EngineMaterials/BaseFlattenMaterial.BaseFlattenMaterial
RuntimeGrid="HLODGrid_Default"
LoadingRange=30000.000000

[HLODLayer_Tree HLODLayer]
LayerType=Instancing
RuntimeGrid="HLODGrid_Trees"
LoadingRange=30000.000000

이 환경설정을 통해 변환된 월드는 일치하는 .ini 섹션에 지정된 프로퍼티를 사용하여 생성될 DefaultHLODLayerName (이 예시에서는 HLODLayer_Default )을 지정합니다. HLODLayer_Default 에 의해 생성된 액터는 해당 .ini 파일 섹션에서 정의된 프로퍼티로 HLODLayer_Tree 에 할당됩니다.

HLOD 생성하기

HLOD는 WorldPartitionHLODsBuilder 커맨드릿을 사용하여 생성됩니다. 이 커맨드릿을 실행하면 HLOD 레이어에서 지정한 생성 세팅에 따라 월드 파티션 셀의 HLOD 액터가 생성됩니다.

HLOD 액터는 해당 소스 액터가 변경되지 않으면 재생성되거나 빌드되지 않습니다. 액터 자체나 액터의 메시, 머티리얼 또는 텍스처를 변경하면 해당 커맨드릿을 다시 실행하는 경우 HLOD가 리빌드됩니다.

커맨드릿을 사용하려면 다음 단계를 따릅니다.

  1. Windows에서 명령 프롬프트 창을 엽니다.

    이미지 대체 텍스트

  2. 프롬프트에서 먼저 UE4Editor.exe 파일이 있는 위치로 이동합니다. 예: C:\Program Files\Epic Games\UE_4.26\Engine\Binaries\Win64

    이미지 대체 텍스트

  3. 다음으로, 커맨드릿을 실행할 .exe 파일의 이름인 UE4Editor.exe 로 명령어 작성을 시작합니다.

  4. 다음 아규먼트를 추가합니다.

    YourProject YourMap -run=WorldPartitionBuilderCommandlet -AllowCommandletRendering -Builder=WorldPartitionHLODsBuilder

    여기서 YourProject 는 프로젝트 폴더의 이름이고 YourMap 은 HLOD를 빌드하려는 맵 파일의 이름입니다.

    이미지 대체 텍스트

  5. 또한, 이 명령의 행동을 변경하기 위해 다음과 같은 옵션 중 하나를 제공할 수 있습니다.

옵션

설명

-SetupHLODs

월드 파티션 셀에 대한 HLOD 액터를 구성하지만, 그 지오메트리는 빌드하지 않습니다. 잠재적으로 새 액터를 생성하거나 액터를 삭제하거나 업데이트할 수 있습니다.

-BuildHLODs

모든 기존 HLOD 액터에 대한 지오메트리를 빌드합니다.

-DeleteHLODs

모든 HLOD 액터를 삭제합니다.

HLOD 시각화하기

에디터 뷰포트에서 HLOD 액터를 시각화할 수 있으며, 런타임 시 HLOD 셀의 상태를 시각화할 수 있습니다.

에디터에서

에디터에서 '뷰 모드(View Mode)'를 '레벨 오브 디테일 배색(Level of Detail Coloration)'으로 변경하고 '계층형 LOD 배색(Hierarchical LOD Coloration)'을 선택합니다. HLOD 레이어에 할당된 액터는 녹색이 됩니다. 뷰를 축소하면 HLOD가 파란색으로 표시됩니다.

뷰포트에서 뷰 모드(View Mode)를 '레벨 오브 디테일 배색(Level of Detail Coloration)'으로 변경하고 '계층형 LOD 배색(Hierarchical LOD Coloration)'을 선택하면 HLOD 레이어에 할당된 액터가 녹색으로 표시됩니다.

이미지 대체 텍스트

액터로부터 카메라를 멀리 이동하면 그 액터의 HLOD 프록시 메시가 파란색으로 표시됩니다.

이미지 대체 텍스트

런타임 시

런타임 시 콘솔 명령 wp.Runtime.ToggleDrawRuntimeHash2D를 실행하면 로드된 HLOD 셀이 녹색으로 표시됩니다.

이미지 대체 텍스트