The Great Hitch Hunt: Tracking Down Every Frame Drop | Unreal Fest Orlando 2025
- 게임 내 프레임 드롭(카툰)은 실제하며, 개발 초기부터 '무엇이, 왜, 어떻게'의 워크플로우를 통해 적극적으로 추적하고 해결해야 합니다. 🛠️
- 레벨 스트리밍 카툰: 정적 지오메트리에 액터를 과도하게 사용하면 발생하며, 특히 대규모 월드에서 문제가 됩니다. 🗺️
- 해결책: 순수 정적 지오메트리에는 액터 사용을 피하고, Packed Level Actor, PCG, 인스턴스드 스태틱 메시(ISM), Foliage 툴 등을 활용해야 합니다. UE 5.5+의 Cell Transformer 기능도 도움이 됩니다. 📦
- 물리 카툰: 물리 시뮬레이션에 최적화되지 않은 메시, 복잡한 물리 씬, 불필요한 충돌/오버랩 이벤트가 주원인입니다. 💥
- 해결책: 물리 애셋을 최적화하여 단순 물리(구, 캡슐, 박스)를 사용하고, 불필요한 복잡 물리나 물리 자체를 제거합니다. 적절한 충돌 채널을 설정하고, 오버랩 이벤트를 비활성화하며, Chaos Visual Debugger를 활용해 문제를 진단합니다. 🔬
- 액터 생성 카툰: 액터는 생성되는 즉시 모든 초기화 작업을 완료해야 하므로, 복잡한 액터를 한 번에 많이 생성하면 프레임 드롭이 발생합니다. 🚀
- 해결책: 액터 생성을 단순화하고, 매 프레임 동적으로 생성되는 액터 수를 제한하며, 가능한 한 컴포넌트 초기화 작업을 지연시키고, 액터 풀링을 고려해야 합니다. ♻️
- PSO 컴파일 카툰: DX12 등 최신 그래픽 API는 드로우 콜 시 완전 컴파일된 PSO를 요구하며, PC/모바일에서는 사용자 기기에서 컴파일해야 하므로 지연이 발생합니다. 💻
- 해결책: UE 5.3+의 PSO 프리캐싱 기능을 활용하고, 게임 시작 시 전역 셰이더 컴파일을 위한 로딩 화면을 구현해야 합니다. 성능 분석 시에는 항상 PSO 드라이버 캐시를 지우고 테스트해야 합니다. ⏳
- 가비지 컬렉션 카툰: 너무 많은 UObject가 메모리에 존재하면 GC가 오래 걸려 프레임 드롭을 유발합니다. 🗑️
- 해결책: 씬 내 오브젝트 총량을 줄이고, obj list -countsort 명령어로 원인을 파악하며, 수명이 짧은 오브젝트는 오브젝트 풀링을 사용하고, 로딩 화면 등 적절한 시점에 GC를 수동으로 트리거합니다. 🧹
- 동기 로딩 카툰: 동기(블로킹) 애셋 로딩은 게임 메인 스레드를 멈추게 하여 가장 긴 프레임 드롭을 유발합니다. 🛑
- 해결책: 게임 내에서 동기 로딩을 절대 사용하지 않고, 항상 비동기 로딩 워크플로우를 사용하도록 팀을 교육하며, 애셋 검증기를 통해 동기 로딩 사용을 금지해야 합니다. 🚫