PART 4 - 강의 3/5

Nanite HLOD 생성

Nanite 지원 HLOD 메시 생성과 폴백 설정

01

Nanite HLOD 개요

Nanite와 HLOD의 통합

Nanite는 자동으로 LOD를 생성하지만, World Partition HLOD와 결합하면 더 효율적인 원거리 렌더링이 가능합니다.

Nanite만 사용

개별 메시별 자동 LOD. 원거리에서도 각 메시가 개별 드로우 콜 유지.

Nanite + HLOD

원거리에서 여러 메시를 통합된 Nanite HLOD로 대체. 드로우 콜 감소.

Nanite HLOD 동작:

근거리 (0~256m):
    개별 Nanite 메시 렌더링
    └── 각 메시가 Nanite 가상 지오메트리 사용

원거리 (256m+):
    통합된 Nanite HLOD 메시 렌더링
    └── 여러 메시가 하나의 Nanite HLOD로 대체
    └── 드로우 콜 대폭 감소
02

Nanite HLOD 설정

HLOD Layer에서 Nanite 활성화

HLOD Layer 설정 // HLOD Layer Asset > Generation Settings Nanite HLOD 활성화: ├── Generate Nanite Enabled Mesh: true │ └── 생성되는 HLOD 메시에 Nanite 적용 │ ├── Nanite Fallback Settings │ ├── Fallback Percent Triangles: 100.0 │ │ └── Nanite 비지원 플랫폼용 폴백 메시 트라이앵글 비율 │ │ │ └── Fallback Relative Error: 0.01 │ └── 허용 오차 (낮을수록 정밀) │ └── Material Settings ├── Bake Materials: true └── Texture Size: 1024
플랫폼 고려

Nanite는 모든 플랫폼에서 지원되지 않습니다. 모바일이나 구형 콘솔을 타겟으로 한다면 Fallback 설정을 반드시 확인하세요.

03

폴리지 Nanite HLOD

Approximated Mesh 타입 활용

폴리지(나무, 풀 등)는 Approximated Mesh 타입이 가장 적합합니다. 복셀화를 통해 복잡한 형태를 근사하면서 Nanite를 활용합니다.

Foliage HLOD Layer 설정 // Foliage용 HLOD Layer HLOD_Foliage_Nanite: ├── Layer Type: Approximated Mesh │ ├── Approximation Settings │ ├── Voxelization Resolution: 128 │ │ └── 높을수록 정밀하지만 빌드 시간 증가 │ │ │ ├── Hole Filling: Normal │ │ └── None / Conservative / Normal / Aggressive │ │ │ └── Capture Height Above/Below: 1000.0 / 500.0 │ └── 캡처 범위 (나무 높이 고려) │ ├── Nanite Settings │ ├── Generate Nanite Enabled Mesh: true │ └── Fallback Percent Triangles: 100.0 │ └── Cell Settings ├── Cell Size: 25600 └── Loading Range: 76800
그림자 아티팩트 주의

Non-Nanite 폴리지가 Approximated HLOD에 포함되면 그림자 아티팩트가 발생합니다. Foliage 설정에서 "Disallow Nanite" 옵션을 확인하세요 (UE 5.6+에서 존중됨).

04

머티리얼 아티팩트 수정

HLOD 머티리얼 품질 개선

C++ - HLOD 머티리얼 수정 // HLOD 생성 후 폴리지 머티리얼 수정 (그림자 아티팩트 방지) void FixFoliageHLODMaterials(UStaticMesh* HLODMesh) { if (!HLODMesh) return; for (FStaticMaterial& Material : HLODMesh->GetStaticMaterials()) { if (UMaterialInstanceDynamic* MID = Cast<UMaterialInstanceDynamic>(Material.MaterialInterface)) { // Roughness 수정 (그림자 아티팩트 방지) MID->SetScalarParameterValue(TEXT("Roughness"), 1.0f); // Metallic/Specular 비활성화 MID->SetScalarParameterValue(TEXT("Metallic"), 0.0f); MID->SetScalarParameterValue(TEXT("Specular"), 0.0f); } } } // 사용 시점: // HLOD 빌드 후 커스텀 포스트 프로세스에서 호출 // 또는 런타임에서 필요 시 적용

Approximated Layer의 Roughness, Metallic, Specular 값이 부적절하면 시각적 아티팩트가 발생합니다. 빌드 후 확인이 필요합니다.

05

빌드 및 검증

Nanite HLOD 빌드 프로세스

Bash - HLOD 빌드 # Nanite HLOD 포함 빌드 UnrealEditor-Cmd.exe "MyProject.uproject" "/Game/Maps/MainWorld" ^ -run=WorldPartitionBuilderCommandlet ^ -AllowCommandletRendering ^ -Builder=WorldPartitionHLODsBuilder # 빌드 후 검증 # 1. PIE에서 원거리 뷰 테스트 # 2. View Mode > LOD Coloration으로 HLOD 전환 확인 # 3. "stat scenerendering"으로 드로우 콜 비교
콘솔 - 디버그 명령 # HLOD 디버그 시각화 wp.Runtime.ToggleHLODDebug # Nanite 통계 표시 stat Nanite # Nanite 디버그 뷰 r.Nanite.Visualize 1 # 0: Off # 1: Triangles # 2: Clusters # 3: Instances
SUMMARY

핵심 요약

  • Generate Nanite Enabled Mesh: true로 Nanite HLOD 생성
  • Fallback Settings로 Non-Nanite 플랫폼 대응
  • 폴리지는 Approximated Mesh 타입 + Nanite 조합
  • Roughness/Metallic/Specular 수정으로 아티팩트 방지
  • 빌드 후 LOD Colorationstat Nanite로 검증
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: Nanite HLOD 기본 설정

HLODLayer 설정에서 bNaniteEnabled를 활성화하고, Nanite Mesh HLOD를 빌드하세요. 생성된 HLOD 메시가 Nanite로 렌더링되는지 stat Nanite 명령어로 확인하고, 일반 HLOD와 드로우콜 차이를 비교합니다.

실습 2: Nanite 폴백 메시 설정

Nanite를 지원하지 않는 플랫폼을 위한 폴백 메시 설정을 구성하세요. NaniteFallbackTarget 옵션으로 폴백 LOD 레벨을 지정하고, Nanite 비활성화 시 폴백 메시로 올바르게 전환되는지 확인합니다.

심화 과제

100km2 이상의 대규모 월드에서 Nanite HLOD를 최적화하세요. Nanite 인스턴스 수 제한, HLOD 텍스처 스트리밍 전략, GPU 메모리 예산 관리를 포함한 종합적인 최적화 파이프라인을 구축합니다.