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

게임 렉 백서 › 동기화 설계

명령 동기화의 경로 계산 불일치 Command sync with divergent pathing

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

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

“여기로 가라”만 주고받고 경로는 양쪽이 각자 계산하면, 계산이 조금만 달라도 캐릭터나 몬스터가 다른 경로로 가다가 제자리로 끌려옵니다.

왜 클릭 이동·몬스터 추적에서 목적지만 보내고 경로는 클라이언트가 따로 계산 → 그러면 지형 데이터 차이, 다른 캐릭터와의 충돌, 계산 순서 차이로 서버와 다른 경로로 이동 → 화면에서는 몬스터가 벽을 뚫고 가다 휙 옮겨짐, 클릭한 캐릭터가 미끄러지듯 방향을 틂

증상
순간이동, 고무줄
요인
지연
누가 겪나
특정 장소·채널, 나만
언제
이동 중·지역 전환 때
담당
주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발
게임개발팀 할 일
서버: 경로의 중간 지점(웨이포인트)까지 함께 보내기, 주기적으로 위치 맞추기. 클라이언트: 어긋남은 부드럽게 수렴, 서버와 같은 지형 데이터 사용.
그래프에서는
가끔 무작위로 튐 · 개체별 위치 보정 횟수·거리
확인할 곳
서버가 보낸 위치와 클라이언트가 계산한 위치의 차이를 개체마다 기록하고 보정이 일어난 좌표를 지도 위에 찍어 봄. 양쪽의 경로 결과나 위치를 체크섬으로 요약해 주기적으로 비교하면 어긋나기 시작한 시점을 찾을 수 있음
이러면 맞음
보정이 특정 지형(문턱, 좁은 통로, 경사)이나 붐비는 곳에 몰리고 네트워크 지표가 정상인 유저에게도 같은 자리에서 반복됨
이러면 아님
장소와 상관없이 손실·지터가 튄 순간에만 보정되면 회선 문제. 몬스터 한 마리가 여러 사람 화면에서 함께 튀면 몬스터 제어 권한이 느린 클라이언트에 있는지 봄
확인 수단
게임 서버·클라이언트의 로그·지표가 필요
더 알아보기
이 방식은 클릭 이동·탭 타겟 게임이 핑에 둔감한 이유 중 하나입니다. 대신 양쪽 결과가 같다는 보장이 없어서 가끔 위치를 맞춰 주는 장치가 꼭 필요합니다. 부동소수점 계산은 CPU 종류, 컴파일러와 그 최적화 설정(디버그·릴리스 빌드 차이 포함)에 따라 결과가 조금씩 달라질 수 있습니다. 락스텝·롤백처럼 입력만 주고받고 양쪽 계산 결과가 똑같다고 가정하는 구조에서는 이 작은 차이가 쌓여 두 화면의 게임 상태가 갈라지는 어긋남(desync)이 생길 수 있습니다.

출처

  1. Deterministic Lockstep Gaffer On Games
    같은 기계에서 결정적이어도 컴파일러·OS·CPU가 다르면 부동소수점 결과가 달라질 수 있음
  2. State Synchronization Gaffer On Games
    입력과 함께 상태를 보내면 완벽한 결정성 없이도 양쪽을 맞출 수 있음
  3. Peeking into VALORANT's Netcode Riot Games
    패킷 손실이나 두 캐릭터가 같은 자리로 가려 할 때 서버·클라이언트 시뮬레이션이 어긋나 보정이 필요
  4. 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Game Developer
    아주 작은 차이가 시간이 지나며 커져 일꾼의 경로가 조금씩 어긋남. 월드·개체·경로 탐색을 체크섬으로 비교해 어긋남(out-of-sync)을 찾음
  5. Floating Point Determinism Gaffer On Games
    같은 부동소수점 코드도 컴파일러·CPU 아키텍처, 디버그·릴리스 빌드에 따라 결과가 달라질 수 있음. AMD와 Intel CPU가 초월 함수에서 조금 다른 값을 낸 사례
  6. /fp (Specify floating-point behavior) Microsoft
    /fp:fast는 부동소수점 연산 순서를 바꾸거나 합쳐 다른 /fp 설정과 결과가 달라질 수 있고, FMA로 합친 연산도 따로 곱하고 더한 결과와 다를 수 있음

함께 보면 좋은 원인

같은 층: 동기화 설계

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

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