PART 07 · 강의 1/3

셰이더 복잡도 분석

Shader Complexity 뷰, 인스트럭션 카운트, GPU 프로파일링으로 머티리얼 병목을 찾고 해결합니다.

01

Shader Complexity 뷰 모드

시각적으로 셰이더 비용 확인

뷰포트에서 View Mode → Optimization Viewmodes → Shader Complexity를 선택하면 각 픽셀의 셰이더 비용을 히트맵으로 표시합니다.

색상복잡도인스트럭션 수 (대략)상태
녹색낮음~50양호
파란색→초록보통50~100허용 범위
노란색높음100~200최적화 검토
빨간색매우 높음200~300최적화 필요
분홍/흰색극심300+심각한 병목
반투명 오버드로우

Shader Complexity 뷰에서 반투명 오브젝트가 겹치는 영역은 색상이 급격히 상승합니다. 오버드로우(같은 픽셀을 여러 번 셰이딩)가 반투명의 가장 큰 비용입니다. 파티클 이펙트가 화면을 가득 채우는 상황에 특히 주의하세요.

02

인스트럭션과 실제 성능

숫자 너머의 진짜 병목

머티리얼 통계의 인스트럭션 수는 참고용이며, 실제 GPU 성능은 여러 요인에 영향을 받습니다.

요인영향최적화 방법
텍스처 페치(Fetch)매우 높음텍스처 수 줄이기, 채널 패킹, MIP 활용
텍스처 캐시 미스높음UV 연속성 유지, 큰 텍스처 피하기
ALU(연산)중간복잡한 수학 단순화, LUT 사용
레지스터 압력중간동시 사용 변수 줄이기
동적 분기가변step/lerp로 대체
텍스처 페치가 핵심

대부분의 머티리얼 성능 병목은 텍스처 페치에서 발생합니다. 인스트럭션 수가 200이라도 텍스처 샘플이 3개면 빠를 수 있고, 인스트럭션이 50이라도 텍스처 샘플이 15개면 느릴 수 있습니다. 텍스처 수를 줄이는 것이 가장 효과적인 최적화입니다.

03

GPU 프로파일링 도구

정확한 병목 측정

Profiling Commands // 콘솔 명령어로 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 창에서 타겟 플랫폼별 셰이더 통계를 확인합니다.

04

머티리얼 최적화 체크리스트

즉시 적용 가능한 최적화 항목

최적화 체크리스트
  • 텍스처 샘플러 수를 최소화합니다. ORM 채널 패킹으로 3장→1장.
  • Custom 노드 사용을 줄입니다. 가능하면 내장 노드로 대체.
  • Saturate는 Clamp(0,1)보다 항상 우선합니다 (무료 인스트럭션).
  • Static Switch로 미사용 기능의 코드를 완전히 제거합니다.
  • 가능하면 Translucent 대신 Masked를 사용합니다.
  • World Position Offset이 필요 없으면 비활성화합니다.
  • Sin/Cos/Power 등 비싼 연산을 LUT(Lookup Texture)로 대체합니다.
  • 텍스처의 MIP 레벨이 올바르게 생성되었는지 확인합니다.
SUMMARY

핵심 요약

  • Shader Complexity 뷰 모드로 셰이더 비용을 히트맵으로 시각화합니다.
  • 인스트럭션 수보다 텍스처 페치 수가 실제 성능에 더 큰 영향을 미칩니다.
  • stat gpu, profilegpu, RenderDoc 등으로 정확한 병목을 측정합니다.
  • 채널 패킹, Static Switch, Saturate 활용, Translucent 회피가 핵심 최적화입니다.
PRACTICE

도전 과제

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

실습 1: Shader Complexity 뷰모드 분석

에디터에서 Shader Complexity 뷰모드(Alt+8)를 활성화하고, 프로젝트의 머티리얼들을 비교하세요. 빨간색(고비용)으로 표시되는 머티리얼의 노드 수와 텍스처 샘플 수를 기록하세요.

실습 2: 인스트럭션 카운트 최적화

가장 복잡한 머티리얼의 Stats 창에서 인스트럭션 수를 확인하고, Constant Folding, 불필요한 노드 제거, Quality Switch 노드 활용으로 인스트럭션 수를 20% 이상 줄여보세요.

심화 과제: 플랫폼별 셰이더 프로파일링

stat shaders 콘솔 명령으로 셰이더 메모리 사용량을 확인하고, 셰이더 퍼뮤테이션이 가장 많은 머티리얼 5개를 찾아 Shared 설정과 Usage Flag 최적화로 변형 수를 줄이세요.