셰이더 복잡도 분석
Shader Complexity 뷰, 인스트럭션 카운트, GPU 프로파일링으로 머티리얼 병목을 찾고 해결합니다.
Shader Complexity 뷰 모드
시각적으로 셰이더 비용 확인
뷰포트에서 View Mode → Optimization Viewmodes → Shader Complexity를 선택하면 각 픽셀의 셰이더 비용을 히트맵으로 표시합니다.
| 색상 | 복잡도 | 인스트럭션 수 (대략) | 상태 |
|---|---|---|---|
| 녹색 | 낮음 | ~50 | 양호 |
| 파란색→초록 | 보통 | 50~100 | 허용 범위 |
| 노란색 | 높음 | 100~200 | 최적화 검토 |
| 빨간색 | 매우 높음 | 200~300 | 최적화 필요 |
| 분홍/흰색 | 극심 | 300+ | 심각한 병목 |
Shader Complexity 뷰에서 반투명 오브젝트가 겹치는 영역은 색상이 급격히 상승합니다. 오버드로우(같은 픽셀을 여러 번 셰이딩)가 반투명의 가장 큰 비용입니다. 파티클 이펙트가 화면을 가득 채우는 상황에 특히 주의하세요.
인스트럭션과 실제 성능
숫자 너머의 진짜 병목
머티리얼 통계의 인스트럭션 수는 참고용이며, 실제 GPU 성능은 여러 요인에 영향을 받습니다.
| 요인 | 영향 | 최적화 방법 |
|---|---|---|
| 텍스처 페치(Fetch) | 매우 높음 | 텍스처 수 줄이기, 채널 패킹, MIP 활용 |
| 텍스처 캐시 미스 | 높음 | UV 연속성 유지, 큰 텍스처 피하기 |
| ALU(연산) | 중간 | 복잡한 수학 단순화, LUT 사용 |
| 레지스터 압력 | 중간 | 동시 사용 변수 줄이기 |
| 동적 분기 | 가변 | step/lerp로 대체 |
대부분의 머티리얼 성능 병목은 텍스처 페치에서 발생합니다. 인스트럭션 수가 200이라도 텍스처 샘플이 3개면 빠를 수 있고, 인스트럭션이 50이라도 텍스처 샘플이 15개면 느릴 수 있습니다. 텍스처 수를 줄이는 것이 가장 효과적인 최적화입니다.
GPU 프로파일링 도구
정확한 병목 측정
// 콘솔 명령어로 GPU 프로파일링
stat gpu
→ GPU 패스별 시간 표시
→ BasePass, Lights, Translucency 등
profilegpu
→ 상세 GPU 프레임 분석
→ 각 렌더링 단계의 ms 표시
stat scenerendering
→ 드로우콜 수, 프리미티브 수 등
r.ShaderComplexityColors
→ Shader Complexity 색상 범위 조절
// RenderDoc / PIX 연동
// 머티리얼 에디터에서 Platform Stats로
// 플랫폼별 정확한 인스트럭션 수 확인
Unreal Insights
UE5 내장 프로파일러. GPU 타임라인, 셰이더 비용, 프레임 분석을 제공합니다.
RenderDoc
무료 GPU 디버거. 개별 드로우콜의 셰이더 코드, 입출력, 타이밍을 분석합니다.
Platform Stats
머티리얼 에디터의 Platform Stats 창에서 타겟 플랫폼별 셰이더 통계를 확인합니다.
머티리얼 최적화 체크리스트
즉시 적용 가능한 최적화 항목
- 텍스처 샘플러 수를 최소화합니다. ORM 채널 패킹으로 3장→1장.
- Custom 노드 사용을 줄입니다. 가능하면 내장 노드로 대체.
- Saturate는 Clamp(0,1)보다 항상 우선합니다 (무료 인스트럭션).
- Static Switch로 미사용 기능의 코드를 완전히 제거합니다.
- 가능하면 Translucent 대신 Masked를 사용합니다.
- World Position Offset이 필요 없으면 비활성화합니다.
- Sin/Cos/Power 등 비싼 연산을 LUT(Lookup Texture)로 대체합니다.
- 텍스처의 MIP 레벨이 올바르게 생성되었는지 확인합니다.
핵심 요약
- Shader Complexity 뷰 모드로 셰이더 비용을 히트맵으로 시각화합니다.
- 인스트럭션 수보다 텍스처 페치 수가 실제 성능에 더 큰 영향을 미칩니다.
- stat gpu, profilegpu, RenderDoc 등으로 정확한 병목을 측정합니다.
- 채널 패킹, Static Switch, Saturate 활용, Translucent 회피가 핵심 최적화입니다.
도전 과제
배운 내용을 직접 실습해보세요
에디터에서 Shader Complexity 뷰모드(Alt+8)를 활성화하고, 프로젝트의 머티리얼들을 비교하세요. 빨간색(고비용)으로 표시되는 머티리얼의 노드 수와 텍스처 샘플 수를 기록하세요.
가장 복잡한 머티리얼의 Stats 창에서 인스트럭션 수를 확인하고, Constant Folding, 불필요한 노드 제거, Quality Switch 노드 활용으로 인스트럭션 수를 20% 이상 줄여보세요.
stat shaders 콘솔 명령으로 셰이더 메모리 사용량을 확인하고, 셰이더 퍼뮤테이션이 가장 많은 머티리얼 5개를 찾아 Shared 설정과 Usage Flag 최적화로 변형 수를 줄이세요.