PART 2 · 강의 1/7

Nanite 기초

가상화 지오메트리 시스템의 원리와 기본 사용법

01

Nanite란?

가상화 마이크로폴리곤 지오메트리 시스템

Nanite는 UE5에서 도입된 가상화 지오메트리 시스템으로, 수십억 개의 폴리곤을 실시간으로 렌더링할 수 있게 합니다. 기존 LOD 시스템을 대체하여 자동으로 세밀도를 조절합니다.

핵심 기술

  • 계층적 클러스터 분해
  • GPU 기반 가시성 컬링
  • 자동 LOD 스트리밍
  • Software Rasterizer

장점

  • 폴리곤 예산에서 해방
  • 드로우콜 극적 감소
  • LOD 수작업 불필요
  • ZBrush 스컬프트 직접 사용
📌 작동 원리

1. 임포트 시 메시를 삼각형 그룹의 계층적 클러스터로 분해
2. 렌더링 시 카메라 뷰 기반으로 클러스터를 동적 교체
3. 기존 드로우콜 시스템을 우회하는 별도 렌더링 패스 사용
4. SSD 기반 온디맨드 스트리밍

02

Nanite 활성화

스태틱 메시에 Nanite 적용하기

프로젝트 설정

Project Settings // Project Settings > Engine > Rendering Nanite: Enable Nanite Support: true // 프로젝트 전체 Nanite 활성화 // 콘솔 변수로 런타임 제어 r.Nanite 1 // Nanite 활성화 r.Nanite.Visualize 1 // 시각화 디버그

스태틱 메시 설정

Static Mesh Editor // Static Mesh Editor > Details Panel Nanite Settings: Enable Nanite Support: true Preserve Area: false // 작은 삼각형 보존 Position Precision: 0 // 자동 Trim Relative Error: 0.0 // 단순화 허용 오차 // 임포트 시 자동 활성화 설정 Import Settings: Build Nanite: true

C++에서 Nanite 상태 확인

C++ // Nanite 활성화 여부 확인 bool IsNaniteEnabled(UStaticMesh* Mesh) { if (Mesh) { return Mesh->NaniteSettings.bEnabled; } return false; } // 런타임에서 Nanite 메시인지 확인 void AMyActor::CheckMeshType() { if (UStaticMeshComponent* SMC = FindComponentByClass<UStaticMeshComponent>()) { if (UStaticMesh* Mesh = SMC->GetStaticMesh()) { if (Mesh->NaniteSettings.bEnabled) { UE_LOG(LogTemp, Log, TEXT("This mesh uses Nanite")); } } } }
03

Nanite 적합성

어떤 메시에 Nanite를 사용해야 하는가

Nanite에 적합

  • 고폴리 환경 메시 (건물, 바위, 절벽)
  • 포토그래메트리 스캔
  • ZBrush 스컬프트
  • 디테일한 프롭
  • 대량 인스턴싱 오브젝트

Nanite 부적합

  • 스켈레탈 메시 (애니메이션)
  • 버텍스 애니메이션 (WPO 제한적)
  • 투명/반투명 머티리얼
  • 마스크된 머티리얼 (부분 지원)
  • 모프 타겟

하드 제한사항

제한 항목 값/상태
최대 인스턴스 수 1,600만 개/씬
지원 변형 변환, 회전, 비균일 스케일
모프 타겟 미지원
포워드 렌더링 미지원
MSAA 미지원 (TSR/TAA 사용)
VR 스테레오 제한적 지원
04

Nanite 시각화 및 디버깅

성능 분석과 문제 해결

콘솔 명령어 // Nanite 시각화 모드 r.Nanite.Visualize 1 // 시각화 활성화 r.Nanite.Visualize.Mode 0 // 0: Triangles, 1: Clusters, 2: Groups // 성능 통계 stat Nanite // Nanite 통계 표시 stat NaniteStreaming // 스트리밍 통계 // 디버그 옵션 r.Nanite.MaxPixelsPerEdge 1 // 엣지당 최대 픽셀 (품질) r.Nanite.ShowStats 1 // 화면에 통계 표시 // 폴백 확인 r.Nanite.FallbackRelativeError 1 // 폴백 메시 오차
💡 시각화 색상 의미

녹색: 적은 삼각형 (효율적)
노랑: 중간 삼각형 밀도
빨강: 많은 삼각형 (카메라 가까움 또는 고밀도)

C++에서 Nanite 통계 접근

C++ #include "Nanite/NaniteSceneProxy.h" // Nanite 렌더링 통계 (엔진 내부용) // 일반적으로 stat 명령이나 Unreal Insights 사용 권장 // GPU 프로파일링 마커 TRACE_CPUPROFILER_EVENT_SCOPE(MyActor_NaniteCheck); void AMyActor::ProfileNaniteUsage() { // Unreal Insights에서 확인 // trace.start cpu,gpu,frame }
05

메모리 및 스트리밍

Nanite 데이터의 저장과 로딩

디스크 vs 메모리 /* ┌─────────────────────────────────────────────────────────────┐ │ NANITE DATA FLOW │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Disk/SSD │ --> │ Memory │ --> │ GPU │ │ │ │ (Packed) │ │ (Staging) │ │ (Visible) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ 디스크: 전체 Nanite 데이터 (압축됨) │ │ 메모리: 스트리밍 대기 중인 클러스터 │ │ GPU: 현재 프레임에 보이는 클러스터만 │ │ │ └─────────────────────────────────────────────────────────────┘ */

스트리밍 설정

DefaultEngine.ini ; Nanite 스트리밍 설정 [/Script/Engine.RendererSettings] r.Nanite.Streaming.PoolSize=512 ; 스트리밍 풀 크기 (MB) r.Nanite.Streaming.MaxPendingPages=128 ; 대기 페이지 수 ; SSD 권장 - HDD에서는 스트리밍 지연 발생 가능
⚠️ SSD 권장

Nanite는 온디맨드 스트리밍에 의존합니다. SSD가 아닌 환경에서는 카메라 이동 시 팝인 현상이 발생할 수 있습니다.

SUMMARY

핵심 요약

  • Nanite — 가상화 지오메트리, 자동 LOD, GPU 기반 컬링
  • 활성화 — Static Mesh Editor에서 Enable Nanite Support
  • 적합한 용도 — 고폴리 환경 메시, 포토그래메트리, 프롭
  • 제한사항 — 스켈레탈 메시, 투명 머티리얼, 모프 타겟 미지원
  • 디버깅 — r.Nanite.Visualize, stat Nanite로 분석
PRACTICE

도전 과제

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

실습 1: Nanite 메시 활성화 및 확인

RPG 오픈월드 환경 메시(바위, 건물, 절벽)를 임포트하고 Static Mesh Editor에서 Enable Nanite Support를 활성화하세요. C++에서 Mesh->NaniteSettings.bEnabled로 Nanite 상태를 확인하는 유틸리티 함수를 작성하세요.

실습 2: Nanite 시각화 디버깅

콘솔에서 r.Nanite.Visualize 1을 실행하고, Triangles/Clusters/Groups 모드를 전환하면서 오픈월드 지형의 클러스터 분포를 분석하세요. stat Nanite로 삼각형 수와 GPU 시간을 확인하세요.

심화 과제: Nanite 스트리밍 최적화

DefaultEngine.ini에서 r.Nanite.Streaming.PoolSize를 조정하고, 대규모 오픈월드에서 카메라 이동 시 팝인 현상이 줄어드는지 확인하세요. Unreal Insights의 trace.start cpu,gpu,frame으로 Nanite 렌더링 성능을 프로파일링하세요.