핵심 정리
text
Profiler로 CPU 프레임 비용 확인
Frame Debugger로 draw call 흐름 확인구조 이해
- 프레임이 느리다고 해서 곧바로 "렌더링이 무겁다"거나 "스크립트가 느리다"고 단정하면 안 됩니다. 먼저 CPU-bound인지 GPU-bound인지 구분해야 해결 방향이 달라집니다.
- profiler에서 메인 스레드와 렌더 스레드가 두드러지면 CPU 쪽 병목을 의심할 수 있고, 스크립트/physics/UI rebuild를 먼저 봐야 합니다. 반대로 해상도나 post-processing, 그림자, 복잡한 material 효과를 낮췄을 때 프레임이 크게 좋아지면 GPU 부담일 가능성이 큽니다.
- draw call 수만 보는 습관은 초보 단계에서는 도움이 되지만, 실제로는 SetPass, material 변경, batching 여부, 오버드로우, pass 수를 함께 봐야 합니다. Frame Debugger는 이 흐름을 눈으로 확인하게 도와줍니다.
- SRP Batcher와 GPU Instancing은 같은 재질/셰이더를 더 효율적으로 처리하게 만드는 대표 기법이지만, 모든 프로젝트에서 자동으로 큰 이득이 나는 것은 아닙니다. 구조와 material 사용 방식이 맞아야 효과가 납니다.
- 좋은 진단 흐름은 "프레임이 느리다 -> CPU/GPU 가설을 세운다 -> profiler와 frame debugger로 증거를 모은다 -> batching, material, 그림자, 해상도, UI rebuild 중 무엇이 실제 원인인지 좁힌다"입니다.
체크포인트
| 상황 | 적합한 선택 |
|---|---|
| 프레임 느림, CPU인지 GPU인지 모름 | Profiler에서 CPU/GPU 타임 비교 후 병목 구분 |
| draw call 흐름 시각적으로 확인 | Frame Debugger로 pass별 draw call 추적 |
| 같은 셰이더 오브젝트가 많아 최적화 필요 | SRP Batcher 활성화 여부 확인 |
| 동일 mesh/material 수백 개 렌더링 | GPU Instancing 적용 검토 |
| 의심 패턴 | 더 자주 맞는 가설 | 먼저 해 볼 확인 |
|---|---|---|
| 해상도만 낮춰도 크게 빨라짐 | GPU-bound | 그림자, post-processing, overdraw 확인 |
| 오브젝트 수·스크립트 수가 늘면 느려짐 | CPU-bound | Scripts, Physics, UI rebuild 확인 |
| 같은 머티리얼 오브젝트가 많음 | batching 구조 문제 | SRP Batcher, instancing 조건 확인 |
| draw call은 적은데 여전히 느림 | GPU pass/픽셀 비용 | full-screen effect, transparents, shader cost 확인 |
주의할 점
draw call 숫자 하나만 보고 최적화 방향을 정하면 엉뚱한 곳을 손댑니다. CPU-bound인지 GPU-bound인지 먼저 구분해야 해결 방향이 달라집니다.
text
// ❌ draw call 숫자만 보고 최적화
"draw call 200개 → batching 적용" → 실제 병목은 PostProcessing이었음
// ✅ 병목 구분 흐름
1. Profiler → CPU 프레임 시간 vs GPU 프레임 시간 비교
- CPU 높음: Scripts, Physics, UI rebuild 점검
- GPU 높음: 해상도 낮춰 테스트 → 크게 개선되면 GPU 확정
2. GPU 병목 확정 시:
- Frame Debugger로 draw call, SetPass, overdraw 확인
- SRP Batcher, GPU Instancing 적용 여부 점검
- 그림자, PostProcessing pass 수 줄이기SRP Batcher나 GPU Instancing을 켰다고 자동으로 병목이 풀리지는 않습니다. material 속성 변경 방식과 셰이더 호환 조건이 안 맞으면 기대한 만큼 이득이 안 납니다.
text
// ❌ 같은 메시가 많으니 instancing만 켬
실제론 material property를 오브젝트마다 다르게 바꿔 batching 이점이 작음
// ✅ 기법보다 조건을 먼저 확인
1. 같은 mesh/material 조합이 반복되는가
2. per-object property 변경이 batching을 깨고 있지 않은가
3. GPU-bound인지 먼저 확정했는가참고 링크
4 sources