한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

게임 렉 백서 › 동기화 설계

롤백 넷코드의 예측 실패 Rollback misprediction

원인 ID sy-rollback · 주 담당 게임개발팀·클라이언트 개발

그림과 실험이 있는 원본 카드로 열기 →

상대 입력을 예측해 먼저 보여 주다가 틀리면 되감아 다시 계산합니다. 핑이 클수록 되감는 폭이 커집니다.

왜 상대가 입력을 바꿈(예측과 다름) → 그러면 실제 입력이 핑의 절반만큼 늦게 도착해 그만큼 되감아 재계산 → 화면에서는 상대 동작이 몇 프레임 건너뛰거나 갑자기 바뀜

증상
순간이동
요인
지연, 지터
누가 겪나
나만
언제
특정 행동을 할 때, 가끔 무작위로
담당
주 담당 게임개발팀·클라이언트 개발
게임개발팀 할 일
입력 지연을 1~3프레임 섞어 되감기 폭 줄이기, 되감기 상한 두기.
수치 감각
핑 100ms(한쪽 50ms)면 60fps에서 약 3프레임을 되감습니다. 입력 지연을 2프레임 두면 1프레임으로 줄어듭니다.
그래프에서는
가끔 무작위로 튐 · 되감은 프레임 수, RTT(핑)
확인할 곳
클라이언트가 되감기마다 되감은 프레임 수, 그때의 RTT, 입력 지연 설정, 되감기·재계산에 걸린 시간을 기록
이러면 맞음
상대 동작이 튀었다는 순간에 되감은 프레임 수가 크고 평균 되감기 폭이 대략 (한쪽 지연 − 입력 지연) ÷ 프레임 시간이며 핑이 클수록 커짐
이러면 아님
되감기 폭이 작은데도 뚝뚝 끊김이 생기면 재계산이 한 프레임 시간을 넘는 성능 문제. 되감은 뒤에도 두 화면의 결과가 계속 다르면 계산 결과의 어긋남(desync)
확인 수단
게임 서버·클라이언트의 로그·지표가 필요

출처

  1. GGPO Rollback Networking SDK GGPO
    상대 입력을 예측해 먼저 진행하고 실제 입력이 다르면 어긋난 시점부터 현재까지 다시 계산
  2. 8 Frames in 16ms: Rollback Networking in 'Mortal Kombat' and 'Injustice 2' GDC
    롤백으로 락스텝의 로컬 입력 지연을 없애고 16ms 안에 최대 8프레임을 되감아 재계산

함께 보면 좋은 원인

같은 층: 동기화 설계

같은 증상(순간이동)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기