Nanite Foliage (UE 5.7)
Assemblies, Voxels, Skinning으로 200조 폴리곤 씬 렌더링
Nanite Foliage 개요
UE 5.7의 가장 혁신적인 기능
Nanite Foliage는 대규모 식생 렌더링을 근본적으로 변화시킨 UE 5.7의 핵심 기능입니다. 세 가지 주요 시스템으로 구성됩니다.
Nanite Assemblies
마이크로 인스턴싱으로 메모리 혁신
Nanite Assemblies는 파츠를 최종 메시 계층에 인코딩하여 지오메트리 복제 없이 인스턴싱합니다.
// 개념: 파츠를 최종 메시 계층에 인코딩 (지오메트리 복제 없음)
struct NaniteAssembly {
PartMeshes[]; // 최대 65,000 인스턴스/어셈블리
EncodedHierarchy; // 빌드 타임에 클러스터 인코딩
RuntimeTransforms; // 런타임에 온디맨드 계산
};
| 항목 | Before | After | 절감률 |
|---|---|---|---|
| 디스크 용량 (트리) | 3.5 GB | 29 MB | ~120x |
| 스트리밍 메모리 | 36 MB | 2.7 MB | ~13x |
The Witcher 4 프리뷰에서 Nanite Assemblies를 사용하여 트리 에셋의 디스크 용량을 3.5GB에서 29MB로, 스트리밍 메모리를 36MB에서 2.7MB로 압축했습니다.
Nanite Voxels
원거리 식생의 효율적 표현
Full Nanite
Triangles -> [중거리]
저해상도
Cluster -> [원거리]
Voxels
(3D 블록)
- 픽셀 크기 복셀 - 화면에서 1픽셀 정도 크기
- 디테일 보존 - 삼각형 디테일, 애니메이션, 머티리얼 속성 유지
- 볼륨감 유지 - 빌보드/LOD보다 우수한 3D 표현
- 노멀 분포 저장 - 스토캐스틱 노멀 선택으로 라이팅 품질 유지
기존 Billboard LOD는 특정 각도에서 평면처럼 보이는 문제가 있었지만, Voxel은 3D 볼륨을 유지하여 모든 각도에서 자연스럽습니다.
Nanite Skinning
WPO를 대체하는 효율적 바람 애니메이션
Nanite Skinning은 WPO를 대체하여 더 효율적인 버텍스 애니메이션을 제공합니다.
// WPO 대체 시스템의 장점
장점:
- 더 정확한 클러스터 바운드 계산
- 고정 함수 래스터라이저 사용 가능
- 머티리얼별 디스패치 오버헤드 제거
- 100,000 본 업데이트: ~0.1ms (GPU)
Dynamic Wind Skeletal Data 에셋을 생성하고, 스켈레톤 본을 시뮬레이션 그룹으로 분류하여 바람 영향을 조정합니다. 현재는 글로벌 바람 방향만 지원하며, 플레이어/오브젝트 충돌은 미지원입니다.
활성화 및 성능
설정 방법과 벤치마크
// Project Settings > Rendering
[x] Nanite Foliage (재시작 필요)
// 애니메이션 거리 컨트롤
r.Skinning.DefaultAnimationMinScreenSize = 0.1 // 화면의 10%
| 씬 | 기존 | Nanite Foliage | 향상 |
|---|---|---|---|
| 77,376 트리 (20M poly/each) | 62 FPS | 119 FPS | ~2x |
| 200조 폴리곤 씬 | N/A | 30 FPS | 가능! |
핵심 요약
- Nanite Assemblies - 마이크로 인스턴싱으로 120배 디스크 압축
- Nanite Voxels - 원거리에서 3D 볼륨 유지하는 효율적 표현
- Nanite Skinning - WPO 대체로 0.1ms에 10만 본 업데이트
- 200조 폴리곤 씬을 30 FPS로 렌더링 가능
- Project Settings에서 Nanite Foliage 활성화 필요
도전 과제
배운 내용을 직접 실습해보세요
Project Settings > Rendering에서 Nanite Foliage를 활성화하고(재시작 필요), Foliage 도구로 나무를 대량 배치하세요. 활성화 전/후의 stat fps와 메모리 사용량을 비교하세요.
원거리 식생에서 Nanite Voxel이 동작하는 것을 확인하세요. 카메라를 천천히 뒤로 이동하면서 삼각형 기반 렌더링에서 Voxel 기반으로 전환되는 시점을 관찰하고, r.Skinning.DefaultAnimationMinScreenSize 값으로 전환 거리를 조절해보세요.
77,000개 이상의 트리 인스턴스가 포함된 대규모 숲 씬을 구성하고, Nanite Assemblies를 활용하여 디스크 용량과 스트리밍 메모리 절감 효과를 측정하세요. Dynamic Wind Plugin(실험적)을 활용한 Nanite Skinning 바람 애니메이션도 테스트하세요.