PART 1 - 강의 2/4

클러스터 기반 LOD

128 삼각형 클러스터 구조와 바이너리 트리 LOD 시스템을 이해합니다

01

클러스터(Meshlet) 구조

Nanite 지오메트리의 기본 단위

Nanite는 지오메트리를 128개 삼각형으로 구성된 클러스터(Meshlet)로 분해합니다. 이 클러스터가 LOD, 컬링, 스트리밍의 기본 단위가 됩니다.

클러스터 메모리 비용 // 클러스터별 메모리 오버헤드 Candidate Cluster: 12 bytes/cluster Visible Cluster: 16 bytes/cluster // 콘솔 변수로 제한 조정 r.Nanite.MaxCandidateClusters // 후보 클러스터 최대 수 r.Nanite.MaxVisibleClusters // 가시 클러스터 최대 수
128
Triangles/Cluster
12-16
Bytes/Cluster
02

바이너리 트리 LOD 계층

부모-자식 관계로 구성된 LOD 구조

LOD 계층 구조
[Root Cluster] (최저 디테일) | +--------------+--------------+ v v v [Level 1] [Level 1] [Level 1] | | | +----+----+ ... ... v v [Level 2] [Level 2] (최고 디테일)
핵심 특징
  • 바이너리 트리 구조 - 부모 노드는 자식 노드의 단순화된 버전
  • 뷰 의존적 LOD 선택 - 클러스터의 화면 공간 투영 오차 기반
  • 크랙 없는 연결 - 인접 클러스터 간 완벽한 경계 스티칭
  • LOD 팝핑 없음 - 다단계 클러스터 트리로 부드러운 전환
03

화면 공간 오차 기반 선택

픽셀 단위 정밀도의 LOD 결정

Nanite는 각 클러스터의 화면 공간 투영 오차를 계산하여 적절한 LOD 레벨을 선택합니다. 이 방식으로 어떤 거리에서도 최적의 디테일을 유지합니다.

LOD 선택 알고리즘
각 클러스터에 대해: 1. 화면 공간 투영 오차 계산 2. 오차가 임계값보다 크면 -> 자식 노드로 이동 3. 오차가 임계값보다 작으면 -> 현재 클러스터 렌더링 4. 픽셀 임계값 미만이면 -> 컬링 또는 저해상도 렌더링
Console Variable // LOD 품질 조정 (기본값 1) r.Nanite.MaxPixelsPerEdge = 1 // 값이 클수록 더 낮은 LOD 사용 (성능 향상, 품질 저하) // 값이 작을수록 더 높은 LOD 사용 (품질 향상, 성능 저하)
최적화 팁

Low-End PC에서는 r.Nanite.MaxPixelsPerEdge = 2로 설정하여 성능을 확보할 수 있습니다.

04

기존 LOD와의 차이점

전통적 LOD 시스템 대비 Nanite의 장점

항목 기존 LOD Nanite LOD
LOD 생성 수동 또는 자동 생성 (오프라인) 자동 계층 구조 (빌드 타임)
전환 방식 거리 기반 이산적 전환 화면 오차 기반 연속적 전환
팝핑 발생 (디더링으로 완화) 없음
단위 메시 전체 128 삼각형 클러스터
메모리 각 LOD 별도 저장 계층 구조로 효율적 저장
핵심 차이

기존 LOD는 메시 전체가 한 번에 전환되지만, Nanite는 클러스터 단위로 필요한 부분만 고해상도로 렌더링합니다. 이로 인해 화면에 보이는 영역만 정확한 디테일을 유지할 수 있습니다.

SUMMARY

핵심 요약

  • 128 삼각형 클러스터가 Nanite의 기본 처리 단위 (12-16 bytes/cluster)
  • 바이너리 트리 구조로 부모 클러스터는 자식의 단순화된 버전
  • 화면 공간 오차 기반으로 픽셀 정밀도의 LOD 선택
  • LOD 팝핑 없이 부드러운 디테일 전환 가능
  • r.Nanite.MaxPixelsPerEdge로 품질/성능 트레이드오프 조절
PRACTICE

도전 과제

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

실습 1: 클러스터 시각화

UE5 에디터에서 Nanite 메시를 배치하고 r.Nanite.Visualize.Clusters = 1로 클러스터 경계를 시각화하세요. 카메라를 가까이/멀리 이동하면서 LOD 레벨 변화에 따른 클러스터 크기 변화를 관찰하세요.

실습 2: MaxPixelsPerEdge 튜닝

r.Nanite.MaxPixelsPerEdge 값을 0.5, 1.0, 2.0, 4.0으로 변경하면서 stat Nanite의 Visible Clusters 수와 Triangles 수 변화를 기록하세요. 각 값에서의 시각적 품질 차이를 스크린샷으로 비교하세요.

심화 과제

r.Nanite.MaxCandidateClustersr.Nanite.MaxVisibleClusters 값을 의도적으로 낮춰서 클러스터 부족 현상을 재현하고, 이때 발생하는 시각적 아티팩트를 확인하세요. 대규모 씬에서 적절한 클러스터 예산을 결정하는 기준을 분석하세요.