Nanite HLOD 생성
Nanite 지원 HLOD 메시 생성과 폴백 설정
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로 대체
└── 드로우 콜 대폭 감소
Nanite HLOD 설정
HLOD Layer에서 Nanite 활성화
// 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 설정을 반드시 확인하세요.
폴리지 Nanite HLOD
Approximated Mesh 타입 활용
폴리지(나무, 풀 등)는 Approximated Mesh 타입이 가장 적합합니다. 복셀화를 통해 복잡한 형태를 근사하면서 Nanite를 활용합니다.
// 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+에서 존중됨).
머티리얼 아티팩트 수정
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 값이 부적절하면 시각적 아티팩트가 발생합니다. 빌드 후 확인이 필요합니다.
빌드 및 검증
Nanite 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
핵심 요약
- Generate Nanite Enabled Mesh: true로 Nanite HLOD 생성
- Fallback Settings로 Non-Nanite 플랫폼 대응
- 폴리지는 Approximated Mesh 타입 + Nanite 조합
- Roughness/Metallic/Specular 수정으로 아티팩트 방지
- 빌드 후 LOD Coloration과 stat Nanite로 검증
도전 과제
배운 내용을 직접 실습해보세요
HLODLayer 설정에서 bNaniteEnabled를 활성화하고, Nanite Mesh HLOD를 빌드하세요. 생성된 HLOD 메시가 Nanite로 렌더링되는지 stat Nanite 명령어로 확인하고, 일반 HLOD와 드로우콜 차이를 비교합니다.
Nanite를 지원하지 않는 플랫폼을 위한 폴백 메시 설정을 구성하세요. NaniteFallbackTarget 옵션으로 폴백 LOD 레벨을 지정하고, Nanite 비활성화 시 폴백 메시로 올바르게 전환되는지 확인합니다.
100km2 이상의 대규모 월드에서 Nanite HLOD를 최적화하세요. Nanite 인스턴스 수 제한, HLOD 텍스처 스트리밍 전략, GPU 메모리 예산 관리를 포함한 종합적인 최적화 파이프라인을 구축합니다.