게임 렉 백서 › 동기화 설계
롤백 넷코드의 예측 실패 Rollback misprediction
원인 ID sy-rollback · 주 담당 게임개발팀·클라이언트 개발
그림과 실험이 있는 원본 카드로 열기 →
상대 입력을 예측해 먼저 보여 주다가 틀리면 되감아 다시 계산합니다. 핑이 클수록 되감는 폭이 커집니다.
왜 상대가 입력을 바꿈(예측과 다름) → 그러면 실제 입력이 핑의 절반만큼 늦게 도착해 그만큼 되감아 재계산 → 화면에서는 상대 동작이 몇 프레임 건너뛰거나 갑자기 바뀜
- 증상
- 순간이동
- 요인
- 지연, 지터
- 누가 겪나
- 나만
- 언제
- 특정 행동을 할 때, 가끔 무작위로
- 담당
- 주 담당 게임개발팀·클라이언트 개발
- 게임개발팀 할 일
- 입력 지연을 1~3프레임 섞어 되감기 폭 줄이기, 되감기 상한 두기.
- 수치 감각
- 핑 100ms(한쪽 50ms)면 60fps에서 약 3프레임을 되감습니다. 입력 지연을 2프레임 두면 1프레임으로 줄어듭니다.
- 그래프에서는
- 가끔 무작위로 튐 · 되감은 프레임 수, RTT(핑)
- 확인할 곳
- 클라이언트가 되감기마다 되감은 프레임 수, 그때의 RTT, 입력 지연 설정, 되감기·재계산에 걸린 시간을 기록
- 이러면 맞음
- 상대 동작이 튀었다는 순간에 되감은 프레임 수가 크고 평균 되감기 폭이 대략 (한쪽 지연 − 입력 지연) ÷ 프레임 시간이며 핑이 클수록 커짐
- 이러면 아님
- 되감기 폭이 작은데도 뚝뚝 끊김이 생기면 재계산이 한 프레임 시간을 넘는 성능 문제. 되감은 뒤에도 두 화면의 결과가 계속 다르면 계산 결과의 어긋남(desync)
- 확인 수단
- 게임 서버·클라이언트의 로그·지표가 필요
출처
- GGPO Rollback Networking SDK GGPO
상대 입력을 예측해 먼저 진행하고 실제 입력이 다르면 어긋난 시점부터 현재까지 다시 계산 - 8 Frames in 16ms: Rollback Networking in 'Mortal Kombat' and 'Injustice 2' GDC
롤백으로 락스텝의 로컬 입력 지연을 없애고 16ms 안에 최대 8프레임을 되감아 재계산
함께 보면 좋은 원인
같은 층: 동기화 설계
같은 증상(순간이동)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기