PART 2 - 강의 3/5

WPO 최적화 전략

World Position Offset이 Nanite와 VSM에 미치는 영향과 최적화 방법

01

WPO의 성능 영향

WPO 활성화 시 발생하는 오버헤드

World Position Offset(WPO)은 머티리얼에서 버텍스 위치를 동적으로 변형하는 기능입니다. 폴리지 바람 효과 등에 널리 사용되지만, Nanite와 VSM에 상당한 성능 영향을 줍니다.

WPO 활성화 시 발생하는 문제
WPO 활성화 시: 1. 프로그래머블 래스터화 필요 -> 별도 Raster Bin 2. 클러스터 바운드 재계산 -> GPU 비용 3. VSM 캐시 무효화 -> 그림자 성능 저하
매우 중요

WPO Disable Distance는 Nanite와 VSM 성능에 엄청난 차이를 만듭니다. 모든 폴리지와 WPO 사용 Static Mesh에 반드시 설정하세요.

02

WPO Disable Distance

가장 중요한 최적화 설정

WPO Disable Distance는 지정된 거리 이후에서 WPO를 비활성화합니다. 먼 거리에서는 WPO 효과가 눈에 잘 보이지 않으므로, 성능을 크게 향상시킬 수 있습니다.

설정 방법 // 머티리얼에서 설정 Material.WPODisableDistance = 5000.0f; // 50m // 또는 Static Mesh에서 설정 StaticMesh.WPODisableDistance = 5000.0f; // Static Mesh 설정이 머티리얼보다 우선
50m
권장 시작 거리
100m
일반적 설정
설정 가이드

작은 폴리지(풀, 작은 식물)는 30-50m, 큰 나무는 80-100m 정도가 적절합니다. 플레이어가 WPO 비활성화를 눈치채지 못할 정도의 거리를 찾으세요.

03

VSM 캐시 영향

WPO가 Virtual Shadow Maps에 미치는 영향

WPO가 활성화된 오브젝트는 매 프레임 그림자를 다시 렌더링해야 합니다. 이는 VSM 캐시 무효화를 유발하여 그림자 렌더링 비용이 크게 증가합니다.

Shadow Cache Invalidation Behavior // 프리미티브별 오버라이드 설정 enum class EShadowCacheInvalidationBehavior { Auto, // 기본: WPO/변환 변경 시 무효화 Always, // 항상 무효화 (알려지지 않은 애니메이션) Rigid, // WPO 무효화 억제 (정적 WPO용) Static // Rigid + 변환 변경도 억제 }; // 정적 WPO (예: 정적 변형)에는 Rigid 사용
VSM 최적화 전략
  • WPO Disable Distance 설정 - 먼 거리에서 캐시 활용
  • 정적 WPO에 Rigid 사용 - 불필요한 무효화 방지
  • Static/Dynamic 분리 - 동적 오브젝트 별도 관리
04

WPO 최적화 체크리스트

종합 최적화 가이드

WPO 최적화 체크리스트
  • WPO Disable Distance 설정 - 모든 폴리지/WPO 메시에 필수
  • 미세한 WPO 효과만 사용 - 과도한 변형은 글리치 유발
  • r.nanite.showmeshdrawevents 1로 프로파일링
  • Raster Bin 분포 확인 및 최적화
  • 거리에서 WPO 페이드 아웃 - 급격한 전환 방지
  • 정적 WPO에 Rigid 캐시 설정
프로파일링 명령 // WPO 영향 확인 r.Nanite.ShowMeshDrawEvents = 1 // VSM 캐시 통계 Stat ShadowRendering // Nanite 통계 NaniteStats
주의사항

WPO 변형이 클러스터 바운드를 초과하면 컬링 글리치가 발생합니다. 변형 범위를 클램핑하거나, 메시의 바운드를 적절히 확장하세요.

SUMMARY

핵심 요약

  • WPO는 프로그래머블 래스터화, 바운드 재계산, VSM 캐시 무효화 유발
  • WPO Disable Distance가 가장 중요한 최적화 (50-100m 권장)
  • Shadow Cache Invalidation = Rigid로 정적 WPO 캐시 보존
  • 먼 거리에서 WPO 페이드 아웃으로 자연스러운 전환
  • Nanite Skinning (5.7)을 WPO 대안으로 고려
PRACTICE

도전 과제

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

실습 1: WPO Disable Distance 설정

바람 효과가 적용된 폴리지 메시를 배치하고, Static Mesh 또는 머티리얼에서 WPO Disable Distance를 30m, 50m, 100m로 설정하면서 stat ShadowRendering으로 VSM 캐시 무효화 횟수 변화를 관찰하세요.

실습 2: Shadow Cache Invalidation 테스트

정적 WPO(예: 정적 변형 효과)가 적용된 메시의 Shadow Cache Invalidation Behavior를 Auto에서 Rigid로 변경하고, VSM 캐시 히트율 변화를 측정하세요. r.Shadow.Virtual.Cache.DrawInvalidatingBounds = 1로 무효화 범위를 시각화하세요.

심화 과제

10,000개의 폴리지 인스턴스가 있는 대규모 씬에서 WPO Disable Distance 미설정 vs 50m 설정의 VSM 렌더링 비용을 비교하세요. ProfileGPU의 Shadow 카테고리 타이밍과 stat Nanite의 프로그래머블 래스터 비율도 함께 분석하세요.