핵심 정리
Window > Analysis > Frame Debugger
Enable구조 이해
Frame Debugger가 보여주는 것
Frame Debugger는 CPU가 GPU에 보낸 렌더링 명령을 프레임 단위로 단계별로 살펴볼 수 있게 해 주는 도구입니다. Unity 공식 문서는 이 도구를 오버드로우와 과도한 드로우콜 분석에 특히 유용하다고 설명합니다. Profiler가 "어디서 느린가"를 보는 데 강점이 있다면, Frame Debugger는 "무엇을 몇 번 그리고 있는가"를 시각적으로 파악하는 쪽에 가깝습니다. 각 드로우콜마다 어떤 오브젝트가, 어떤 셰이더 패스로 그려지는지 확인할 수 있습니다.
UI 렌더링 분석 예제
UI, 투명 오브젝트, 풀스크린 이펙트처럼 겹침이 많은 장면에서 병목 원인을 찾을 때 특히 유용합니다. 아래는 HUD 씬에서 Frame Debugger를 활용하는 전형적인 흐름입니다.
1. HUD가 열린 장면에서 Frame Debugger 활성화
2. 동일한 스프라이트/텍스트가 몇 번 그려지는지 확인
3. 풀스크린 패널 아래 숨겨진 UI가 여전히 그려지는지 확인
4. Canvas 분리와 비활성화 전략 조정패널 뒤에 가려진 UI가 실제로 매 프레임 그려지고 있다면, 해당 Canvas를 비활성화하거나 불필요한 드로우콜을 줄이는 방향으로 조정할 수 있습니다.
Profiler와의 역할 분리
Frame Debugger는 렌더링 흐름을 이해하는 데 강하지만 CPU 스크립트 비용이나 물리 연산은 설명해 주지 않습니다. 프레임 시간이 높게 나올 때 Profiler로 어떤 시스템이 비용을 차지하는지 먼저 파악하고, 렌더링 관련 문제가 의심되면 Frame Debugger로 드로우 순서와 패스 구조를 함께 보는 방식이 효과적입니다.
체크포인트
| 상황 | 적합한 선택 |
|---|---|
| draw call 순서와 pass 구조 파악 | Frame Debugger에서 단계별 확인 |
| 숨겨진 UI가 렌더링되는지 확인 | Frame Debugger로 Canvas draw call 추적 |
| 오버드로우 병목 의심 | Overdraw 뷰에서 겹침 확인 |
| 스크립트/물리 비용 파악 | Frame Debugger 아닌 Profiler 사용 |
| 질문 | 먼저 볼 것 | 이유 |
|---|---|---|
| 같은 오브젝트가 몇 번 그려지는가 | draw event 단계 | 중복 패스와 숨은 렌더링을 바로 볼 수 있음 |
| material 전환이 과한가 | SetPass 변화 | draw call 수보다 pass 전환이 더 문제일 수 있음 |
| UI가 실제로 가려졌는데도 그려지는가 | Canvas draw 순서 | 숨겨진 UI의 낭비를 빠르게 찾을 수 있음 |
| CPU 스파이크 원인인가 | Profiler로 되돌아가기 | Frame Debugger는 원인 범위를 렌더링으로만 좁혀 줌 |
주의할 점
Frame Debugger는 렌더링 흐름만 보여줍니다. CPU 스크립트 비용이나 물리 연산은 설명해 주지 않으므로 Profiler와 역할을 나눠서 보세요.
// ❌ 프레임 느림 → Frame Debugger만 열어서 draw call 확인
// → CPU 스크립트 병목인데 draw call만 줄이느라 시간 낭비
// ✅ 진단 도구 역할 구분
Profiler: 프레임 시간 분해 (Scripts, Physics, UI, Rendering 비중)
→ Rendering 비중이 크면 Frame Debugger로 이동
Frame Debugger: draw call 순서, SetPass, pass 수, 숨겨진 UI 렌더링 확인
// 숨겨진 UI 찾기 예시
Frame Debugger 활성 → Canvas draw call 구간에서
팝업 뒤에 가려진 패널이 여전히 그려지면 → SetActive(false) 또는 Canvas.enabled = falsedraw call 수만 줄었다고 바로 개선됐다고 보면 안 됩니다. 같은 수의 draw call이어도 overdraw, full-screen pass, material 전환 방식에 따라 GPU 비용은 크게 다를 수 있습니다.
// ❌ draw call 120 -> 100 감소만 보고 종료
실제 병목은 풀스크린 블러 pass 3회였음
// ✅ draw call 숫자와 pass 구조를 같이 확인
1. draw event 수 확인
2. full-screen effect pass 반복 확인
3. 투명 UI와 파티클 겹침 확인참고 링크
2 sources