핵심 정리
60 fps 목표 -> 프레임 예산 약 16.67 ms
30 fps 목표 -> 프레임 예산 약 33.33 ms구조 이해
성능 예산이란 무엇인가
성능 예산은 막연한 "빠르게"가 아니라 CPU, GPU, 메모리 목표치를 수치로 정하는 일입니다. Unity 공식 가이드는 프로파일링을 일찍 시작해 프로젝트의 "성능 시그니처"를 만들라고 권장합니다. 기준선이 없으면 어느 기능이 추가됐을 때 느려졌는지 알 수 없고, 최적화 작업도 방향을 잃기 쉽습니다.
플랫폼별 목표치 설정
타깃 기기별 RAM, VRAM, 프레임 목표를 먼저 정해야 기능 추가와 최적화 우선순위가 흔들리지 않습니다. 예를 들어 모바일 30 fps를 목표로 한다면 Main Thread 12 ms 이하, GPU 14 ms 이하, 메모리 1.2 GB 이하처럼 구체적인 수치로 분해해야 합니다. 전투 장면처럼 스파이크가 잦은 구간은 별도 기준(예: 40 ms 미만)을 잡는 것이 현실적입니다.
예시 모바일 목표:
- 30 fps
- Main Thread 12 ms 이하
- GPU 14 ms 이하
- 메모리 1.2 GB 이하
- 전투 장면 스파이크 40 ms 미만예산 항목 간 상호 영향
그래픽 품질, 물리 정확도, UI 복잡도, 로딩 시간은 모두 같은 예산 안에서 서로 영향을 주고받습니다. 한 항목을 높이면 다른 항목을 줄여야 하는 절충이 생깁니다. 장면별로 메뉴, 전투, 로딩 구간을 따로 기준치를 두면 회귀 탐지가 훨씬 쉬워집니다.
체크포인트
| 상황 | 적합한 선택 |
|---|---|
| 목표 fps 역산 | 60fps → 16.67ms, 30fps → 33.33ms 프레임 예산 계산 |
| 모바일 구체 목표치 설정 | Main Thread ≤12ms, GPU ≤14ms, 메모리 ≤1.2GB |
| 어느 시점에 느려졌는지 모름 | 기준선 측정값이 있어야 회귀 시점 파악 가능 |
| 최적화 우선순위 결정 | 프레임 예산 초과 항목 중 체감 큰 것부터 |
| 예산 항목 | 왜 따로 잡나 | 놓치기 쉬운 점 |
|---|---|---|
| Main Thread | 게임플레이 로직과 입력 체감에 직결 | 평균만 보고 스파이크를 놓치기 쉬움 |
| GPU | 해상도, 그림자, post-processing 영향이 큼 | CPU 병목인데 GPU만 줄이면 체감이 적음 |
| 메모리 | 크래시와 장시간 플레이 안정성에 직결 | 프레임 시간과 별개로 터질 수 있음 |
| 로딩 시간 | 첫인상과 전환 체감에 영향 | 런타임 프레임 예산과 같은 잣대로 보면 안 됨 |
주의할 점
예산 없이 최적화하면 "어디까지 줄여야 하는지" 기준이 없어집니다. 수치 목표를 먼저 잡고, 측정 → 비교 → 개선 순서로 진행해야 방향을 잃지 않습니다.
// ❌ 기준 없이 최적화
"왠지 느린 것 같으니 드로우콜 줄이기" → 개선됐는지 알 수 없음
// ✅ 예산 기반 최적화 흐름
1. 목표 설정: 모바일 30fps, Main Thread ≤12ms
2. 기준선 측정: 현재 Main Thread 18ms (초과 6ms 확인)
3. Profiler로 병목 식별: Physics.Simulate 5ms
4. 최적화 적용 → 재측정 → 12ms 이하 달성 확인
// 장면별 예산 분리 예시
메뉴: Main Thread ≤5ms
전투: Main Thread ≤12ms (스파이크 허용 ≤20ms)
로딩: 프레임 시간 무관, 로드 완료 시간 ≤3s전체 게임 예산 하나만 두면 메뉴, 전투, 로딩처럼 성격이 다른 구간의 회귀를 놓치기 쉽습니다. 장면 유형별 예산을 따로 두는 편이 더 실전적입니다.
// ❌ 모든 장면 공통: 16.67ms 이하
메뉴는 넉넉한데 전투 스파이크만 반복적으로 놓침
// ✅ 구간별 예산 분리
메뉴: Main Thread ≤5ms
일반 플레이: ≤10ms
전투: ≤12ms, 스파이크 ≤20ms
로딩: 완료 시간 ≤3s참고 링크
2 sources