머티리얼 제한과 우회
Raster Bin 시스템과 Nanite 머티리얼 최적화 전략을 학습합니다
머티리얼 성능 계층
Nanite에서 머티리얼 유형별 성능 차이
Nanite에서 최고의 성능을 위해서는 Opaque, 단면, 비마스크 머티리얼을 사용하세요. 프로그래머블 래스터화가 필요한 머티리얼은 추가 비용이 발생합니다.
Raster Bin 시스템
머티리얼 특성별 그룹화
Nanite는 머티리얼 특성에 따라 Raster Bin으로 그룹화합니다. 각 고유 조합마다 별도 패스가 필요하여 오버헤드가 증가합니다.
// Raster Bin 결정 요소
struct RasterBin {
bool bOpaque; // 불투명 여부
bool bTwoSided; // 양면 여부
bool bMasked; // 마스크드 여부
bool bWPO; // World Position Offset
bool bPDO; // Pixel Depth Offset
MaterialID; // 머티리얼 식별자
};
// 각 고유 조합마다 별도 패스 필요 -> 오버헤드 증가
- 유사 머티리얼 그룹화 - 같은 Bin의 메시를 가깝게 배치
- Bin 수 최소화 - 불필요한 머티리얼 변형 피하기
- 아틀라스 사용 - 여러 텍스처를 하나로 합치기
- 버텍스 컬러 활용 - 머티리얼 인스턴스 대신 버텍스 데이터
지원되지 않는 기능
Nanite 제한사항과 대안
| 기능 | 상태 | 대안 |
|---|---|---|
| Tessellation | 미지원 | Nanite Tessellation (5.3+) |
| Translucency | 부분 지원 (5.6+) | Masked 또는 Dithered |
| Vertex Animation | WPO로 제한적 | Nanite Skinning (5.7) |
| Skeletal Mesh | 실험적 (5.4+) | Static Mesh로 변환 |
Nanite Skinning은 WPO를 대체하는 시스템으로, 더 정확한 클러스터 바운드 계산과 고정 함수 래스터라이저 사용이 가능합니다. 100,000 본 업데이트가 ~0.1ms(GPU)에 처리됩니다.
최적화 체크리스트
머티리얼 최적화 가이드
- Opaque 선호 - 불투명 머티리얼이 가장 효율적
- 단면 사용 - Two-Sided 필요시에만 활성화
- Masked 최소화 - 정말 필요한 경우만 사용
- WPO 거리 제한 - WPO Disable Distance 설정 필수
- 복잡 머티리얼 거리 LOD - 먼 거리에서 단순 머티리얼
- Raster Bin 모니터링 - r.nanite.showmeshdrawevents 1
// Raster Bin 분포 확인
r.Nanite.ShowMeshDrawEvents = 1
// 머티리얼별 성능 분석
ProfileGPU
// Nanite 통계에서 Programmable Raster 확인
NaniteStats
핵심 요약
- Opaque + 단면 + 비마스크가 최고 성능
- Raster Bin은 머티리얼 특성별로 별도 패스 생성
- Bin 수 최소화를 위해 유사 머티리얼 그룹화
- Translucency는 5.6+에서 부분 지원, Masked/Dithered 권장
- Nanite Skinning (5.7)이 WPO의 효율적 대안
도전 과제
배운 내용을 직접 실습해보세요
r.Nanite.ShowMeshDrawEvents = 1을 활성화하고 씬의 Raster Bin 분포를 확인하세요. Opaque, Masked, Two-Sided, WPO 등 각 유형별 Bin 수를 기록하고, 유사 머티리얼을 그룹화하여 Bin 수를 줄이는 실험을 해보세요.
나뭇잎 등 Masked 머티리얼을 사용하는 폴리지를 배치하고, Dithered Opacity로 대체했을 때의 성능 차이를 ProfileGPU로 비교하세요. NaniteRasterize 패스의 시간 변화에 주목하세요.
텍스처 아틀라스를 사용하여 여러 머티리얼을 단일 머티리얼로 통합하는 실험을 해보세요. 통합 전후의 Raster Bin 수와 NaniteBasePass 비용을 비교하고, 대규모 씬에서의 성능 개선 효과를 측정하세요.