게임 렉 백서 › L1 클라이언트 게임 프로세스
프레임 타임 스파이크 Frame hitch
원인 ID cg-hitch · 주 담당 게임개발팀·클라이언트 개발
그림과 실험이 있는 원본 카드로 열기 →
한 프레임 계산이 평소보다 몇 배 오래 걸려 화면이 잠깐 멈춥니다.
왜 스킬 이펙트 폭증, 대량 스폰, UI 전체 갱신이 한 프레임에 몰림 → 그러면 16.7ms 안에 못 끝내고 50~300ms가 걸림 → 화면에서는 화면이 멈칫했다가 다음 프레임에 모두가 한 번에 이동
- 증상
- 뚝뚝 끊김, 멈춤
- 요인
- 정체
- 누가 겪나
- 나만
- 언제
- 사람이 몰릴 때, 특정 행동을 할 때, 가끔 무작위로
- 담당
- 주 담당 게임개발팀·클라이언트 개발
- 게임개발팀 할 일
- 무거운 일을 여러 프레임에 나누기, 프로파일러로 튀는 프레임 찾기, 이펙트 개수 상한.
- 수치 감각
- 60FPS의 한 프레임은 16.7ms. 50ms를 넘는 프레임 하나만 있어도 “끊겼다”고 느끼기 쉽습니다.
- 그래프에서는
- 가끔 무작위로 튐 · 프레임 시간
- 확인할 곳
- PresentMon으로 게임 중 프레임 시간(FrameTime)과 CPU·GPU가 그 프레임에 쓴 시간(CPUBusy·GPUBusy)을 녹화. 모바일은 안드로이드 vitals의 느린 세션·느린 렌더링 지표
- 이러면 맞음
- 평소 16.7ms 근처인 프레임 시간이 50ms를 넘게 솟는 순간이 스킬 연출·대량 스폰·UI 전체 갱신과 겹치고, 그 순간 핑은 그대로임
- 이러면 아님
- 프레임 시간은 고른데 다른 캐릭터만 멈칫하면 “보간 버퍼가 없거나 짧음” 같은 네트워크 쪽. 튀는 간격이 규칙적이면 “클라이언트 가비지 컬렉션”을 먼저 봄
- 확인 수단
- 유저 쪽 환경에서 확인
출처
- Slow rendering Android (Google)
60FPS를 내려면 한 프레임을 16ms 안에 그려야 하고 늦으면 프레임을 건너뛰어 끊김(jank)으로 보임 - Slow Sessions (games only) Android (Google)
안드로이드 vitals는 게임 프레임이 50ms(20FPS)·34ms(30FPS)를 넘으면 느린 프레임으로 봄 - PresentMon Capture Application (README-CaptureApplication.md) Intel
FrameTime(프레임 사이 CPU 시간), CPUBusy·GPUBusy(그 프레임을 만드는 데 CPU·GPU가 쓴 시간)
함께 보면 좋은 원인
같은 층: L1 클라이언트 게임 프로세스
같은 증상(뚝뚝 끊김)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기