클러스터 기반 LOD
128 삼각형 클러스터 구조와 바이너리 트리 LOD 시스템을 이해합니다
클러스터(Meshlet) 구조
Nanite 지오메트리의 기본 단위
Nanite는 지오메트리를 128개 삼각형으로 구성된 클러스터(Meshlet)로 분해합니다. 이 클러스터가 LOD, 컬링, 스트리밍의 기본 단위가 됩니다.
// 클러스터별 메모리 오버헤드
Candidate Cluster: 12 bytes/cluster
Visible Cluster: 16 bytes/cluster
// 콘솔 변수로 제한 조정
r.Nanite.MaxCandidateClusters // 후보 클러스터 최대 수
r.Nanite.MaxVisibleClusters // 가시 클러스터 최대 수
바이너리 트리 LOD 계층
부모-자식 관계로 구성된 LOD 구조
- 바이너리 트리 구조 - 부모 노드는 자식 노드의 단순화된 버전
- 뷰 의존적 LOD 선택 - 클러스터의 화면 공간 투영 오차 기반
- 크랙 없는 연결 - 인접 클러스터 간 완벽한 경계 스티칭
- LOD 팝핑 없음 - 다단계 클러스터 트리로 부드러운 전환
화면 공간 오차 기반 선택
픽셀 단위 정밀도의 LOD 결정
Nanite는 각 클러스터의 화면 공간 투영 오차를 계산하여 적절한 LOD 레벨을 선택합니다. 이 방식으로 어떤 거리에서도 최적의 디테일을 유지합니다.
// LOD 품질 조정 (기본값 1)
r.Nanite.MaxPixelsPerEdge = 1
// 값이 클수록 더 낮은 LOD 사용 (성능 향상, 품질 저하)
// 값이 작을수록 더 높은 LOD 사용 (품질 향상, 성능 저하)
Low-End PC에서는 r.Nanite.MaxPixelsPerEdge = 2로 설정하여 성능을 확보할 수 있습니다.
기존 LOD와의 차이점
전통적 LOD 시스템 대비 Nanite의 장점
| 항목 | 기존 LOD | Nanite LOD |
|---|---|---|
| LOD 생성 | 수동 또는 자동 생성 (오프라인) | 자동 계층 구조 (빌드 타임) |
| 전환 방식 | 거리 기반 이산적 전환 | 화면 오차 기반 연속적 전환 |
| 팝핑 | 발생 (디더링으로 완화) | 없음 |
| 단위 | 메시 전체 | 128 삼각형 클러스터 |
| 메모리 | 각 LOD 별도 저장 | 계층 구조로 효율적 저장 |
기존 LOD는 메시 전체가 한 번에 전환되지만, Nanite는 클러스터 단위로 필요한 부분만 고해상도로 렌더링합니다. 이로 인해 화면에 보이는 영역만 정확한 디테일을 유지할 수 있습니다.
핵심 요약
- 128 삼각형 클러스터가 Nanite의 기본 처리 단위 (12-16 bytes/cluster)
- 바이너리 트리 구조로 부모 클러스터는 자식의 단순화된 버전
- 화면 공간 오차 기반으로 픽셀 정밀도의 LOD 선택
- LOD 팝핑 없이 부드러운 디테일 전환 가능
- r.Nanite.MaxPixelsPerEdge로 품질/성능 트레이드오프 조절
도전 과제
배운 내용을 직접 실습해보세요
UE5 에디터에서 Nanite 메시를 배치하고 r.Nanite.Visualize.Clusters = 1로 클러스터 경계를 시각화하세요. 카메라를 가까이/멀리 이동하면서 LOD 레벨 변화에 따른 클러스터 크기 변화를 관찰하세요.
r.Nanite.MaxPixelsPerEdge 값을 0.5, 1.0, 2.0, 4.0으로 변경하면서 stat Nanite의 Visible Clusters 수와 Triangles 수 변화를 기록하세요. 각 값에서의 시각적 품질 차이를 스크린샷으로 비교하세요.
r.Nanite.MaxCandidateClusters와 r.Nanite.MaxVisibleClusters 값을 의도적으로 낮춰서 클러스터 부족 현상을 재현하고, 이때 발생하는 시각적 아티팩트를 확인하세요. 대규모 씬에서 적절한 클러스터 예산을 결정하는 기준을 분석하세요.