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

게임 렉 백서 › 동기화 설계

지연 보상 없는 판정 Server-now hit validation

원인 ID sy-no-lagcomp · 주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발

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

서버가 “지금 서버에 있는 위치”로만 명중을 판정하면, 내가 본 화면과 판정이 어긋납니다.

왜 내 화면의 상대는 약 0.2초 과거 위치(핑 150ms, 보간 100ms일 때) → 그러면 서버는 현재 위치로 판정해 내가 조준한 곳엔 이미 없음 → 화면에서는 분명 맞혔는데 빗나감. 움직이는 대상을 앞질러 쏴야 함

증상
씹힘·롤백
요인
지연
누가 겪나
나만
언제
특정 행동을 할 때
담당
주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발
게임개발팀 할 일
서버: 공격자가 보던 시점으로 되감아 판정(지연 보상), 또는 대상 지정 방식으로 바꾸기. 클라이언트: 공격할 때 자기가 보던 시점(보간 중인 서버 시각)을 함께 보내기.
그래프에서는
일부만 높음 · 움직이는 대상 명중률(핑 구간별)
확인할 곳
서버 판정 로그에 공격 시각, 공격자 화면의 대상 위치(클라이언트가 보낸 값), 판정에 쓴 서버의 대상 위치, 공격자 RTT를 함께 남김. 개발 빌드에서 서버가 판정에 쓴 위치를 클라이언트 화면에 겹쳐 그리면 바로 보임
이러면 맞음
빗나간 판정에서 두 위치 차이가 대략 대상 속도 × (공격자 RTT + 보간 시간)이고, 핑이 높을수록 움직이는 대상의 명중률만 떨어짐
이러면 아님
멈춰 있는 대상도 빗나가면 판정 박스·충돌 검사 문제. 되감기를 하는데도 어긋나면 클라이언트가 보간 시간을 서버에 잘못 알리는지 봄
확인 수단
게임 서버·클라이언트의 로그·지표가 필요

출처

  1. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
    지연 보상이 없으면 지연만큼 앞질러 쏴야 함. 서버가 지연과 보간 시간만큼 되감아 판정하는 지연 보상
  2. Peeking into VALORANT's Netcode Riot Games
    서버가 사격 순간 플레이어가 보던 게임 상태로 되감아 명중 판정, 클라이언트가 보던 시뮬레이션 시각을 함께 보냄
  3. Source SDK 2013: player_lagcompensation.cpp Valve
    Source 엔진의 되감는 시간 = 네트워크 지연 + 보간 시간

함께 보면 좋은 원인

같은 층: 동기화 설계

같은 증상(씹힘·롤백)의 다른 층 원인

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