1:07 · client prediction · server authority · reconciliation · netcode

앞으로 달렸는데, 왜 뒤로 끌려갈까?

이 영상에 나오는 용어 14개.

러버밴딩
클라 화면의 캐릭터가 서버가 인정한 위치로 끌려 되돌아가는 현상이다. 고무줄에 당겨지듯 보여서 붙은 이름이다.
보정 보간 (Smoothing)
보정된 위치로 순간이동하지 않고 짧은 시간(영상에서는 100~200ms)에 걸쳐 옮겨 가는 처리다.
서버 권한 (Server Authority)
위치, 체력 같은 게임 상태의 최종 결정권을 서버가 갖는 구조다. 클라 조작을 그대로 믿지 않아 치트를 막을 수 있다.
오차 허용치
서버와 클라 위치 차이가 이 값보다 작으면 보정하지 않는 기준이다. 사소한 떨림을 줄인다.
재조정 (Reconciliation)
보정을 받으면 그 위치에서 아직 Ack를 못 받은 입력을 다시 적용해 현재 위치를 다시 계산하는 기법이다.
지연 스파이크
평소 낮던 RTT가 짧은 시간 동안 크게 튀는 현상이다. 영상의 RTT 그래프에서 60ms 안팎이던 값이 800ms대로 오른다.
클라이언트 예측 (Prediction)
서버 응답을 기다리지 않고 입력 즉시 결과를 화면에 반영하는 방식이다. 조작감은 좋아지지만 서버 판정과 어긋날 수 있다.
틱 / 틱레이트
서버가 게임 상태를 한 번 갱신하는 주기가 틱이고, 초당 틱 수가 틱레이트다. 20Hz는 50ms마다 한 번 판정한다는 뜻이다.
패킷 손실
전송 중에 패킷이 사라져 상대에게 도착하지 않는 것이다. TCP에서는 재전송으로 복구되지만 그만큼 늦어진다.
Ack
서버가 특정 입력을 받아 처리했다고 알려 주는 응답이다. 영상에서는 Ack #n이 Move #n에 대한 확인이다.
Correction (보정 패킷)
서버 판정이 클라 예측과 다를 때 서버가 보내는, 그 입력 시점의 올바른 위치다. 클라는 여기서 미확인 입력을 다시 적용한다.
Head-of-Line (HOL) 블로킹
순서를 보장하는 TCP에서 앞 패킷 하나가 재전송을 기다리는 동안 뒤 패킷들도 전달되지 못하고 막히는 현상이다.
RTT
패킷이 클라에서 서버로 갔다가 응답이 돌아오기까지의 왕복 시간이다. 흔히 핑이라고 부른다.
UDP · 비신뢰 채널
재전송과 순서 보장이 없는 전송 방식이다. 이동 입력은 UDP로 보내되 패킷마다 최근 입력 몇 개를 중복해 실어 손실을 견딘다. 서버가 보내는 상태는 최신 값만 쓴다.