Quick Reference
성능 예산은 60fps의 16.67ms처럼 CPU·GPU를 따로 관리하고, target device 최악 장면에서 p95·worst frame·memory peak를 검증합니다.
- 60 fps는
16.67 ms, 30 fps는33.33 ms의 frame interval을 뜻합니다. CPU와 GPU 예산을 단순 합산하지 말고, 각각이 frame pacing을 넘지 않도록 관리합니다. - 예산은 “모바일 1.2 GB” 같은 복사 가능한 숫자가 아니라 target device, graphics API, thermal 상태, OS 여유 메모리, 장면별 최악 상황으로 정합니다.
- 기능 변경 전후에는 같은 build 설정과 warm-up, 입력, 카메라 경로에서 median, p95, worst frame, memory peak를 기록합니다.
예산을 나누는 방법
| 항목 | 무엇을 제한하는가 | 함께 기록할 것 |
|---|---|---|
| CPU frame time | simulation, script, UI, render submission | Main/Render thread, spike marker |
| GPU frame time | geometry, shader, post-process, fill rate | 해상도, render scale, quality level |
| memory peak | 장시간 안정성과 OS 종료 위험 | used/reserved, device process memory |
| loading | 전환 체감과 streaming 실패 | warm/cold load, asset cache 상태 |
- CPU와 GPU는 서로 겹쳐 처리될 수 있으므로 두 시간을 더한 값을 전체 frame time으로 쓰지 않습니다. CPU가 GPU를 기다리는지, v-sync cap에 묶였는지까지 읽어야 합니다.
- median은 전형적인 frame, p95는 상위 5%의 나쁜 frame, worst는 최대 spike입니다. median만 좋아져도 p95가 나빠지면 전투·UI 전환의 체감은 오히려 악화될 수 있습니다.
- memory budget에는 steady state뿐 아니라 로딩 중 peak와 scene 전환의 중복 asset 기간을 포함합니다. memory snapshot capture 수치는 benchmark frame time과 분리해 기록합니다.
측정 프로토콜
text
1. target device, OS, Unity build, quality level, graphics API를 기록한다.
2. 앱을 warm-up하고 동일 save/camera/input으로 30~60초 재현한다.
3. median, p95, worst frame과 memory peak를 기준선으로 저장한다.
4. 변경 하나만 적용한 뒤 같은 절차를 반복한다.
5. 초과한 budget과 사용자 체감 구간을 함께 판정한다.- thermal throttling과 배터리 상태는 모바일 결과를 바꿉니다. 장시간 측정은 device 온도와 충전 상태를 기록하고, 첫 번째 run만 결과로 쓰지 않습니다.
- VSync와
Application.targetFrameRate는 프레임 그래프의 상한을 만듭니다. 목표 30 fps에서 33 ms 안팎으로 고정된 capture는 실제 28 ms 개선을 보이지 못할 수 있으므로 cap 정책을 함께 기록합니다. - budget의 소유자를 정합니다. 예를 들어 전투 VFX가 GPU p95를 넘겼다면 VFX/graphics 담당이 줄일 범위와 gameplay가 유지해야 할 최소 품질을 함께 합의합니다.
자주 틀리는 부분
예산 숫자를 다른 프로젝트에서 그대로 가져오지 마세요. 30 fps 목표, 기기 RAM, texture format, 지원 OS, scene 규모가 다르면 같은 12 ms와 1.2 GB도 의미가 달라집니다. 숫자보다 재현 조건과 초과 판정 규칙을 먼저 고정하세요.
로딩 시간과 runtime frame budget을 한 표에서 평균내지 마세요. scene 전환의 I/O·decompression·shader warm-up은 다른 성격의 비용입니다. 로딩은 완료 시간과 hitch를, 게임플레이는 frame distribution을 따로 관리해야 합니다.
참고 링크
2 sources